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:[EMAIL PROTECTED]

/*********************
Marc Karasek
MTS
Sun Microsystems
mailto:[EMAIL PROTECTED]
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
-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to