mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 05:58:57 +00:00
MFC r322667,r322706:
Improve i386 #UD low-level kdtrace hook. Approved by: re (marius)
This commit is contained in:
parent
d56bc0ab75
commit
697d4a095f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=322755
@ -185,21 +185,29 @@ calltrap:
|
||||
#ifdef KDTRACE_HOOKS
|
||||
SUPERALIGN_TEXT
|
||||
IDTVEC(ill)
|
||||
/* Check if there is no DTrace hook registered. */
|
||||
cmpl $0,dtrace_invop_jump_addr
|
||||
/*
|
||||
* Check if a DTrace hook is registered. The default (data) segment
|
||||
* cannot be used for this since %ds is not known good until we
|
||||
* verify that the entry was from kernel mode.
|
||||
*/
|
||||
cmpl $0,%ss:dtrace_invop_jump_addr
|
||||
je norm_ill
|
||||
|
||||
/* Check if this is a user fault. */
|
||||
cmpl $GSEL_KPL, 4(%esp) /* Check the code segment. */
|
||||
|
||||
/* If so, just handle it as a normal trap. */
|
||||
/*
|
||||
* Check if this is a user fault. If so, just handle it as a normal
|
||||
* trap.
|
||||
*/
|
||||
cmpl $GSEL_KPL, 4(%esp) /* Check the code segment */
|
||||
jne norm_ill
|
||||
testl $PSL_VM, 8(%esp) /* and vm86 mode. */
|
||||
jnz norm_ill
|
||||
|
||||
/*
|
||||
* This is a kernel instruction fault that might have been caused
|
||||
* by a DTrace provider.
|
||||
*/
|
||||
pushal /* Push all registers onto the stack. */
|
||||
pushal
|
||||
cld
|
||||
|
||||
/*
|
||||
* Set our jump address for the jump back in the event that
|
||||
|
Loading…
Reference in New Issue
Block a user