[LinuxBIOS] support PIC and prototypes
rminnich at gmail.com
Thu Aug 30 01:16:12 CEST 2007
On 8/29/07, Peter Stuge <peter at stuge.se> wrote:
> Did you rule out the possibility of having the functions in stage0
> that need to be called from initram in a separate file, making them
> all PIC and calling them from CAR, PIC and stage2+ alike?
> Would that require the pointer trick for each function in all the
> files where they're called? :\
yes. You CALLER would still need to use the pointer trick.
> > Another name?
> Can't come up with anything good right now.
I'm counting on you :-)
> > stage0 is not pic. If we make it pic, it ballons.
> Sorry, balloons? You mean it grows huge or just blows up == doesn't work?
grow from 4k to very large.
> > When gcc generates PIC code, it still generates relative calls.
> Isn't that (part of) the definition of PIC?
Sort of. I need relative for initram, but I need abs calls to the
stage0 code. How do I get this?
[rminnich at xcpu tmp]$ cat a.s
.type a, @function
movl %esp, %ebp
subl $4, %esp
addl $_GLOBAL_OFFSET_TABLE_, %ebx
call b at PLT
addl $4, %esp
.size a, .-a
.ident "GCC: (GNU) 4.1.2 20070502 (
Red Hat 4.1.2-12)"
thunk.bx,"axG", at progbits,__i686.get_pc_thunk
.type __i686.get_pc_thunk.bx, @fun
movl (%esp), %ebx
[rminnich at xcpu tmp]$ cat a.c
[rminnich at xcpu tmp]$
note the call to b. It ends up being relative jmp. We need it to be
abs when calling stage0 ...
More information about the coreboot