Ugly but functional! --- arch/ppc/qemu/start.S | 24 ++++++++++++++++++++++++ arch/ppc64/qemu/ldscript | 10 ++++++++++ 2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S index eef4293..a3b727d 100644 --- a/arch/ppc/qemu/start.S +++ b/arch/ppc/qemu/start.S @@ -272,12 +272,18 @@ GLOBL(__vectors):
call_dsi_exception: LOAD_REG_IMMEDIATE(r3, dsi_exception) +#ifdef __powerpc64__ + ld r3, 0(r3) +#endif mtctr r3 bctrl b exception_return
call_isi_exception: LOAD_REG_IMMEDIATE(r3, isi_exception) +#ifdef __powerpc64__ + ld r3, 0(r3) +#endif mtctr r3 bctrl b exception_return @@ -289,7 +295,11 @@ exception_return: __divide_error: trap_error: mflr r3 +#ifdef __powerpc64__ + b .unexpected_excep +#else b unexpected_excep +#endif
VECTOR( 0x100, "SRE" ): b _entry @@ -445,8 +455,22 @@ GLOBL(_entry):
/* save memory size in stack */
+#ifdef __powerpc64__ + LOAD_REG_IMMEDIATE(r2, __toc_start) + addi r2, r2, 0x4000 + addi r2, r2, 0x4000 +#endif + +#ifdef __powerpc64__ + bl .setup_mmu +#else bl setup_mmu +#endif +#ifdef __powerpc64__ + bl .entry +#else bl entry +#endif 1: nop b 1b
diff --git a/arch/ppc64/qemu/ldscript b/arch/ppc64/qemu/ldscript index 1d8aa8e..28f0b69 100644 --- a/arch/ppc64/qemu/ldscript +++ b/arch/ppc64/qemu/ldscript @@ -41,8 +41,18 @@ SECTIONS _data = .; *(.data) *(.data.*) + *(.toc1) + *(.branch_lt) _edata = .; } + .opd : { + *(.opd) + } + .got : { + __toc_start = .; + *(.got) + *(.toc) + }
.bss ALIGN(4096): { _bss = .;