get_regs: guard against subsequent invocations

At this moment there is only one call to get_regs,
but there is going to be more of them, so a guard is needed.

This change also adds a clear_regs call before get_regs,
which essentially reverts commit v4.9-288-ge9bfff6.

* strace.c (trace): Call clear_regs before get_regs.
* syscall.c (get_regs): Skip if get_regs_error != -1.
This commit is contained in:
Дмитрий Левин 2017-04-11 04:04:37 +00:00
parent 83265998b8
commit 13ffa22088
2 changed files with 4 additions and 2 deletions

View File

@ -2295,10 +2295,9 @@ trace(void)
return true; return true;
} }
clear_regs();
if (WIFSTOPPED(status)) if (WIFSTOPPED(status))
get_regs(pid); get_regs(pid);
else
clear_regs();
event = (unsigned int) status >> 16; event = (unsigned int) status >> 16;

View File

@ -1156,6 +1156,9 @@ get_regs(pid_t pid)
#undef USE_GET_SYSCALL_RESULT_REGS #undef USE_GET_SYSCALL_RESULT_REGS
#ifdef ptrace_getregset_or_getregs #ifdef ptrace_getregset_or_getregs
if (get_regs_error != -1)
return;
# ifdef HAVE_GETREGS_OLD # ifdef HAVE_GETREGS_OLD
/* /*
* Try PTRACE_GETREGSET/PTRACE_GETREGS first, * Try PTRACE_GETREGSET/PTRACE_GETREGS first,