Index: trunk/i386/libsaio/bootstruct.c =================================================================== --- trunk/i386/libsaio/bootstruct.c (revision 2603) +++ trunk/i386/libsaio/bootstruct.c (revision 2604) @@ -119,20 +119,20 @@ void reserveKernBootStruct(void) { - if ( MacOSVerCurrent >= MacOSVer2Int("10.7") ) // OS X 10.7 and newer + if ( TIGER || LEOPARD || SNOW_LEOPARD ) { + // for 10.4 10.5 10.6 + void *oldAddr = bootArgsPreLion; + bootArgsPreLion = (boot_args_pre_lion *)AllocateKernelMemory(sizeof(boot_args_pre_lion)); + bcopy(oldAddr, bootArgsPreLion, sizeof(boot_args_pre_lion)); + } + else + { // for 10.7 10.8 10.9 10.10 void *oldAddr = bootArgs; bootArgs = (boot_args *)AllocateKernelMemory(sizeof(boot_args)); bcopy(oldAddr, bootArgs, sizeof(boot_args)); } - else - { - // for 10.4 10.5 10.6 - void *oldAddr = bootArgsPreLion; - bootArgsPreLion = (boot_args_pre_lion *)AllocateKernelMemory(sizeof(boot_args_pre_lion)); - bcopy(oldAddr, bootArgsPreLion, sizeof(boot_args_pre_lion)); - } } //============================================================================== Index: trunk/i386/boot2/drivers.c =================================================================== --- trunk/i386/boot2/drivers.c (revision 2603) +++ trunk/i386/boot2/drivers.c (revision 2604) @@ -250,7 +250,7 @@ } else { - if (MacOSVerCurrent >= MacOSVer2Int("10.9")) // issue 352 + if ( MAVERICKS || YOSEMITE ) // issue 352 { strlcpy(gExtensionsSpec, dirSpec, 4087); /* 4096 - sizeof("Library/") */ strcat(gExtensionsSpec, "Library/"); Index: trunk/i386/boot2/boot.c =================================================================== --- trunk/i386/boot2/boot.c (revision 2603) +++ trunk/i386/boot2/boot.c (revision 2604) @@ -227,9 +227,16 @@ finalizeBootStruct(); // Jump to kernel's entry point. There's no going back now. - if (MacOSVerCurrent >= MacOSVer2Int("10.7")) + if ( TIGER || LEOPARD || SNOW_LEOPARD ) { // Notify modules that the kernel is about to be started + execute_hook("Kernel Start", (void *)kernelEntry, (void *)bootArgsPreLion, NULL, NULL); + + startprog( kernelEntry, bootArgsPreLion ); + } + else + { + // Notify modules that the kernel is about to be started execute_hook("Kernel Start", (void *)kernelEntry, (void *)bootArgs, NULL, NULL); // Masking out so that Lion doesn't doublefault @@ -238,14 +245,7 @@ startprog( kernelEntry, bootArgs ); } - else - { - // Notify modules that the kernel is about to be started - execute_hook("Kernel Start", (void*)kernelEntry, (void*)bootArgsPreLion, NULL, NULL); - startprog( kernelEntry, bootArgsPreLion ); - } - // Not reached __builtin_unreachable(); } @@ -253,7 +253,7 @@ //========================================================================== // LoadKernelCache - Try to load Kernel Cache. // return the length of the loaded cache file or -1 on error -long LoadKernelCache(const char* cacheFile, void **binary) +long LoadKernelCache(const char *cacheFile, void **binary) { char kernelCacheFile[512]; char kernelCachePath[512]; @@ -275,53 +275,53 @@ } else { - // Lion, Mountain Lion, Mavericks and Yosemite prelink kernel cache file - if (MacOSVerCurrent >= MacOSVer2Int("10.7")) // OSX is Lion (10.7) or newer + // Leopard prelink kernel cache file + if ( TIGER || LEOPARD ) // OSX is 10.4 or 10.5 { - snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%skernelcache", kDefaultCachePathSnow); - verbose("Kernel Cache file path (Mac OS X 10.7 and newer): %s\n", kernelCacheFile); + // Reset cache name. + bzero(gCacheNameAdler + 64, sizeof(gCacheNameAdler) - 64); + snprintf(gCacheNameAdler + 64, sizeof(gCacheNameAdler) - 64, "%s,%s", gRootDevice, bootInfo->bootFile); + adler32 = Adler32((unsigned char *)gCacheNameAdler, sizeof(gCacheNameAdler)); + snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%s.%08lX", kDefaultCachePathLeo, adler32); + verbose("Reseted kernel cache file path: %s\n", kernelCacheFile); + } // Snow Leopard prelink kernel cache file - else + else if ( SNOW_LEOPARD ) { - if (MacOSVerCurrent >= MacOSVer2Int("10.6")) // OSX is Snow (10.6) - { - snprintf(kernelCacheFile, sizeof(kernelCacheFile), "kernelcache_%s", - (archCpuType == CPU_TYPE_I386) ? "i386" : "x86_64"); + snprintf(kernelCacheFile, sizeof(kernelCacheFile), "kernelcache_%s", + (archCpuType == CPU_TYPE_I386) ? "i386" : "x86_64"); - int lnam = strlen(kernelCacheFile) + 9; //with adler32 - char *name; - u_int32_t prev_time = 0; + int lnam = strlen(kernelCacheFile) + 9; //with adler32 + char *name; + u_int32_t prev_time = 0; - struct dirstuff* cacheDir = opendir(kDefaultCachePathSnow); + struct dirstuff *cacheDir = opendir(kDefaultCachePathSnow); - /* TODO: handle error? */ - if (cacheDir) + /* TODO: handle error? */ + if (cacheDir) + { + while(readdir(cacheDir, (const char**)&name, &flags, &time) >= 0) { - while(readdir(cacheDir, (const char**)&name, &flags, &time) >= 0) + if (((flags & kFileTypeMask) != kFileTypeDirectory) && time > prev_time + && strstr(name, kernelCacheFile) && (name[lnam] != '.')) { - if (((flags & kFileTypeMask) != kFileTypeDirectory) && time > prev_time - && strstr(name, kernelCacheFile) && (name[lnam] != '.')) - { - snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%s%s", kDefaultCachePathSnow, name); - prev_time = time; - } + snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%s%s", kDefaultCachePathSnow, name); + prev_time = time; } - verbose("Kernel Cache file path (Mac OS X 10.6.X): %s\n", kernelCacheFile); } - closedir(cacheDir); + verbose("Kernel Cache file path (Mac OS X 10.6.X): %s\n", kernelCacheFile); } - else - { - // Leopard prelink kernel cache file - // Reset cache name. - bzero(gCacheNameAdler + 64, sizeof(gCacheNameAdler) - 64); - snprintf(gCacheNameAdler + 64, sizeof(gCacheNameAdler) - 64, "%s,%s", gRootDevice, bootInfo->bootFile); - adler32 = Adler32((unsigned char *)gCacheNameAdler, sizeof(gCacheNameAdler)); - snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%s.%08lX", kDefaultCachePathLeo, adler32); - verbose("Reseted kernel cache file path: %s\n", kernelCacheFile); - } + closedir(cacheDir); } + else + { + // Lion, Mountain Lion, Mavericks and Yosemite prelink kernel cache file + // for 10.7 10.8 10.9 10.10 + snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%skernelcache", kDefaultCachePathSnow); + verbose("Kernel Cache file path (Mac OS X 10.7 and newer): %s\n", kernelCacheFile); + + } } // Check if the kernel cache file exists @@ -759,13 +759,13 @@ // bootFile must start with a / if it not start with a device name if (!bootFileWithDevice && (bootInfo->bootFile)[0] != '/') { - if (MacOSVerCurrent >= MacOSVer2Int("10.10")) // OSX is 10.10 or newer + if ( !YOSEMITE ) // Is not Yosemite 10.10 { - snprintf(bootFile, sizeof(bootFile), kDefaultKernelPathForYos "%s", bootInfo->bootFile); // Yosemite + snprintf(bootFile, sizeof(bootFile), "/%s", bootInfo->bootFile); // append a leading / } else { - snprintf(bootFile, sizeof(bootFile), "/%s", bootInfo->bootFile); // append a leading '/' + snprintf(bootFile, sizeof(bootFile), kDefaultKernelPathForYos"%s", bootInfo->bootFile); // Yosemite } } else Index: trunk/i386/boot2/boot.h =================================================================== --- trunk/i386/boot2/boot.h (revision 2603) +++ trunk/i386/boot2/boot.h (revision 2604) @@ -30,13 +30,14 @@ #include "libsaio.h" // OS X Versions -//#define YOSEMITE checkOSVersion("10.10") // Yosemite -//#define MAVERICKS checkOSVersion("10.9") // Mavericks -//#define MOUNTAIN_LION checkOSVersion("10.8") // Mountain Lion -//#define LION checkOSVersion("10.7") // Lion -//#define SNOW_LEOPARD checkOSVersion("10.6") // Snow Leopard -//#define LEOPARD checkOSVersion("10.5") // Leopard -//#define TIGER checkOSVersion("10.4") // Tiger +//#define GALA checkOSVersion("10.11") // Gala +#define YOSEMITE checkOSVersion("10.10") // Yosemite +#define MAVERICKS checkOSVersion("10.9") // Mavericks +#define MOUNTAIN_LION checkOSVersion("10.8") // Mountain Lion +#define LION checkOSVersion("10.7") // Lion +#define SNOW_LEOPARD checkOSVersion("10.6") // Snow Leopard +#define LEOPARD checkOSVersion("10.5") // Leopard +#define TIGER checkOSVersion("10.4") // Tiger /* * Paths used by chameleon