Replace sysctl HW_PHYSMEM/MEMSIZE/whatever madness with sysconf. Index: builtin/gc.c --- builtin/gc.c.orig +++ builtin/gc.c @@ -274,20 +274,13 @@ static uint64_t total_ram(void) if (!sysinfo(&si)) return si.totalram; -#elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM)) - int64_t physical_memory; - int mib[2]; - size_t length; +#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) + long phys_pages, pagesize; - mib[0] = CTL_HW; -# if defined(HW_MEMSIZE) - mib[1] = HW_MEMSIZE; -# else - mib[1] = HW_PHYSMEM; -# endif - length = sizeof(int64_t); - if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0)) - return physical_memory; + phys_pages = sysconf(_SC_PHYS_PAGES); + pagesize = sysconf(_SC_PAGESIZE); + if (phys_pages != -1 && pagesize != -1) + return (uint64_t)phys_pages * (uint64_t)pagesize; #elif defined(GIT_WINDOWS_NATIVE) MEMORYSTATUSEX memInfo;