[LinuxBIOS] [v3][PATCH] stage0 and stage1 cleanup and improvements.

Juergen Beisert juergen127 at kreuzholzen.de
Thu Jul 19 23:09:19 CEST 2007


On Thursday 19 July 2007 21:59, Marc Jones wrote:
> Marc Jones wrote:
> > This patch gets Geode LX into initram. It also cleans up some of the
> > generic stage0 and stage1 code for getting through CAR and initram.
> >
> > At this point I need some help. We get into initram but I think that
> > there is a link problem where the first function call to post_code() is
> > past the beginning of the ROM.
> >
> > I see the following:
> > lar finds normal/initram at 0xFFFC4B20
> > The call to 0xFFFC4B20 works and we are executing initram.
> > The call to post_code() is to 0xFFF427d4 <--- BAD!
> >
> > Also, There aren't any map files being generated. I think that they
> > would be helpful in debugging stuff like this. Any volunteers better at
> > makefiles than I am?
>
> Looking at the map file initram knows where post_code() should be but is
> different from where the code calls.
> initram.map:
> 00080000 T main
> ...
> ffffdcb4 A post_code
> ...
>
> I have dumped the code at ffffdcb4 and it is post_code().
>
> I think that the linker knows where the stage0 code is supposed to be
> but it is linking to it with relative addresses instead of absolute???

Using relative addresses is all right, as long ffffdcb4  == runtime address == 
link address for stage 0 and 00080000 == runtime address == link address for 
initram.

> It needs to link relative to initram functions and absolute to stage0.

The compiler generates the opcodes. The linker only fills in the addresses or 
offsets. If the Compiler generates a relative jump/call the linker cannot 
change it (as far as I know).

> Any one else have any thoughts?

Initram should run at the address it was linked to.

Juergen




More information about the coreboot mailing list