diff --git a/runtime/include/psx_bss.h b/runtime/include/psx_bss.h index 783286e3..d903df9c 100644 --- a/runtime/include/psx_bss.h +++ b/runtime/include/psx_bss.h @@ -3,11 +3,16 @@ * MinGW + LTO has been observed to place multi‑MiB uninitialized globals into * .rdata as literal zeros, bloating release .exe size by ~100+ MiB (e.g. * g_fntrace_ring). Explicit .bss placement keeps them RAM-only on disk. + * + * Mach-O requires "segment,section" (not ELF ".bss"); Apple Clang rejects + * section(".bss") at compile time. */ #ifndef PSXRECOMP_PSX_BSS_H #define PSXRECOMP_PSX_BSS_H -#if defined(__GNUC__) || defined(__clang__) +#if defined(__APPLE__) +#define PSX_BSS __attribute__((section("__DATA,__bss"))) +#elif defined(__GNUC__) || defined(__clang__) #define PSX_BSS __attribute__((section(".bss"))) #elif defined(_MSC_VER) /* MSVC already puts uninitialized globals in .bss by default. */