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