On Sun, 19 Apr 2009, Steven Noonan wrote:
On Sun, Apr 19, 2009 at 3:28 PM, Steven Noonan steven@uplinklabs.net wrote:
On Sun, Apr 19, 2009 at 2:32 PM, Steven Noonan steven@uplinklabs.net wrote:
On Sun, Apr 19, 2009 at 2:02 PM, Steven Noonan steven@uplinklabs.net wrote:
On Sun, Apr 19, 2009 at 1:48 PM, Laurent Vivier Laurent@vivier.eu wrote:
Le dimanche 19 avril 2009 ? 13:33 -0700, Steven Noonan a ?crit :
On Sun, Apr 19, 2009 at 1:24 PM, Laurent Vivier Laurent@vivier.eu wrote: > Le dimanche 19 avril 2009 ? 13:14 -0700, Steven Noonan a ?crit : > The problem is in OpenBios: I put some structures in memory without > knowing this... but this is not part of openfirmware specification.
[..snip..]
diff --git a/arch/ppc/qemu/ldscript b/arch/ppc/qemu/ldscript index 66fcbcd..8fdf654 100644 --- a/arch/ppc/qemu/ldscript +++ b/arch/ppc/qemu/ldscript @@ -3,15 +3,15 @@ OUTPUT_ARCH(powerpc)
/* Initial load address */ -BASE_ADDR = 0xfff00000; +BASE_ADDR = 0x06800000;
-/* As NVRAM is at 0xfff04000, the .text needs to be after that +/* As NVRAM is at 0x06804000, the .text needs to be after that */ -TEXT_ADDR = 0xfff08000; +TEXT_ADDR = 0x06808000;
/* Hard reset vector address */ -HRESET_ADDR = 0xfffffffc; +HRESET_ADDR = 0x06ffffff;
CSTACK_SIZE = 32768; /* client stack size */
With the above numbers, I get linker problems:
target/arch/ppc/qemu/start.o: In function `vector__0x300': (.text.vectors+0x384): relocation truncated to fit: R_PPC_ADDR24 against `.text.vectors'+c target/arch/ppc/qemu/start.o: In function `vector__0x400': (.text.vectors+0x484): relocation truncated to fit: R_PPC_ADDR24 against `.text.vectors'+c
I don't see why it'd do that.
What the hell? Why would this change resolve it?
diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S index 66df9a2..108fd9b 100644 --- a/arch/ppc/qemu/start.S +++ b/arch/ppc/qemu/start.S @@ -206,7 +206,7 @@ VECTOR( 0x300, "DSI" ): addi r3,r3,LO(dsi_exception) mtctr r3 bctrl
ba exception_return
b exception_return
Because exception_return's address (now near 0x06808000) doesn't fit into 26 bit sign extended AA field.
VECTOR( 0x400, "ISI" ): EXCEPTION_PREAMBLE
@@ -214,7 +214,7 @@ VECTOR( 0x400, "ISI" ): addi r3,r3,LO(isi_exception) mtctr r3 bctrl
ba exception_return
b exception_return ILLEGAL_VECTOR( 0x500 ) ILLEGAL_VECTOR( 0x600 )
The only issue with doing things this way is now to figure out what to change this to:
#define FREE_BASE 0x00004000
My first thought was to utilize all 8MB of the space that Apple says we can have, and use any space after the OpenBIOS image. My second thought was: how do we know where the OpenBIOS executable image ends?
Any ideas?