Module Name: src
Committed By: maxv
Date: Sat Feb 17 20:59:14 UTC 2018
Modified Files:
src/sys/arch/amd64/amd64: amd64_trap.S
Log Message:
Use ASM macros for the rest of the entry points. No real functional
change. Now the format of the entry points is:
.macro TRAP_ENTRY_POINT_xx arg1,arg2,arg3
...the asm code...
.endm
TEXT_USER_BEGIN
TRAP_ENTRY_POINT_xx arg1,arg2,arg3
TEXT_USER_END
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/amd64/amd64/amd64_trap.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/amd64/amd64_trap.S
diff -u src/sys/arch/amd64/amd64/amd64_trap.S:1.29 src/sys/arch/amd64/amd64/amd64_trap.S:1.30
--- src/sys/arch/amd64/amd64/amd64_trap.S:1.29 Sat Feb 17 20:47:04 2018
+++ src/sys/arch/amd64/amd64/amd64_trap.S Sat Feb 17 20:59:14 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: amd64_trap.S,v 1.29 2018/02/17 20:47:04 maxv Exp $ */
+/* $NetBSD: amd64_trap.S,v 1.30 2018/02/17 20:59:14 maxv Exp $ */
/*
* Copyright (c) 1998, 2007, 2008, 2017 The NetBSD Foundation, Inc.
@@ -130,58 +130,13 @@ IDTVEC(\name)
IDTVEC_END(\name)
.endm
-.macro TRAP_ENTRY_POINT_DNA name,code
+.macro TRAP_ENTRY_POINT_NMI name,code
IDTVEC(\name)
ZTRAP(\code)
+#if defined(XEN)
INTRENTRY
-#ifdef DIAGNOSTIC
- movl CPUVAR(ILEVEL),%ebx
-#endif
- movq %rsp,%rdi
- call _C_LABEL(fpudna)
- jmp .Lalltraps_checkusr
-IDTVEC_END(\name)
-.endm
-
-.macro TRAP_ENTRY_POINT_FPU name,code,is_ztrap
-IDTVEC(\name)
- .if \is_ztrap
- ZTRAP(\code)
- .else
- TRAP(\code)
- .endif
- INTRENTRY
-#ifdef DIAGNOSTIC
- movl CPUVAR(ILEVEL),%ebx
-#endif
- movq %rsp,%rdi
- call _C_LABEL(fputrap)
- jmp .Lalltraps_checkusr
-IDTVEC_END(\name)
-.endm
-
-.macro TRAP_ENTRY_POINT_SPUR name,code,is_ztrap
-IDTVEC(\name)
- .if \is_ztrap
- ZTRAP(\code)
- .else
- TRAP(\code)
- .endif
- INTRENTRY
-#ifdef DIAGNOSTIC
- movl CPUVAR(ILEVEL),%ebx
-#endif
- jmp .Lalltraps_checkusr
-IDTVEC_END(\name)
-.endm
-
- .text
-
- TEXT_USER_BEGIN
-
-TRAP_ENTRY_POINT trap00,T_DIVIDE,1
-TRAP_ENTRY_POINT trap01,T_TRCTRAP,1
-
+ jmp .Lalltraps_noentry
+#else
/*
* Non Maskable Interrupts are a special case: they can be triggered even
* with interrupts disabled, and once triggered they block further NMIs
@@ -193,13 +148,6 @@ TRAP_ENTRY_POINT trap01,T_TRCTRAP,1
* We need to be careful about %gs too, because it is possible that we were
* running in kernel mode with a userland %gs.
*/
-IDTVEC(trap02)
-#if defined(XEN)
- ZTRAP(T_NMI)
- INTRENTRY
- jmp .Lalltraps_noentry
-#else
- ZTRAP(T_NMI)
subq $TF_REGSIZE,%rsp
INTR_SAVE_GPRS
SVS_ENTER_ALTSTACK
@@ -234,16 +182,16 @@ IDTVEC(trap02)
addq $TF_REGSIZE+16,%rsp
iretq
#endif
-IDTVEC_END(trap02)
+IDTVEC_END(\name)
+.endm
-IDTVEC(trap03)
-#ifndef KDTRACE_HOOKS
- ZTRAP(T_BPTFLT)
+.macro TRAP_ENTRY_POINT_BPT name,code
+IDTVEC(\name)
+ ZTRAP(\code)
INTRENTRY
+#ifndef KDTRACE_HOOKS
jmp .Lalltraps_noentry
#else
- ZTRAP(T_BPTFLT)
- INTRENTRY
STI(si)
/*
* DTrace Function Boundary Trace (fbt) probes are triggered
@@ -265,24 +213,33 @@ IDTVEC(trap03)
movq dtrace_invop_jump_addr, %rax
jmpq *dtrace_invop_jump_addr
#endif
-IDTVEC_END(trap03)
+IDTVEC_END(\name)
+.endm
-TRAP_ENTRY_POINT trap04,T_OFLOW,1
-TRAP_ENTRY_POINT trap05,T_BOUND,1
-TRAP_ENTRY_POINT trap06,T_PRIVINFLT,1
-TRAP_ENTRY_POINT_DNA trap07,T_DNA
+.macro TRAP_ENTRY_POINT_DNA name,code
+IDTVEC(\name)
+ ZTRAP(\code)
+ INTRENTRY
+#ifdef DIAGNOSTIC
+ movl CPUVAR(ILEVEL),%ebx
+#endif
+ movq %rsp,%rdi
+ call _C_LABEL(fpudna)
+ jmp .Lalltraps_checkusr
+IDTVEC_END(\name)
+.endm
-/*
- * Double faults execute on a particular stack, and we must not jump out
- * of it. So don't enable interrupts.
- */
-IDTVEC(trap08)
+.macro TRAP_ENTRY_POINT_DOUBLE name,code
+IDTVEC(\name)
+ TRAP(\code)
#if defined(XEN)
- TRAP(T_DOUBLEFLT)
INTRENTRY
jmp .Lalltraps_noentry
#else
- TRAP(T_DOUBLEFLT)
+/*
+ * Double faults execute on a particular stack, and we must not jump out
+ * of it. So don't enable interrupts.
+ */
subq $TF_REGSIZE,%rsp
INTR_SAVE_GPRS
SVS_ENTER_ALTSTACK
@@ -311,8 +268,54 @@ IDTVEC(trap08)
addq $TF_REGSIZE+16,%rsp
iretq
#endif
-IDTVEC_END(trap08)
+IDTVEC_END(\name)
+.endm
+.macro TRAP_ENTRY_POINT_FPU name,code,is_ztrap
+IDTVEC(\name)
+ .if \is_ztrap
+ ZTRAP(\code)
+ .else
+ TRAP(\code)
+ .endif
+ INTRENTRY
+#ifdef DIAGNOSTIC
+ movl CPUVAR(ILEVEL),%ebx
+#endif
+ movq %rsp,%rdi
+ call _C_LABEL(fputrap)
+ jmp .Lalltraps_checkusr
+IDTVEC_END(\name)
+.endm
+
+.macro TRAP_ENTRY_POINT_SPUR name,code,is_ztrap
+IDTVEC(\name)
+ .if \is_ztrap
+ ZTRAP(\code)
+ .else
+ TRAP(\code)
+ .endif
+ INTRENTRY
+#ifdef DIAGNOSTIC
+ movl CPUVAR(ILEVEL),%ebx
+#endif
+ jmp .Lalltraps_checkusr
+IDTVEC_END(\name)
+.endm
+
+ .text
+
+ TEXT_USER_BEGIN
+
+TRAP_ENTRY_POINT trap00,T_DIVIDE,1
+TRAP_ENTRY_POINT trap01,T_TRCTRAP,1
+TRAP_ENTRY_POINT_NMI trap02,T_NMI
+TRAP_ENTRY_POINT_BPT trap03,T_BPTFLT
+TRAP_ENTRY_POINT trap04,T_OFLOW,1
+TRAP_ENTRY_POINT trap05,T_BOUND,1
+TRAP_ENTRY_POINT trap06,T_PRIVINFLT,1
+TRAP_ENTRY_POINT_DNA trap07,T_DNA
+TRAP_ENTRY_POINT_DOUBLE trap08,T_DOUBLEFLT
TRAP_ENTRY_POINT trap09,T_FPOPFLT,1
TRAP_ENTRY_POINT trap10,T_TSSFLT,0
TRAP_ENTRY_POINT_SWAPGS trap11,T_SEGNPFLT,0