As promised here is the patch for first the --build-on problem and also the final linker problem. Although I consider the second one a patch rather than a fix.. :-)
I have compiled this and tested it with FILO under QEMU. I think this will take care of all of the other builds as well. At least teh i386 ones.. :-)
Files Modified: LinuxBIOSv2/src/arch/i386/Config.lb LinuxBIOSv2/src/arch/i386/lib/id.lds LinuxBIOSv2/src/config/Config.lb /*************************Patch*********************************************** diff -C 3 -r -x .svn LinuxBIOSv2.orig/src/arch/i386/Config.lb LinuxBIOSv2/src/arch/i386/Config.lb *** LinuxBIOSv2.orig/src/arch/i386/Config.lb 2007-12-06 10:06:31.000000000 -0500 --- LinuxBIOSv2/src/arch/i386/Config.lb 2007-12-04 16:25:13.000000000 -0500 *************** *** 100,106 ****
makerule linuxbios depends "crt0.o init.o $(LINUXBIOS_APC) $(LINUXBIOS_RAM_ROM) ldscript.ld" ! action "$(CC) -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o init.o" action "$(CROSS_COMPILE)nm -n linuxbios | sort > linuxbios.map" end
--- 100,106 ----
makerule linuxbios depends "crt0.o init.o $(LINUXBIOS_APC) $(LINUXBIOS_RAM_ROM) ldscript.ld" ! action "$(CC) -Wl,--build-id=none -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o init.o" action "$(CROSS_COMPILE)nm -n linuxbios | sort > linuxbios.map" end
diff -C 3 -r -x .svn LinuxBIOSv2.orig/src/arch/i386/lib/id.lds LinuxBIOSv2/src/arch/i386/lib/id.lds *** LinuxBIOSv2.orig/src/arch/i386/lib/id.lds 2007-12-06 10:06:31.000000000 -0500 --- LinuxBIOSv2/src/arch/i386/lib/id.lds 2007-12-06 10:36:31.000000000 -0500 *************** *** 1,5 **** SECTIONS { ! . = (_ROMBASE + ROM_IMAGE_SIZE - 0x10) - (__id_end - __id_start); .id (.): { *(.id) } --- 1,11 ---- SECTIONS { ! ! /* ! * . = (_ROMBASE + (ROM_IMAGE_SIZE - 0x10)) - (__id_end - __id_start); ! * This is a temporary fix. Under Fedora 8 ld does not like it if the .id section is above address 0xFFFF_EF00 ! */ ! _ROMTEMP = 0xffffef00; ! . = _ROMTEMP; .id (.): { *(.id) } Only in LinuxBIOSv2/src/arch/i386/lib: id.lds~ diff -C 3 -r -x .svn LinuxBIOSv2.orig/src/config/Config.lb LinuxBIOSv2/src/config/Config.lb *** LinuxBIOSv2.orig/src/config/Config.lb 2007-12-06 10:06:30.000000000 -0500 --- LinuxBIOSv2/src/config/Config.lb 2007-12-04 16:27:48.000000000 -0500 *************** *** 40,51 ****
makerule linuxbios_ram.o depends "$(DRIVER) linuxbios.a $(LIBGCC_FILE_NAME)" ! action "$(CC) -nostdlib -r -o $@ c_start.o $(DRIVER) linuxbios.a $(LIBGCC_FILE_NAME)" end
makerule linuxbios_ram depends "linuxbios_ram.o $(TOP)/src/config/linuxbios_ram.ld ldoptions" ! action "$(CC) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/linuxbios_ram.ld linuxbios_ram.o" action "$(CROSS_COMPILE)nm -n linuxbios_ram | sort > linuxbios_ram.map" end
--- 40,51 ----
makerule linuxbios_ram.o depends "$(DRIVER) linuxbios.a $(LIBGCC_FILE_NAME)" ! action "$(CC) -Wl,--build-id=none -nostdlib -r -o $@ c_start.o $(DRIVER) linuxbios.a $(LIBGCC_FILE_NAME)" end
makerule linuxbios_ram depends "linuxbios_ram.o $(TOP)/src/config/linuxbios_ram.ld ldoptions" ! action "$(CC) -Wl,--build-id=none -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/linuxbios_ram.ld linuxbios_ram.o" action "$(CROSS_COMPILE)nm -n linuxbios_ram | sort > linuxbios_ram.map" end /*************************Patch***********************************************
Signed-off-by: Marc Karasek mailto:marc.karasek@sun.com
/********************* Marc Karasek MTS Sun Microsystems mailto:marc.karasek@sun.com ph:770.360.6415 *********************/
Carl-Daniel Hailfinger wrote:
On 03.12.2007 21:18, Marc Karasek wrote:
I think I have found the problem. It is related to the patch Ed sent. The new LD looks like it automagically turns on the --build-id option. I have not found out how turn it off. When this option is used it generates the .note.gnu.build-id section. When this section was discarded in the first ld pass (linuxbios_rom.ram creation) it was causing the segmentation fault crash. It looks like this same option is being called again when crt0.o is linked to create linuxbios. I have added the .note.gnu.build-id section to the .id section in the ldscript.ld file. SECTIONS { . = (_ROMBASE + ROM_IMAGE_SIZE - 0x10) - (__id_end - __id_start); .id (.) : { *(.id) *(.note.gnu.build-id) }
This has gotten me past the second crash but now linuxbios.strip is crashing.
Well done.
nm -n linuxbios | sort > linuxbios.map objcopy --gap-fill 0xff -O binary linuxbios linuxbios.strip objcopy: linuxbios.strip: Bad value objcopy: linuxbios.strip: Bad value make[1]: *** [linuxbios.strip] Error 1
So this does not look like a ld problem, but an added feature to ld is causing us grief. If anyone can figure out how to turn this option off, that may fix all of this without any patches... :-)
Still, it would be a nice gesture to the binutils guys to report it as a bug. Maybe there's some bug deeper down which triggers this.
Regards, Carl-Daniel