svn commit: r350578 - in head/sys/powerpc: ofw powerpc

Justin Hibbits jhibbits at FreeBSD.org
Mon Aug 5 01:37:19 UTC 2019


Author: jhibbits
Date: Mon Aug  5 01:37:18 2019
New Revision: 350578
URL: https://svnweb.freebsd.org/changeset/base/350578

Log:
  powerpc:  Get 32-bit AIM building with secure-PLT
  
  The last few changes needed before 32-bit AIM builds with secure-PLT with
  base GCC.  Because ofwcall32.S and swtch32.S were branching to the GOT it
  could not use secure PLT.

Modified:
  head/sys/powerpc/ofw/ofwcall32.S
  head/sys/powerpc/powerpc/swtch32.S

Modified: head/sys/powerpc/ofw/ofwcall32.S
==============================================================================
--- head/sys/powerpc/ofw/ofwcall32.S	Mon Aug  5 00:32:57 2019	(r350577)
+++ head/sys/powerpc/ofw/ofwcall32.S	Mon Aug  5 01:37:18 2019	(r350578)
@@ -67,8 +67,11 @@ ASENTRY(ofwcall)
 	mfmsr	%r6
 
 	/* GOT pointer in r7 */
-	bl	_GLOBAL_OFFSET_TABLE_ at local-4
+	bl	1f
+1:
 	mflr	%r7
+	addis	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+	addi	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@l
 
 	/* read client interface handler */
 	lwz	%r4,openfirmware_entry at got(%r7)
@@ -129,8 +132,11 @@ ASENTRY(rtascall)
 	stw	%r0,4(%r1)
 
 	/* GOT pointer in r7 */
-	bl	_GLOBAL_OFFSET_TABLE_ at local-4
+	bl	1f
+1:
 	mflr	%r7
+	addis	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+	addi	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@l
 
 	/* Record the old MSR to real-mode-accessible area */
 	mfmsr	%r0
@@ -152,8 +158,11 @@ ASENTRY(rtascall)
 	bctrl
 
 	/* GOT pointer in r7 */
-	bl	_GLOBAL_OFFSET_TABLE_ at local-4
+	bl	1f
+1:
 	mflr	%r7
+	addis	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+	addi	%r7,%r7,(_GLOBAL_OFFSET_TABLE_-1b)@l
 
 	/* Now set the MSR back */
 	lwz	%r6,rtas_regsave at got(%r7)

Modified: head/sys/powerpc/powerpc/swtch32.S
==============================================================================
--- head/sys/powerpc/powerpc/swtch32.S	Mon Aug  5 00:32:57 2019	(r350577)
+++ head/sys/powerpc/powerpc/swtch32.S	Mon Aug  5 01:37:18 2019	(r350578)
@@ -124,8 +124,11 @@ ENTRY(cpu_switch)
 cpu_switchin:
 #if defined(SMP) && defined(SCHED_ULE)
 	/* Wait for the new thread to become unblocked */
-	bl	_GLOBAL_OFFSET_TABLE_ at local-4
+	bl	1f
+1:
 	mflr	%r6
+	addis	%r6,%r6,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+	addi	%r6,%r6,(_GLOBAL_OFFSET_TABLE_-1b)@l
 	lwz	%r6,blocked_lock at got(%r6)
 blocked_loop:
 	lwz	%r7,TD_LOCK(%r2)


More information about the svn-src-head mailing list