Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109736755
D19352.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D19352.diff
View Options
Index: head/sys/conf/ldscript.powerpc64
===================================================================
--- head/sys/conf/ldscript.powerpc64
+++ head/sys/conf/ldscript.powerpc64
@@ -98,7 +98,8 @@
.opd : ALIGN(8) { KEEP (*(.opd)) }
.branch_lt : ALIGN(8) { *(.branch_lt) }
. = ALIGN(4096);
- .got : ALIGN(8) { __tocbase = .; *(.got .toc) }
+ .got : ALIGN(8) { __tocbase = .; *(.got) }
+ .toc : ALIGN(8) { *(.toc) }
.dynamic : { *(.dynamic) } :text :dynamic
/* Put .ctors and .dtors next to the .got2 section, so that the pointers
Index: head/sys/powerpc/aim/trap_subr64.S
===================================================================
--- head/sys/powerpc/aim/trap_subr64.S
+++ head/sys/powerpc/aim/trap_subr64.S
@@ -317,29 +317,33 @@
* processor is waking up from power saving mode
* It is software reset when 46:47 = 0b00
*/
+ /* 0x00 */
+ ld %r2,TRAP_GENTRAP(0) /* Real-mode &generictrap */
mfsrr1 %r9 /* Load SRR1 into r9 */
andis. %r9,%r9,0x3 /* Logic AND with 46:47 bits */
+
beq 2f /* Branch if software reset */
- bl 1f
- .llong cpu_wakeup_handler
+ /* 0x10 */
+ /* Reset was wakeup */
+ addi %r9,%r2,(cpu_wakeup_handler-generictrap)
+ b 1f /* Was power save, do the wakeup */
- /* It is software reset */
-
+ /* Reset was software reset */
/* Explicitly set MSR[SF] */
2: mfmsr %r9
li %r8,1
+ /* 0x20 */
insrdi %r9,%r8,1,0
mtmsrd %r9
isync
- bl 1f
- .llong cpu_reset_handler /* Make sure to maintain 8-byte alignment */
+ addi %r9,%r2,(cpu_reset_handler-generictrap)
-1: mflr %r9
- ld %r9,0(%r9)
- mtlr %r9
-
- blr
+ /* 0x30 */
+1: mtlr %r9
+ blr /* Branch to either cpu_reset_handler
+ * or cpu_wakeup_handler.
+ */
CNAME(rstcodeend):
cpu_reset_handler:
@@ -459,52 +463,59 @@
addi %r1,%r1,(generichypertrap-generictrap)
mtlr %r1
li %r1, 0xe0 /* How to get the vector from LR */
- blrl /* Branch to generictrap */
+ blrl /* Branch to generichypertrap */
CNAME(hypertrapcodeend):
/*
* For SLB misses: do special things for the kernel
*
- * Note: SPRG1 is always safe to overwrite any time the MMU is on, which is
+ * Note: SPRG1 is always safe to overwrite any time the MMU was on, which is
* the only time this can be called.
*/
.globl CNAME(slbtrap),CNAME(slbtrapend)
.p2align 3
CNAME(slbtrap):
+ /* 0x00 */
mtsprg1 %r1 /* save SP */
GET_CPUINFO(%r1)
- std %r2,(PC_SLBSAVE+16)(%r1)
- mfcr %r2 /* save CR */
- std %r2,(PC_SLBSAVE+104)(%r1)
+ std %r2,(PC_SLBSAVE+16)(%r1) /* save r2 */
+ mfcr %r2
+ /* 0x10 */
+ std %r2,(PC_SLBSAVE+104)(%r1) /* save CR */
mfsrr1 %r2 /* test kernel mode */
mtcr %r2
bf 17,2f /* branch if PSL_PR is false */
+ /* 0x20 */
/* User mode */
- ld %r2,(PC_SLBSAVE+104)(%r1) /* Restore CR */
- mtcr %r2
- ld %r2,(PC_SLBSAVE+16)(%r1) /* Restore R2 */
- mflr %r1 /* Save the old LR in r1 */
- mtsprg2 %r1 /* And then in SPRG2 */
- /* 52 bytes so far */
- bl 1f
- .llong generictrap
-1: mflr %r1
- ld %r1,0(%r1)
+ ld %r2,(PC_SLBSAVE+104)(%r1)
+ mtcr %r2 /* restore CR */
+ ld %r2,(PC_SLBSAVE+16)(%r1) /* restore r2 */
+ mflr %r1
+ /* 0x30 */
+ mtsprg2 %r1 /* save LR in SPRG2 */
+ ld %r1,TRAP_GENTRAP(0) /* real-mode &generictrap */
mtlr %r1
li %r1, 0x80 /* How to get the vector from LR */
+ /* 0x40 */
blrl /* Branch to generictrap */
- /* 84 bytes */
2: mflr %r2 /* Save the old LR in r2 */
- nop
- bl 3f /* Begin dance to jump to kern_slbtrap*/
- .llong kern_slbtrap
-3: mflr %r1
- ld %r1,0(%r1)
+ /* Kernel mode */
+ ld %r1,TRAP_GENTRAP(0) /* Real-mode &generictrap */
+ addi %r1,%r1,(kern_slbtrap-generictrap)
+ /* 0x50 */
mtlr %r1
GET_CPUINFO(%r1)
- blrl /* 124 bytes -- 4 to spare */
+ blrl /* Branch to kern_slbtrap */
+/* must fit in 128 bytes! */
CNAME(slbtrapend):
+/*
+ * On entry:
+ * SPRG1: SP
+ * r1: pcpu
+ * r2: LR
+ * LR: branch address in trap region
+ */
kern_slbtrap:
std %r2,(PC_SLBSAVE+136)(%r1) /* old LR */
std %r3,(PC_SLBSAVE+24)(%r1) /* save R3 */
@@ -512,7 +523,7 @@
/* Check if this needs to be handled as a regular trap (userseg miss) */
mflr %r2
andi. %r2,%r2,0xff80
- cmpwi %r2,0x380
+ cmpwi %r2,EXC_DSE
bne 1f
mfdar %r2
b 2f
@@ -641,14 +652,8 @@
mflr %r28 /* save LR */
mfcr %r29 /* save CR */
- /* Begin dance to branch to s_trap in a bit */
- b 1f
- .p2align 3
-1: nop
- bl 1f
- .llong s_trap
-1: mflr %r31
- ld %r31,0(%r31)
+ ld %r31,TRAP_GENTRAP(0)
+ addi %r31,%r31,(s_trap - generictrap)
mtlr %r31
/* Put our exception vector in SPRG3 */
@@ -658,7 +663,7 @@
/* Test whether we already had PR set */
mfsrr1 %r31
mtcr %r31
- blrl
+ blrl /* Branch to s_trap */
CNAME(aliend):
/*
@@ -681,12 +686,10 @@
mfsrr1 %r31 /* test kernel mode */
mtcr %r31
mflr %r28 /* save LR (SP already saved) */
- bl 1f /* Begin branching to disitrap */
- .llong disitrap
-1: mflr %r1
- ld %r1,0(%r1)
+ ld %r1,TRAP_GENTRAP(0)
+ addi %r1,%r1,(disitrap-generictrap)
mtlr %r1
- blrl /* Branch to generictrap */
+ blrl /* Branch to disitrap */
CNAME(dsiend):
/*
@@ -956,7 +959,7 @@
mtlr %r1
li %r1, 0 /* How to get the vector from LR */
blrl /* Branch to generictrap */
-
+ /* No fallthrough */
1:
GET_CPUINFO(%r1)
std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r1) /* free r27 */
@@ -966,12 +969,9 @@
std %r30,(PC_DBSAVE+CPUSAVE_R30)(%r1) /* free r30 */
std %r31,(PC_DBSAVE+CPUSAVE_R31)(%r1) /* free r31 */
mflr %r28 /* save LR */
- nop /* alignment */
- bl 9f /* Begin branch */
- .llong dbtrap
-9: mflr %r1
- ld %r1,0(%r1)
+ ld %r1,TRAP_GENTRAP(0)
+ addi %r1,%r1,(dbtrap-generictrap)
mtlr %r1
- blrl /* Branch to generictrap */
+ blrl /* Branch to dbtrap */
CNAME(dbend):
#endif /* KDB */
Index: head/sys/powerpc/powerpc/cpu_subr64.S
===================================================================
--- head/sys/powerpc/powerpc/cpu_subr64.S
+++ head/sys/powerpc/powerpc/cpu_subr64.S
@@ -31,7 +31,6 @@
#include <machine/asm.h>
- .globl CNAME(power_save_sequence)
.p2align 3
ENTRY(enter_idle_powerx)
mfsprg0 %r3 /* Get the pcpu pointer */
@@ -65,11 +64,9 @@
std %r1,PCB_SP(%r3) /* Save the stack pointer */
std %r2,PCB_TOC(%r3) /* Save the TOC pointer */
- /* Set where we want to jump */
bl 1f
- .llong power_save_sequence /* Remember about 8 byte alignment */
1: mflr %r3
- ld %r3,0(%r3)
+ addi %r3,%r3,power_save_sequence-1b
mtsrr0 %r3
/* Set MSR */
@@ -82,7 +79,7 @@
rfid
.p2align 2
-CNAME(power_save_sequence):
+power_save_sequence:
bl 1f
.llong 0x0 /* Playground for power-save sequence */
1: mflr %r3
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 9, 10:04 PM (21 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16564556
Default Alt Text
D19352.diff (6 KB)
Attached To
Mode
D19352: Fix PPC64 kernel build with clang8 + lld8
Attached
Detach File
Event Timeline
Log In to Comment