Use explicit information from the kernel to detect the traps due to
syscall entry and leave. Based on submision by: Dan Nelson <dnelson allantgroup com> MFC after: 1 month
This commit is contained in:
parent
34f2e649d0
commit
97695ad4cd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=228261
@ -202,9 +202,19 @@ waitevent(struct trussinfo *info)
|
||||
find_thread(info, lwpinfo.pl_lwpid);
|
||||
switch(WSTOPSIG(waitval)) {
|
||||
case SIGTRAP:
|
||||
info->pr_why = info->curthread->in_syscall?S_SCX:S_SCE;
|
||||
info->curthread->in_syscall = 1 - info->curthread->in_syscall;
|
||||
break;
|
||||
if (lwpinfo.pl_flags & PL_FLAG_SCE) {
|
||||
info->pr_why = S_SCE;
|
||||
info->curthread->in_syscall = 1;
|
||||
break;
|
||||
} else if (lwpinfo.pl_flags & PL_FLAG_SCX) {
|
||||
info->pr_why = S_SCX;
|
||||
info->curthread->in_syscall = 0;
|
||||
break;
|
||||
} else {
|
||||
errx(1,
|
||||
"pl_flags %x contains neither PL_FLAG_SCE nor PL_FLAG_SCX",
|
||||
lwpinfo.pl_flags);
|
||||
}
|
||||
default:
|
||||
info->pr_why = S_SIG;
|
||||
info->pr_data = WSTOPSIG(waitval);
|
||||
|
Loading…
Reference in New Issue
Block a user