From: Masatake YAMATO Date: Wed, 16 Apr 2014 06:33:11 +0000 (+0900) Subject: unwind: introduce markers specifying the needs of special care in unwinding X-Git-Tag: v4.9~49 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d78d22058da04eac7bf726c059d5c3fb193da08;p=strace unwind: introduce markers specifying the needs of special care in unwinding Some system calls require capturing the stack trace before they are processed in kernel. Typical one is execve. Some system calls require invalidating mmap cache after they are processed in kernel. In current implementation these requirements are handled directly by appropriate syscall handlers. However, it is difficult to keep the source code maintainable using this approach to cover all system calls which have such requirements. A more generic way to implement this is to flag all syscalls that require special processing, and handle these flags right in trace_syscall_entering instead of changing syscall handlers. This patch just defines new flags: STACKTRACE_INVALIDATE_CACHE and STACKTRACE_CAPTURE_ON_ENTER. The names of macros are suggested by Dmitry Levin. Signed-off-by: Masatake YAMATO --- diff --git a/defs.h b/defs.h index 464a968a..c862de5a 100644 --- a/defs.h +++ b/defs.h @@ -546,6 +546,8 @@ extern const struct xlat whence_codes[]; #define TRACE_DESC 040 /* Trace file descriptor-related syscalls. */ #define TRACE_MEMORY 0100 /* Trace memory mapping-related syscalls. */ #define SYSCALL_NEVER_FAILS 0200 /* Syscall is always successful. */ +#define STACKTRACE_INVALIDATE_CACHE 0400 /* Trigger proc/maps cache updating */ +#define STACKTRACE_CAPTURE_ON_ENTER 01000 /* Capture stacktrace on "entering" stage */ typedef enum { CFLAG_NONE = 0, diff --git a/syscall.c b/syscall.c index 4ed971f0..f8165510 100644 --- a/syscall.c +++ b/syscall.c @@ -98,6 +98,8 @@ #define TM TRACE_MEMORY #define NF SYSCALL_NEVER_FAILS #define MA MAX_ARGS +#define SI STACKTRACE_INVALIDATE_CACHE +#define SE STACKTRACE_CAPTURE_ON_ENTER const struct_sysent sysent0[] = { #include "syscallent.h" @@ -125,6 +127,8 @@ static const struct_sysent sysent2[] = { #undef TM #undef NF #undef MA +#undef SI +#undef SE /* * `ioctlent.h' may be generated from `ioctlent.raw' by the auxiliary