[LinuxBIOS] Qemu compile for LinuxBIOSV2

Marc Karasek Marc.Karasek at Sun.COM
Thu Dec 6 16:47:24 CET 2007


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 at sun.com

/*********************
Marc Karasek
MTS
Sun Microsystems
mailto:marc.karasek at 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
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20071206/30c30b10/attachment.html>


More information about the coreboot mailing list