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);
|
find_thread(info, lwpinfo.pl_lwpid);
|
||||||
switch(WSTOPSIG(waitval)) {
|
switch(WSTOPSIG(waitval)) {
|
||||||
case SIGTRAP:
|
case SIGTRAP:
|
||||||
info->pr_why = info->curthread->in_syscall?S_SCX:S_SCE;
|
if (lwpinfo.pl_flags & PL_FLAG_SCE) {
|
||||||
info->curthread->in_syscall = 1 - info->curthread->in_syscall;
|
info->pr_why = S_SCE;
|
||||||
break;
|
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:
|
default:
|
||||||
info->pr_why = S_SIG;
|
info->pr_why = S_SIG;
|
||||||
info->pr_data = WSTOPSIG(waitval);
|
info->pr_data = WSTOPSIG(waitval);
|
||||||
|
Loading…
Reference in New Issue
Block a user