summaryrefslogtreecommitdiffstats
path: root/sys/arm/arm/swtch.S
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-17 13:53:38 +0000
committerian <ian@FreeBSD.org>2014-05-17 13:53:38 +0000
commitf51629e24e56540c52920e2b0e3fa2eddb3c8bed (patch)
tree21720b45d81bf613d158521e59271dd9e921cd76 /sys/arm/arm/swtch.S
parent6341a2d92b98c830653de9c38705ec3321702a1e (diff)
downloadFreeBSD-src-f51629e24e56540c52920e2b0e3fa2eddb3c8bed.zip
FreeBSD-src-f51629e24e56540c52920e2b0e3fa2eddb3c8bed.tar.gz
MFC 262952, 262958, 262966, 262979, 262980, 262986, 262987, 262995, 262997,
263030, 263033, 263034, 263056, 263057, Remove all the redundant external declarations of exception vectors and runtime setting of the pointers that's scattered around various places. Remove all traces of support for ARM chips prior to the arm9 series. Make the default exception handler vectors point to where I thought they were already pointing: the default handlers (not a panic that says there is no default handler). Eliminate irq_dispatch.S. Move the data items it contained into arm/intr.c and the functionality it provided into arm/exception.S. Move the exception vector table (so-called "page0" data) into exception.S and eliminate vectors.S. Change the way the asm GET_CURTHREAD_PTR() macro is defined so that code using it doesn't have to have an "AST_LOCALS" macro somewhere in the file. Arrange for arm fork_trampoline() to return to userland via the standard swi_exit code in exception.S instead of having its own inline expansion of the DO_AST and PULLFRAME macros. Now that the PUSHFRAME and PULLFRAME macros are used only in the swi entry/exit code, they don't need to be macros. Except that didn't work and the whole change was reverted. Remove some unnecessary indirection and jump right to the handler functions. Use panic rather than printf to "handle" an arm26 address exception (should never happen on arm32). Remove the unreferenced DATA() macro. Remove #include <machine/asmacros.h> from files that don't need it.
Diffstat (limited to 'sys/arm/arm/swtch.S')
-rw-r--r--sys/arm/arm/swtch.S19
1 files changed, 5 insertions, 14 deletions
diff --git a/sys/arm/arm/swtch.S b/sys/arm/arm/swtch.S
index d704823..610d575 100644
--- a/sys/arm/arm/swtch.S
+++ b/sys/arm/arm/swtch.S
@@ -486,21 +486,12 @@ ENTRY(savectx)
END(savectx)
ENTRY(fork_trampoline)
- STOP_UNWINDING /* Can't unwind beyond the thread enty point */
- mov r1, r5
+ STOP_UNWINDING /* EABI: Don't unwind beyond the thread enty point. */
+ mov fp, #0 /* OABI: Stack traceback via fp stops here. */
mov r2, sp
+ mov r1, r5
mov r0, r4
- mov fp, #0
- bl _C_LABEL(fork_exit)
- /* Kill irq"s */
- mrs r0, cpsr
- orr r0, r0, #(I32_bit|F32_bit)
- msr cpsr_c, r0
- DO_AST
- PULLFRAME
-
- movs pc, lr /* Exit */
-
-AST_LOCALS
+ ldr lr, =swi_exit /* Go finish forking, then return */
+ b _C_LABEL(fork_exit) /* to userland via swi_exit code. */
END(fork_trampoline)
OpenPOWER on IntegriCloud