Index: branches/ErmaC/Enoch/i386/libsaio/console.c =================================================================== --- branches/ErmaC/Enoch/i386/libsaio/console.c (revision 2807) +++ branches/ErmaC/Enoch/i386/libsaio/console.c (revision 2808) @@ -266,6 +266,7 @@ vprf(fmt, ap); } } + va_end(ap); { // Kabyl: BooterLog @@ -280,11 +281,12 @@ } pi.str = cursor; pi.last_str = 0; + va_start(ap, fmt); prf(fmt, ap, sputc, &pi); + va_end(ap); cursor += strlen((char *)cursor); } - va_end(ap); return(0); } @@ -301,6 +303,7 @@ { vprf(fmt, ap); } + va_end(ap); // Kabyl: BooterLog struct putc_info pi; @@ -317,10 +320,11 @@ pi.str = cursor; pi.last_str = 0; + va_start(ap, fmt); prf(fmt, ap, sputc, &pi); + va_end(ap); cursor += strlen((char *)cursor); - va_end(ap); return(0); } Index: branches/ErmaC/Enoch/i386/libsaio/bootstruct.c =================================================================== --- branches/ErmaC/Enoch/i386/libsaio/bootstruct.c (revision 2807) +++ branches/ErmaC/Enoch/i386/libsaio/bootstruct.c (revision 2808) @@ -40,6 +40,8 @@ #define DBG(x...) msglog(x) #endif +#define MEG (1024*1024) + /*========================================================================== * Initialize the structure of parameters passed to * the kernel by the booter. @@ -150,6 +152,9 @@ void *addr; int i; + /* Memory size to use for defaults calculations (cparm) */ + uint64_t sane_size = 0; + EfiMemoryRange *memoryMap = NULL; MemoryRange *range = NULL; int memoryMapCount = bootInfo->memoryMapCount; @@ -209,6 +214,56 @@ memoryMap->VirtualStart = range->base; memoryMap->NumberOfPages = range->length >> I386_PGSHIFT; memoryMap->Attribute = 0; + + switch (memoryMap->Type) + { + case kEfiLoaderCode: + case kEfiLoaderData: + case kEfiBootServicesCode: + case kEfiBootServicesData: + case kEfiConventionalMemory: + /* + * Consolidate usable memory types into one (cparm). + */ + sane_size += (uint64_t)(memoryMap->NumberOfPages << I386_PGSHIFT); + break; + + case kEfiRuntimeServicesCode: + case kEfiRuntimeServicesData: + case kEfiACPIReclaimMemory: + case kEfiACPIMemoryNVS: + case kEfiPalCode: + /* + * sane_size should reflect the total amount of physical ram + * in the system, not just the amount that is available for + * the OS to use (cparm) + */ + sane_size += (uint64_t)(memoryMap->NumberOfPages << I386_PGSHIFT); + break; + default: + break; + } + + if (sane_size == 0) + { + + // I Guess that if sane_size == 0 we've got a big problem here, + // and it means that the memory map was not converted properly (cparm) + stop("Unable to convert memory map into proper format\n"); + return; + } + + /* + * For user visible memory size, round up to 128 Mb - accounting for the various stolen memory + * not reported by EFI. (cparm) + */ +#if DEBUG_BOOTSTRUCT + sane_size = (sane_size + 128 * MEG - 1) & ~((uint64_t)(128 * MEG - 1)); + DBG( "Total amount of physical RAM in the system : %d\n", ((sane_size + 128 * MEG - 1) & ~((uint64_t)(128 * MEG - 1))) ); +#else + DBG( "Total amount of RAM in the system : %d\n", sane_size ); +#endif + bootArgs->PhysicalMemorySize = sane_size; } // copy bootFile into device tree Index: branches/ErmaC/Enoch/i386/libsaio/bootargs.h =================================================================== --- branches/ErmaC/Enoch/i386/libsaio/bootargs.h (revision 2807) +++ branches/ErmaC/Enoch/i386/libsaio/bootargs.h (revision 2808) @@ -132,11 +132,32 @@ #define kBootArgsFlagHiDPI (1 << 1) #define kBootArgsFlagBlack (1 << 2) #define kBootArgsFlagCSRActiveConfig (1 << 3) -#define kBootArgsFlagCSRPendingConfig (1 << 4) +#define kBootArgsFlagCSRConfigMode (1 << 4) #define kBootArgsFlagCSRBoot (1 << 5) #define kBootArgsFlagBlackBg (1 << 6) #define kBootArgsFlagLoginUI (1 << 7) +#define kBootArgsFlagInstallUI (1 << 8) +/* Rootless configuration flags */ +// http://www.idelta.info/archives/kext-to-check-sip-rootless-status-on-el-capitan/ +#define CSR_ALLOW_UNTRUSTED_KEXTS (1 << 0) /* Allow untrusted kexts */ +#define CSR_ALLOW_UNRESTRICTED_FS (1 << 1) /* Allow unrestricted file system. */ +#define CSR_ALLOW_TASK_FOR_PID (1 << 2) /* Allow test_for_pid() */ +#define CSR_ALLOW_KERNEL_DEBUGGER (1 << 3) +#define CSR_ALLOW_APPLE_INTERNAL (1 << 4) +#define CSR_ALLOW_UNRESTRICTED_DTRACE (1 << 5) /* Allow unrestricted dtrace */ +#define CSR_ALLOW_UNRESTRICTED_NVRAM (1 << 6) /* Allow unrestricted NVRAM */ +#define CSR_ALLOW_DEVICE_CONFIGURATION (1 << 7) /* Allow device configuration */ + +#define CSR_VALID_FLAGS (CSR_ALLOW_UNTRUSTED_KEXTS | \ + CSR_ALLOW_UNRESTRICTED_FS | \ + CSR_ALLOW_TASK_FOR_PID | \ + CSR_ALLOW_KERNEL_DEBUGGER | \ + CSR_ALLOW_APPLE_INTERNAL | \ + CSR_ALLOW_UNRESTRICTED_DTRACE | \ + CSR_ALLOW_UNRESTRICTED_NVRAM | \ + CSR_ALLOW_DEVICE_CONFIGURATION) + typedef struct boot_args { uint16_t Revision; /* Revision of boot_args structure */ @@ -181,10 +202,14 @@ uint64_t pciConfigSpaceBaseAddress; uint32_t pciConfigSpaceStartBusNumber; uint32_t pciConfigSpaceEndBusNumber; - uint32_t csrActiveConfig; - uint32_t csrPendingConfig; - uint32_t __reserved4[728]; + uint32_t csrActiveConfig; + uint32_t csrCapabilities; + uint32_t boot_SMC_plimit; + uint16_t bootProgressMeterStart; + uint16_t bootProgressMeterEnd; + uint32_t __reserved4[726]; + } boot_args; typedef struct boot_args_legacy Index: branches/ErmaC/Enoch/i386/libsaio/ati.c =================================================================== --- branches/ErmaC/Enoch/i386/libsaio/ati.c (revision 2807) +++ branches/ErmaC/Enoch/i386/libsaio/ati.c (revision 2808) @@ -354,7 +354,7 @@ { 0x689D, 0x00000000, CHIP_FAMILY_HEMLOCK, "ATI Radeon HD 5900 Series", kUakari }, // CYPRESS - { 0x689E, 0x00000000, CHIP_FAMILY_CYPRESS, "ATI Radeon HD 5800 Series", kUakari }, + { 0x689E, 0x00000000, CHIP_FAMILY_CYPRESS, "ATI Radeon HD 5830 Series", kUakari }, // JUNIPER { 0x68A0, 0x00000000, CHIP_FAMILY_JUNIPER, "ATI Radeon HD 5770 Series", kHoolock }, // Mobile Index: branches/ErmaC/Enoch/i386/libsaio/fake_efi.c =================================================================== --- branches/ErmaC/Enoch/i386/libsaio/fake_efi.c (revision 2807) +++ branches/ErmaC/Enoch/i386/libsaio/fake_efi.c (revision 2808) @@ -87,6 +87,9 @@ EFI_UINT32 getCPUTick(void) { uint32_t out; + /* + * Note: shl $32, %edx leaves 0 in %edx, and or to %eax does nothing - zenith432 + */ __asm__ volatile ( "rdtsc\n" "shl $32,%%edx\n" @@ -105,8 +108,14 @@ /* Identify ourselves as the EFI firmware vendor */ static EFI_CHAR16 const FIRMWARE_VENDOR[] = {'E','n','o','c','h', 0}; -static EFI_UINT32 const FIRMWARE_REVISION = 0x0001000a; // got from real MBP6,1 +// Pike R. Alpha +/* + * We use the same value for everything, as we should, which means (currently) + * 0x0001000A for EFI64 and 0x00010001 for EFI32. Just like on real Mac's. + */ +static EFI_UINT32 const FIRMWARE_REVISION = EFI_SYSTEM_TABLE_REVISION; + /* Default platform system_id (fix by IntVar) static EFI_CHAR8 const SYSTEM_ID[] = "0123456789ABCDEF"; //random value gen by uuidgen */ @@ -475,6 +484,26 @@ static EFI_UINT8 const STARTUP_POWER_EVENTS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static EFI_UINT8 const COMPAT_MODE[] = { 0x01, 0x00, 0x00, 0x00 }; +// Pike R. Alpha +static EFI_UINT8 const BOOT_DEVICE_PATH[] = +{ + 0x02, 0x01, 0x0C, 0x00, 0xD0, 0x41, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, + 0x02, 0x1F, 0x03, 0x12, 0x0A, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x2A, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x28, 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x0B, 0x63, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x8C, 0x53, 0x3F, 0x1B, 0xCA, 0x83, 0x38, 0xA9, 0xD0, 0xF0, 0x46, + 0x19, 0x14, 0x8E, 0x31, 0x02, 0x02, 0x7F, 0xFF, 0x04, 0x00 +}; +// Pike R. Alpha +static EFI_UINT8 const BOOT_FILE_PATH[] = +{ + 0x04, 0x04, 0x50, 0x00, 0x5c, 0x00, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x5c, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x62, 0x00, 0x72, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x5c, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x76, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5c, 0x00, 0x62, 0x00, + 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x7f, 0xff, 0x04, 0x00 +}; + /* * Get an smbios option string option to convert to EFI_CHAR16 string */ @@ -656,6 +685,8 @@ { Node *chosenNode; chosenNode = DT__FindNode("/chosen", false); + unsigned long adler32 = 0; + if (chosenNode == NULL) { stop("setupChosenNode: Couldn't get '/chosen' node"); @@ -672,11 +703,12 @@ // Adding the default kernel name (mach_kernel) for kextcache. DT__AddProperty(chosenNode, "boot-file", sizeof(bootInfo->bootFile), bootInfo->bootFile); -// DT__AddProperty(chosenNode, "boot-device-path", bootDPsize, gBootDP); + DT__AddProperty(chosenNode, "boot-file-path", sizeof(BOOT_FILE_PATH), (EFI_UINT8 *) &BOOT_FILE_PATH); -// DT__AddProperty(chosenNode, "boot-file-path", bootFPsize, gBootFP); + // Adding the root path for kextcache. + DT__AddProperty(chosenNode, "boot-device-path", sizeof(BOOT_DEVICE_PATH), (EFI_UINT8 *) &BOOT_DEVICE_PATH); -// DT__AddProperty(chosenNode, "boot-kernelcache-adler32", sizeof(adler32), adler32); + DT__AddProperty(chosenNode, "boot-kernelcache-adler32", sizeof(unsigned long), &adler32); DT__AddProperty(chosenNode, MACHINE_SIG_PROP, sizeof(Platform.HWSignature), (EFI_UINT32 *)&Platform.HWSignature); @@ -762,10 +794,16 @@ // shr $0x8, %rcx rdx = (cpuTick >> 0x10); // mov %rax, %rdx // shr $0x10, %rdx - rdi = rsi; // mov %rsi, %rdi + /* + * Note: In x86 assembly, rXX is upper part of eXX register. + * In C they're different variables. + * The code is identical with or without RANDOMSEED. - zenith432 + */ + rdi = rsi = esi; // mov %rsi, %rdi rdi = (rdi ^ cpuTick); // xor %rax, %rdi rdi = (rdi ^ rcx); // xor %rcx, %rdi rdi = (rdi ^ rdx); // xor %rdx, %rdi + edi = (EFI_UINT32) rdi; seedBuffer[index] = (rdi & 0xff); // mov %dil, (%r15,%r12,1) #endif Index: branches/ErmaC/Enoch/i386/boot2/drivers.c =================================================================== --- branches/ErmaC/Enoch/i386/boot2/drivers.c (revision 2807) +++ branches/ErmaC/Enoch/i386/boot2/drivers.c (revision 2808) @@ -176,6 +176,8 @@ return 0; } + // ======================================== + // Load extra drivers if a hook has been installed. if (LoadExtraDrivers_p != NULL) { Index: branches/ErmaC/Enoch/i386/boot2/boot.c =================================================================== --- branches/ErmaC/Enoch/i386/boot2/boot.c (revision 2807) +++ branches/ErmaC/Enoch/i386/boot2/boot.c (revision 2808) @@ -149,6 +149,81 @@ entry_t kernelEntry; bootArgs->kaddr = bootArgs->ksize = 0; + +// =============================================================================== + + // OS X Mountain Lion 10.8 + if ( MacOSVerCurrent >= MacOSVer2Int("10.8") ) // Mountain Lion and Up! + { + // cparm + bool KPRebootOption = false; + bool HiDPIOption = false; + getBoolForKey(kRebootOnPanic, &KPRebootOption, &bootInfo->chameleonConfig); + if ( KPRebootOption ) + { + bootArgs->flags |= kBootArgsFlagRebootOnPanic; + } + + // cparm + getBoolForKey(kEnableHiDPI, &HiDPIOption, &bootInfo->chameleonConfig); + + if ( HiDPIOption ) + { + bootArgs->flags |= kBootArgsFlagHiDPI; + } + } + + // OS X Yosemite 10.10 + if ( MacOSVerCurrent >= MacOSVer2Int("10.10") ) // Yosemite and Up! + { + // Pike R. Alpha + bool FlagBlackOption = false; + getBoolForKey(kBlackMode, &FlagBlackOption, &bootInfo->chameleonConfig); + if ( FlagBlackOption ) + { + //bootArgs->flags |= kBootArgsFlagBlack; + bootArgs->flags |= kBootArgsFlagBlackBg; // Micky1979 + } + } + + // OS X El Capitan 10.11 + if ( MacOSVerCurrent >= MacOSVer2Int("10.11") ) // El Capitan and Up! + { + // ErmaC + int crsValue; + +#if 0 + /* + * A special BootArgs flag "kBootArgsFlagCSRBoot" + * is set in the Recovery or Installation environment. + * This flag is kind of overkill by turning off all the protections + */ + + if (isRecoveryHD) + { + // SIP can be controlled with or without FileNVRAM.kext (Pike R. Alpha) + bootArgs->flags |= (kBootArgsFlagCSRActiveConfig + kBootArgsFlagCSRConfigMode + kBootArgsFlagCSRBoot); + } +#endif + + bootArgs->flags |= kBootArgsFlagCSRActiveConfig; + + // Set limit to 7bit + if ( getIntForKey(kCsrActiveConfig, &crsValue, &bootInfo->chameleonConfig) && (crsValue >= 0 && crsValue <= 127) ) + { + bootArgs->csrActiveConfig = crsValue; + } + else + { + // zenith432 + bootArgs->csrActiveConfig = 0x67; + } + bootArgs->csrCapabilities = CSR_VALID_FLAGS; + bootArgs->boot_SMC_plimit = 0; + } + +// =============================================================================== + execute_hook("ExecKernel", (void *)binary, NULL, NULL, NULL); ret = DecodeKernel(binary, @@ -316,14 +391,21 @@ } closedir(cacheDir); } - else + else if ( MacOSVerCurrent >= MacOSVer2Int("10.7") && MacOSVerCurrent < MacOSVer2Int("10.10") ) { - // Lion, Mountain Lion, Mavericks, Yosemite and El Capitan prelink kernel cache file - // for 10.7 10.8 10.9 10.10 10.11 + // Lion, Mountain Lion and Mavericks prelink kernel cache file + // for 10.7 10.8 10.9 snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%skernelcache", kDefaultCachePathSnow); verbose("Kernel Cache file path (Mac OS X 10.7 and newer): %s\n", kernelCacheFile); } + else + { + // Yosemite and El Capitan prelink kernel cache file + // for 10.10 10.11 + snprintf(kernelCacheFile, sizeof(kernelCacheFile), "%sprelinkedkernel", kDefaultCachePathYosemite); + verbose("Kernel Cache file path (OS X 10.10 and newer): %s\n", kernelCacheFile); + } } // Check if the kernel cache file exists @@ -410,9 +492,11 @@ // own things, and then calls common_boot. void boot(int biosdev) { - initialize_runtime(); // Enable A20 gate before accessing memory above 1Mb. + // Note: malloc_init(), called via initialize_runtime() writes + // memory >= 1Mb, so A20 must be enabled before calling it. - zenith432 enableA20(); + initialize_runtime(); common_boot(biosdev); } @@ -899,16 +983,13 @@ // ========================================================================= bool checkOSVersion(const char *version) { - if ( (sizeof(version) > 4) && ('.' != version[4]) && ('\0' != version[4]) ) + if ( '\0' != version[4] ) { - return ((gMacOSVersion[0] == version[0]) && (gMacOSVersion[1] == version[1]) - && (gMacOSVersion[2] == version[2]) && (gMacOSVersion[3] == version[3]) - && (gMacOSVersion[4] == version[4])); + return !memcmp(&gMacOSVersion[0], &version[0], 5); } else { - return ((gMacOSVersion[0] == version[0]) && (gMacOSVersion[1] == version[1]) - && (gMacOSVersion[2] == version[2]) && (gMacOSVersion[3] == version[3])); + return !memcmp(&gMacOSVersion[0], &version[0], 4); } } Index: branches/ErmaC/Enoch/i386/boot2/boot.h =================================================================== --- branches/ErmaC/Enoch/i386/boot2/boot.h (revision 2807) +++ branches/ErmaC/Enoch/i386/boot2/boot.h (revision 2808) @@ -46,6 +46,7 @@ // kernel cache #define kDefaultCachePathLeo "/System/Library/Caches/com.apple.kernelcaches/" #define kDefaultCachePathSnow "/System/Library/Caches/com.apple.kext.caches/Startup/" +#define kDefaultCachePathYosemite "/System/Library/PrelinkedKernels/" // Lion installer #define kLionInstallerDataFolder "/Mac OS X Install Data/" @@ -185,7 +186,9 @@ #define kEnableHDMIAudio "EnableHDMIAudio" /* ati.c && nvidia.c */ /* cparm: added these keys */ +#define kRebootOnPanic "RebootOnPanic" #define kEnableHiDPI "EnableHiDPI" // enable High resolution display (aka Retina) + /* ErmaC: added these keys */ #define kEnableDualLink "EnableDualLink" /* ati.c && nvidia.c && gma.c */ #define kNvidiaGeneric "NvidiaGeneric" /* nvidia.c */ @@ -204,6 +207,7 @@ #define kDropBGRT "DropBGRT" /* acpi_patcher.c */ #define kDropMCFG "DropMCFG" /* acpi_patcher.c */ #define kDropAPIC "DropAPIC" /* acpi_patcher.c */ +#define kCsrActiveConfig "CsrActiveConfig" /* boot.c */ /* Pike R. Alpha: added this key */ #define kBlackMode "BlackMode" Index: branches/ErmaC/Enoch/i386/config/confdata.c =================================================================== --- branches/ErmaC/Enoch/i386/config/confdata.c (revision 2807) +++ branches/ErmaC/Enoch/i386/config/confdata.c (revision 2808) @@ -81,6 +81,7 @@ va_start(ap, fmt); if (conf_message_callback) conf_message_callback(fmt, ap); + va_end(ap); } const char *conf_get_configname(void) Index: branches/ErmaC/Enoch/i386/libsa/zalloc.c =================================================================== --- branches/ErmaC/Enoch/i386/libsa/zalloc.c (revision 2807) +++ branches/ErmaC/Enoch/i386/libsa/zalloc.c (revision 2808) @@ -75,7 +75,7 @@ zalloc_base = start ? start : (char *)ZALLOC_ADDR; totalNodes = nodes ? nodes : ZALLOC_NODES; zalloced = (zmem *) zalloc_base; - zavailable = (zmem *) zalloc_base + sizeof(zmem) * totalNodes; + zavailable = (zmem *) (zalloc_base + sizeof(zmem) * totalNodes); zavailable[0].start = (char *)zavailable + sizeof(zmem) * totalNodes; if (size == 0) Index: branches/ErmaC/Enoch/i386/util/fdisk/Makefile =================================================================== --- branches/ErmaC/Enoch/i386/util/fdisk/Makefile (revision 2807) +++ branches/ErmaC/Enoch/i386/util/fdisk/Makefile (revision 2808) @@ -13,8 +13,9 @@ include ${SRCROOT}/Make.rules -LDFLAGS := $(LDFALGS) -mmacosx-version-min=10.5 +LDFLAGS := $(LDFLAGS) -mmacosx-version-min=10.5 +CFLAGS := $(CFLAGS) -mmacosx-version-min=10.5 OBJS = cmd.o32 disk.o32 fdisk.o32 getrawpartition.o32 mbr.o32 misc.o32 opendev.o32 part.o32 user.o32 auto.o32 \ cmd.o64 disk.o64 fdisk.o64 getrawpartition.o64 mbr.o64 misc.o64 opendev.o64 part.o64 user.o64 auto.o64 Index: branches/ErmaC/Enoch/i386/util/boot1-install/Makefile =================================================================== --- branches/ErmaC/Enoch/i386/util/boot1-install/Makefile (revision 2807) +++ branches/ErmaC/Enoch/i386/util/boot1-install/Makefile (revision 2808) @@ -11,7 +11,7 @@ include ${SRCROOT}/Make.rules -LDFLAGS := $(LDFALGS) -mmacosx-version-min=10.5 \ +LDFLAGS := $(LDFLAGS) -mmacosx-version-min=10.5 \ -framework CoreFoundation \ -framework DiskArbitration \ -Wl,-no_source_version \ @@ -21,6 +21,8 @@ -Wl,-no_uuid \ -Wl,-no_dependent_dr_info +CFLAGS := $(CFLAGS) -mmacosx-version-min=10.5 + OBJS = boot1-install.o32 \ boot1-install.o64 @@ -56,4 +58,4 @@ clean-local: @for o in $(OBJS); do if [ -f "$${o}" ];then echo " [RM] $${o}"; fi; done @for p in $(SYMPROG); do if [ -f "$${p}" ];then echo " [RM] $${p}"; fi; done - @rm -f $(SYMPROG) $(OBJS) \ No newline at end of file + @rm -f $(SYMPROG) $(OBJS) Index: branches/ErmaC/Enoch/i386/util/Makefile =================================================================== --- branches/ErmaC/Enoch/i386/util/Makefile (revision 2807) +++ branches/ErmaC/Enoch/i386/util/Makefile (revision 2808) @@ -35,8 +35,10 @@ OBJS := $(addprefix $(OBJROOT)/, $(OBJS)) -LDFLAGS := $(LDFALGS) -framework IOKit -framework CoreFoundation -mmacosx-version-min=10.5 +LDFLAGS := $(LDFLAGS) -framework IOKit -framework CoreFoundation -mmacosx-version-min=10.5 +CFLAGS := $(CFLAGS) -mmacosx-version-min=10.5 + SYMPROG = $(addprefix $(SYMROOT)/, $(PROGRAMS)) DIRS_NEEDED = $(OBJROOT) $(SYMROOT) Index: branches/ErmaC/Enoch/package/Distribution =================================================================== --- branches/ErmaC/Enoch/package/Distribution (revision 2807) +++ branches/ErmaC/Enoch/package/Distribution (revision 2808) @@ -9,7 +9,7 @@ - + Enoch Bootloder revision %CHAMELEONREVISION% @@ -101,7 +101,8 @@ return false; } - function check_chameleon_list_option(key, value) { + function check_chameleon_list_option(key, value) + { if ( bootPlist && bootPlist[ key ] ) { var items = bootPlist[ key ].split(" ");