svn commit: r270699 - projects/arm64/sys/arm64/arm64

Andrew Turner andrew at FreeBSD.org
Wed Aug 27 09:26:22 UTC 2014


Author: andrew
Date: Wed Aug 27 09:26:21 2014
New Revision: 270699
URL: http://svnweb.freebsd.org/changeset/base/270699

Log:
  Save the sp_el0 register when coming from el0, it holds the userland
  stack pointer where sp is for the current execution level.

Modified:
  projects/arm64/sys/arm64/arm64/exception.S

Modified: projects/arm64/sys/arm64/arm64/exception.S
==============================================================================
--- projects/arm64/sys/arm64/arm64/exception.S	Wed Aug 27 09:19:22 2014	(r270698)
+++ projects/arm64/sys/arm64/arm64/exception.S	Wed Aug 27 09:26:21 2014	(r270699)
@@ -50,7 +50,7 @@ sintrcnt:
 	mov	x1, 0x1c090000; \
 	str	x0, [x1];
 
-.macro	save_registers
+.macro	save_registers el
 	stp	x28, x29, [sp, #-16]!
 	stp	x26, x27, [sp, #-16]!
 	stp	x24, x25, [sp, #-16]!
@@ -68,15 +68,23 @@ sintrcnt:
 	stp	x0, x1, [sp, #-16]!
 	mrs	x10, elr_el1
 	mrs	x11, spsr_el1
+.if \el == 0
+	mrs	x12, sp_el0
+.else
 	mov	x12, sp
+.endif
 	stp	x10, x11, [sp, #-16]!
 	stp	x12, lr, [sp, #-16]!
 .endm
 
-.macro	restore_registers
+.macro	restore_registers el
 	ldp	x12, lr, [sp], #16
 	ldp	x10, x11, [sp], #16
+.if \el == 0
+	msr	sp_el0, x12
+.else
 	mov	sp, x12
+.endif
 	msr	spsr_el1, x11
 	msr	elr_el1, x10
 	ldp	x0, x1, [sp], #16
@@ -97,38 +105,38 @@ sintrcnt:
 .endm
 
 handle_el1h_sync:
-	save_registers
+	save_registers 1
 	mov	x0, sp
 	bl	do_el1h_sync
-	restore_registers
+	restore_registers 1
 	eret
 
 handle_el1h_irq:
-	save_registers
+	save_registers 1
 	mov	x0, sp
 	bl	cpu_intr
-	restore_registers
+	restore_registers 1
 	eret
 
 handle_el1h_error:
 	brk	0xf13
 
 handle_el0_sync:
-	save_registers
+	save_registers 0
 	mov	x0, sp
 	bl	do_el0_sync
-	restore_registers
+	restore_registers 0
 	eret
 
 handle_el0_irq:
-	save_registers
+	save_registers 0
 	mov	x0, sp
 	bl	cpu_intr
-	restore_registers
+	restore_registers 0
 	eret
 
 handle_el0_error:
-	save_registers
+	save_registers 0
 	mov	x0, sp
 	bl	do_el0_error
 	brk	0xf23


More information about the svn-src-projects mailing list