[LinuxBIOS] Calling non-PIC code from PIC code

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sat Dec 1 05:19:20 CET 2007


Hi Segher,

thanks for looking into this! As per your request on IRC, attached are
the files which comprise the XIP code we are having problems with.
*.85.* has the non-extern variant of initram_printktest.c and does abort
with a linker error (duplicate symbols), *.86.* has the extern variant
and links fine.

Short list of files with explanations:
build/stage0-prefixed.85.o
build/stage0-prefixed.86.o
Object we link against with --just-symbols. It contains the non-PIC code
we want to call.

build/mainboard/emulation/qemu-x86/initram_xip.85.o
build/mainboard/emulation/qemu-x86/initram_xip.86.o
PIC object with "ret (*func)(args) = stage0_##func;" sequence, contains
main(), which calls printk() and printktest().

build/mainboard/emulation/qemu-x86/initram_printktest_xip.85.o
PIC object with "ret (*func)(args) = stage0_##func;" sequence, contains
printktest(), which calls printk().

build/mainboard/emulation/qemu-x86/initram_printktest_xip.86.o
PIC object with "extern ret (*func)(args);" sequence, contains
printktest(), which calls printk().

initram_printktest.85.i
initram_printktest.85.s
initram_printktest.86.i
initram_printktest.86.s
Preprocessed output of the above.

initram.85.i
initram.85.s
initram.86.i
initram.86.s
Assembler output of the above.

shortlog.85.txt
shortlog.86.txt
gcc/ld commands used.

build/linuxbios.initram.86.o
Final linked object. build/linuxbios.initram.85.o did not link.

Call sequence is as follows:

initram.c:main()

->printk()->stage0_printk()

->printk()->stage0_printk()

->printktest1()

    ->printk()->stage0_printk()
->printk()->stage0_printk()

->initram_printktest.c:printktest()
    ->printk()->stage0_printk()  -----dies here


The generated code for printktest() is what we have problems with.

Regards,
Carl-Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: call-nonPIC-from-PIC.tar.gz
Type: application/x-gzip
Size: 13744 bytes
Desc: not available
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20071201/96b5b1c5/attachment.gz>


More information about the coreboot mailing list