summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2015-01-18 20:00:33 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2015-01-18 20:00:33 +0000
commit27bc0854ecd49b77662051a3c62acdf33671517f (patch)
treed261cf4598920ee6524c4671cdd9e8d78e3868a1 /sys/powerpc/aim
parent3511827a804deda5b4a1e167acbf8c3086c173c7 (diff)
downloadFreeBSD-src-27bc0854ecd49b77662051a3c62acdf33671517f.zip
FreeBSD-src-27bc0854ecd49b77662051a3c62acdf33671517f.tar.gz
Use TOC to look up all kernel globals on powerpc64 instead of doing the
non-relocatable lis @ha, ori @l dance and hoping they are below 4 GB. MFC after: 2 months
Diffstat (limited to 'sys/powerpc/aim')
-rw-r--r--sys/powerpc/aim/locore64.S6
-rw-r--r--sys/powerpc/aim/trap_subr64.S13
2 files changed, 12 insertions, 7 deletions
diff --git a/sys/powerpc/aim/locore64.S b/sys/powerpc/aim/locore64.S
index 4865e75..30ee3a9 100644
--- a/sys/powerpc/aim/locore64.S
+++ b/sys/powerpc/aim/locore64.S
@@ -91,6 +91,8 @@ GLOBAL(__endkernel)
GLOBAL(tmpstk)
.space TMPSTKSZ
+TOC_ENTRY(tmpstk)
+
.text
.globl btext
btext:
@@ -124,8 +126,8 @@ ASENTRY_NOPROF(__start)
ld %r2,0(%r2)
/* Set up the stack pointer */
- lis %r1,(tmpstk+TMPSTKSZ-48)@ha
- addi %r1,%r1,(tmpstk+TMPSTKSZ-48)@l
+ ld %r1,TOC_REF(tmpstk)(%r2)
+ addi %r1,%r1,TMPSTKSZ-48
/* Switch to 64-bit mode */
mfmsr %r9
diff --git a/sys/powerpc/aim/trap_subr64.S b/sys/powerpc/aim/trap_subr64.S
index ec3c925..63ca50a 100644
--- a/sys/powerpc/aim/trap_subr64.S
+++ b/sys/powerpc/aim/trap_subr64.S
@@ -307,10 +307,11 @@ CNAME(rstcode):
CNAME(rstsize) = . - CNAME(rstcode)
cpu_reset:
- lis %r1,(tmpstk+TMPSTKSZ-48)@ha /* get new SP */
- addi %r1,%r1,(tmpstk+TMPSTKSZ-48)@l
-
GET_TOCBASE(%r2)
+
+ ld %r1,TOC_REF(tmpstk)(%r2) /* get new SP */
+ addi %r1,%r1,(TMPSTKSZ-48)
+
bl CNAME(cpudep_ap_early_bootstrap) /* Set PCPU */
nop
lis %r3,1@l
@@ -751,8 +752,10 @@ dbtrap:
andi. %r1,%r1,0xff00
mtsprg3 %r1
- lis %r1,(tmpstk+TMPSTKSZ-48)@ha /* get new SP */
- addi %r1,%r1,(tmpstk+TMPSTKSZ-48)@l
+ li %r1,TRAP_TOCBASE /* get new SP */
+ ld %r1,0(%r1)
+ ld %r1,TOC_REF(tmpstk)(%r1)
+ addi %r1,%r1,(TMPSTKSZ-48)
FRAME_SETUP(PC_DBSAVE)
/* Call C trap code: */
OpenPOWER on IntegriCloud