Clear DF bit in eflags/rflags on the kernel entry. The i386 and amd64
ABI specifies the DF should be zero, and newer compilers do not clear DF before using DF-sensitive instructions. The DF clearing for signal handlers was done some time ago. MFC after: 1 week
This commit is contained in:
parent
1cd81ae693
commit
8dcd1daee8
@ -191,6 +191,7 @@ alltraps_pushregs_no_rdi:
|
||||
movq %r14,TF_R14(%rsp)
|
||||
movq %r15,TF_R15(%rsp)
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
cld
|
||||
FAKE_MCOUNT(TF_RIP(%rsp))
|
||||
#ifdef KDTRACE_HOOKS
|
||||
/*
|
||||
@ -270,6 +271,7 @@ IDTVEC(dblfault)
|
||||
movw %es,TF_ES(%rsp)
|
||||
movw %ds,TF_DS(%rsp)
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
cld
|
||||
testb $SEL_RPL_MASK,TF_CS(%rsp) /* Did we come from kernel? */
|
||||
jz 1f /* already running with kernel GS.base */
|
||||
swapgs
|
||||
@ -369,6 +371,7 @@ IDTVEC(fast_syscall)
|
||||
movq %r14,TF_R14(%rsp) /* C preserved */
|
||||
movq %r15,TF_R15(%rsp) /* C preserved */
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
cld
|
||||
FAKE_MCOUNT(TF_RIP(%rsp))
|
||||
movq %rsp,%rdi
|
||||
call syscall
|
||||
@ -434,6 +437,7 @@ IDTVEC(nmi)
|
||||
movw %es,TF_ES(%rsp)
|
||||
movw %ds,TF_DS(%rsp)
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
cld
|
||||
xorl %ebx,%ebx
|
||||
testb $SEL_RPL_MASK,TF_CS(%rsp)
|
||||
jnz nmi_fromuserspace
|
||||
|
@ -67,6 +67,7 @@ IDTVEC(int0x80_syscall)
|
||||
movq %r14,TF_R14(%rsp)
|
||||
movq %r15,TF_R15(%rsp)
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
cld
|
||||
FAKE_MCOUNT(TF_RIP(%rsp))
|
||||
movq %rsp, %rdi
|
||||
call ia32_syscall
|
||||
|
@ -166,7 +166,8 @@
|
||||
movw %gs,TF_GS(%rsp) ; \
|
||||
movw %es,TF_ES(%rsp) ; \
|
||||
movw %ds,TF_DS(%rsp) ; \
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp)
|
||||
movl $TF_HASSEGS,TF_FLAGS(%rsp) ; \
|
||||
cld
|
||||
|
||||
#define POP_FRAME \
|
||||
movq TF_RDI(%rsp),%rdi ; \
|
||||
|
@ -56,6 +56,7 @@
|
||||
IDTVEC(vec_name) ; \
|
||||
PUSH_FRAME ; \
|
||||
SET_KERNEL_SREGS ; \
|
||||
cld ; \
|
||||
FAKE_MCOUNT(TF_EIP(%esp)) ; \
|
||||
movl lapic, %edx ; /* pointer to local APIC */ \
|
||||
movl LA_ISR + 16 * (index)(%edx), %eax ; /* load ISR */ \
|
||||
@ -103,6 +104,7 @@ IDTVEC(spuriousint)
|
||||
IDTVEC(timerint)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
pushl %esp
|
||||
call lapic_handle_timer
|
||||
@ -118,6 +120,7 @@ IDTVEC(timerint)
|
||||
IDTVEC(cmcint)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
call lapic_handle_cmc
|
||||
MEXITCOUNT
|
||||
@ -131,6 +134,7 @@ IDTVEC(cmcint)
|
||||
IDTVEC(errorint)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
call lapic_handle_error
|
||||
MEXITCOUNT
|
||||
@ -302,6 +306,7 @@ IDTVEC(invlcache)
|
||||
IDTVEC(ipi_intr_bitmap_handler)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
|
||||
movl lapic, %edx
|
||||
movl $0, LA_EOI(%edx) /* End Of Interrupt to APIC */
|
||||
@ -320,6 +325,7 @@ IDTVEC(ipi_intr_bitmap_handler)
|
||||
IDTVEC(cpustop)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
|
||||
movl lapic, %eax
|
||||
movl $0, LA_EOI(%eax) /* End Of Interrupt to APIC */
|
||||
@ -339,6 +345,7 @@ IDTVEC(cpustop)
|
||||
IDTVEC(rendezvous)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
|
||||
#ifdef COUNT_IPIS
|
||||
movl PCPU(CPUID), %eax
|
||||
@ -360,6 +367,7 @@ IDTVEC(rendezvous)
|
||||
IDTVEC(lazypmap)
|
||||
PUSH_FRAME
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
|
||||
call pmap_lazyfix_action
|
||||
|
||||
|
@ -49,6 +49,7 @@
|
||||
IDTVEC(vec_name) ; \
|
||||
PUSH_FRAME ; \
|
||||
SET_KERNEL_SREGS ; \
|
||||
cld ; \
|
||||
; \
|
||||
FAKE_MCOUNT(TF_EIP(%esp)) ; \
|
||||
pushl %esp ; \
|
||||
|
@ -159,6 +159,7 @@ alltraps:
|
||||
pushl %fs
|
||||
alltraps_with_regs_pushed:
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
calltrap:
|
||||
pushl %esp
|
||||
@ -233,6 +234,7 @@ IDTVEC(lcall_syscall)
|
||||
pushl %es
|
||||
pushl %fs
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
pushl %esp
|
||||
call syscall
|
||||
@ -256,6 +258,7 @@ IDTVEC(int0x80_syscall)
|
||||
pushl %es
|
||||
pushl %fs
|
||||
SET_KERNEL_SREGS
|
||||
cld
|
||||
FAKE_MCOUNT(TF_EIP(%esp))
|
||||
pushl %esp
|
||||
call syscall
|
||||
|
Loading…
x
Reference in New Issue
Block a user