svn commit: r327357 - head/sys/powerpc/aim

Nathan Whitehorn nwhitehorn at FreeBSD.org
Fri Dec 29 20:25:17 UTC 2017


Author: nwhitehorn
Date: Fri Dec 29 20:25:15 2017
New Revision: 327357
URL: https://svnweb.freebsd.org/changeset/base/327357

Log:
  Maintain alignment of in-code 64-bit quantities by design rather than luck.
  If these are not aligned, the linker has to emit a different type of
  relocation that the early boot self-relocation code cannot handle, even
  in principle, resulting in them being set to zero and the kernel crashing.
  
  MFC after:	1 week

Modified:
  head/sys/powerpc/aim/trap_subr64.S

Modified: head/sys/powerpc/aim/trap_subr64.S
==============================================================================
--- head/sys/powerpc/aim/trap_subr64.S	Fri Dec 29 20:00:19 2017	(r327356)
+++ head/sys/powerpc/aim/trap_subr64.S	Fri Dec 29 20:25:15 2017	(r327357)
@@ -297,7 +297,8 @@ dtrace_invop_calltrap_addr:
  * not still hanging around in the trap handling region
  * once the MMU is turned on.
  */
-	.globl	CNAME(rstcode), CNAME(rstcodeend)
+	.globl	CNAME(rstcode), CNAME(rstcodeend), CNAME(cpu_reset_handler)
+	.p2align 3
 CNAME(rstcode):
 	/* Explicitly set MSR[SF] */
 	mfmsr	%r9
@@ -305,8 +306,9 @@ CNAME(rstcode):
 	insrdi	%r9,%r8,1,0
 	mtmsrd	%r9
 	isync
+
 	bl	1f
-	.llong	cpu_reset
+	.llong	cpu_reset_handler /* Make sure to maintain 8-byte alignment */
 1:	mflr	%r9
 	ld	%r9,0(%r9)
 	mtlr	%r9
@@ -314,7 +316,7 @@ CNAME(rstcode):
 	blr
 CNAME(rstcodeend):
 
-cpu_reset:
+cpu_reset_handler:
 	GET_TOCBASE(%r2)
 
 	ld	%r1,TOC_REF(tmpstk)(%r2)	/* get new SP */
@@ -569,6 +571,7 @@ CNAME(aliend):
  * Has to handle standard pagetable spills
  */
 	.globl	CNAME(dsitrap),CNAME(dsiend)
+	.p2align 3
 CNAME(dsitrap):
 	mtsprg1	%r1			/* save SP */
 	GET_CPUINFO(%r1)
@@ -831,6 +834,7 @@ dbleave:
  * In case of KDB we want a separate trap catcher for it
  */
 	.globl	CNAME(dblow),CNAME(dbend)
+	.p2align 3
 CNAME(dblow):
 	mtsprg1	%r1			/* save SP */
 	mtsprg2	%r29			/* save r29 */
@@ -859,6 +863,7 @@ CNAME(dblow):
         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


More information about the svn-src-all mailing list