[OpenBIOS] [PATCH 2/2] ppc: Set up TOC base for ppc64

Andreas Färber andreas.faerber at web.de
Tue Nov 23 22:40:33 CET 2010


r2 points to TOC base, __toc_start + 0x8000.
This value is stored as part of the function descriptor.

Include some related ELF sections in the linker script.

Cc: Alexander Graf <agraf at suse.de>
Cc: Segher Boessenkool <segher at kernel.crashing.org>
Signed-off-by: Andreas Färber <andreas.faerber at web.de>
---
 arch/ppc/qemu/start.S    |    7 +++++++
 arch/ppc64/qemu/ldscript |   10 ++++++++++
 2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S
index f5c2f24..4b6df3f 100644
--- a/arch/ppc/qemu/start.S
+++ b/arch/ppc/qemu/start.S
@@ -445,6 +445,13 @@ GLOBL(_entry):
 
 	/* save memory size in stack */
 
+#ifdef __powerpc64__
+	/* set up TOC pointer */
+
+	LOAD_REG_IMMEDIATE(r2, setup_mmu)
+	ld r2, 8(r2)
+#endif
+
 	bl	BRANCH_LABEL(setup_mmu)
 	bl	BRANCH_LABEL(entry)
 1:	nop
diff --git a/arch/ppc64/qemu/ldscript b/arch/ppc64/qemu/ldscript
index 1d8aa8e..7a22903 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 = .;
-- 
1.7.3




More information about the OpenBIOS mailing list