[LinuxBIOS] [v3][PATCH] stage0 and stage1 cleanup and improvements.
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.
> 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
> 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.
More information about the coreboot