Index: trunk/i386/boot2/Makefile =================================================================== --- trunk/i386/boot2/Makefile (revision 2092) +++ trunk/i386/boot2/Makefile (revision 2093) @@ -95,7 +95,7 @@ -nostdlib -arch i386 -Wl,-pie \ -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ - -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + ${DATA_PAD} + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ -Wl,-read_only_relocs,suppress \ -lcc_kext \ $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ @@ -104,8 +104,6 @@ ifeq (${CONFIG_MODULES}, y) - @cp $(SYMROOT)/boot.sys $(SYMROOT)/boot2.sys - @# Generate the Symbols.dylib file @echo "\t[dyldsymboltool] Symbols.dylib" @$(SYMROOT)/dyldsymboltool $(SYMROOT)/boot.sys $(SYMROOT)/${SYMBOLS_MODULE} @@ -116,7 +114,7 @@ -Wl,-sectcreate,__DATA,__Symbols,$(SYMROOT)/Symbols.dylib \ -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ - -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + ${DATA_PAD} + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ -Wl,-read_only_relocs,suppress \ -lcc_kext \ $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ @@ -136,13 +134,13 @@ -Wl,-sectcreate,__DATA,__Symbols,$(SYMROOT)/Symbols.dylib \ -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ - -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + ${DATA_PAD} + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ -Wl,-read_only_relocs,suppress \ -lcc_kext \ $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ -o ${SYMROOT}/$@.sys - @${RM} $(SYMROOT)/${SYMBOLS_MODULE} + @#${RM} $(SYMROOT)/${SYMBOLS_MODULE} @$(LD) -arch i386 \ -undefined dynamic_lookup \ @@ -156,10 +154,9 @@ endif - @# this is done in a sub process after boot.sys exists so the strings are populated correctly - @make embed_symbols - @${RM} $(SYMROOT)/boot2.sys + @echo "\t[MACHOCONV] boot" + @$(SYMROOT)/machOconv ${SYMROOT}/$@.sys $(SYMROOT)/$@ &> /dev/null @( size=`ls -l $(SYMROOT)/boot | awk '{ print $$5}'` ; \ if expr "$$size" ">" "$(MAXBOOTSIZE)" > /dev/null ;\ @@ -172,18 +169,6 @@ echo "\t******* boot is $$size bytes *******"; \ fi) -embed_symbols: -ifeq (${CONFIG_MODULES}, y) - @echo ================= Embedding Symbols.dylib ================= - @echo "\t[MACHOCONV] boot" - @$(SYMROOT)/machOconv $(SYMROOT)/boot2.sys $(SYMROOT)/boot &> /dev/null - - @echo "\t******* Patching at $(PATCH_ADDR) ******" - @stat -f%z $(SYMROOT)/boot | perl -ane "print pack('V',@F[0]);" | dd conv=notrunc of=${SYMROOT}/boot.sys bs=1 count=4 seek=$(PATCH_ADDR) &> /dev/null -endif - @echo "\t[MACHOCONV] boot" - @$(SYMROOT)/machOconv $(SYMROOT)/boot.sys $(SYMROOT)/boot - $(SYMROOT)/art.h: @if [ "$(PNGCRUSH)" ]; then \ echo "optimizing art files ...\n$(PNGCRUSH) $(PNGOPTIONS) artwork/$(THEME)"; \ Index: trunk/i386/boot2/modules.c =================================================================== --- trunk/i386/boot2/modules.c (revision 2092) +++ trunk/i386/boot2/modules.c (revision 2093) @@ -26,8 +26,6 @@ UInt64 textAddress = 0; UInt64 textSection = 0; -void* symbols_module_start = (void*)0xFFFFFFFF; // Global, value is populated by the makefile with actual address - /** Internal symbols, however there are accessor methods **/ moduleHook_t* moduleCallbacks = NULL; moduleList_t* loadedModules = NULL; @@ -48,10 +46,12 @@ int retVal = 0; void (*module_start)(void) = NULL; - char* module_data = symbols_module_start + BOOT2_ADDR; + + extern char symbols_start __asm("section$start$__DATA$__Symbols"); + char* module_data = &symbols_start; // Intialize module system - if(symbols_module_start != (void*)0xFFFFFFFF) + if(module_data) { // Module system was compiled in (Symbols.dylib addr known) module_start = parse_mach(module_data, &load_module, &add_symbol, NULL); @@ -60,7 +60,6 @@ { // Notify the system that it was laoded module_loaded(SYMBOLS_MODULE, SYMBOLS_AUTHOR, SYMBOLS_DESCRIPTION, SYMBOLS_VERSION, SYMBOLS_COMPAT); - (*module_start)(); // Start the module. This will point to load_all_modules due to the way the dylib was constructed. execute_hook("ModulesLoaded", NULL, NULL, NULL, NULL); DBG("Module %s Loaded.\n", SYMBOLS_MODULE); @@ -69,25 +68,8 @@ } else { - module_data -= 0x10; // XCODE 4 HACK - module_start = parse_mach(module_data, &load_module, &add_symbol, NULL); - - if(module_start && module_start != (void*)0xFFFFFFFF) - { - // Notify the system that it was laoded - module_loaded(SYMBOLS_MODULE, SYMBOLS_AUTHOR, SYMBOLS_DESCRIPTION, SYMBOLS_VERSION, SYMBOLS_COMPAT); - - (*module_start)(); // Start the module. This will point to load_all_modules due to the way the dylib was constructed. - execute_hook("ModulesLoaded", NULL, NULL, NULL, NULL); - DBG("Module %s Loaded.\n", SYMBOLS_MODULE); - retVal = 1; - - } - else - { - // The module does not have a valid start function - printf("Unable to start %s\n", SYMBOLS_MODULE); getchar(); - } + // The module does not have a valid start function + printf("Unable to start %s at 0x%x\n", SYMBOLS_MODULE, module_data); pause(); } } return retVal;