From: Ben Noordhuis Date: Sun, 3 Feb 2013 23:04:57 +0000 (+0100) Subject: Improve perf_event_open argument decoding X-Git-Tag: v4.8~190 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88eafd81ab061ff217c0b56f02b07c16cbd29ff4;p=strace Improve perf_event_open argument decoding * configure.ac (AC_CHECK_HEADERS): Add linux/perf_event.h. * desc.c [HAVE_LINUX_PERF_EVENT_H]: Include . (perf_event_open_flags): New xlat structure. (sys_perf_event_open): New function. * linux/dummy.h (sys_perf_event_open): Remove. * linux/syscall.h (sys_perf_event_open): New prototype. Signed-off-by: Ben Noordhuis Signed-off-by: Dmitry V. Levin --- diff --git a/configure.ac b/configure.ac index f44eaf1a..80be383e 100644 --- a/configure.ac +++ b/configure.ac @@ -196,6 +196,7 @@ AC_CHECK_HEADERS(m4_normalize([ ioctls.h libaio.h linux/capability.h + linux/perf_event.h linux/ptrace.h linux/utsname.h mqueue.h diff --git a/desc.c b/desc.c index f0c18903..e75ed4f3 100644 --- a/desc.c +++ b/desc.c @@ -37,6 +37,9 @@ #ifdef HAVE_LIBAIO_H # include #endif +#ifdef HAVE_LINUX_PERF_EVENT_H +# include +#endif #if HAVE_LONG_LONG_OFF_T /* @@ -222,6 +225,19 @@ static const struct xlat whence[] = { { 0, NULL }, }; +static const struct xlat perf_event_open_flags[] = { +#ifdef PERF_FLAG_FD_NO_GROUP + { PERF_FLAG_FD_NO_GROUP, "PERF_FLAG_FD_NO_GROUP" }, +#endif +#ifdef PERF_FLAG_FD_OUTPUT + { PERF_FLAG_FD_OUTPUT, "PERF_FLAG_FD_OUTPUT" }, +#endif +#ifdef PERF_FLAG_PID_CGROUP + { PERF_FLAG_PID_CGROUP, "PERF_FLAG_PID_CGROUP" }, +#endif + { 0, NULL }, +}; + #ifndef HAVE_LONG_LONG_OFF_T /* fcntl/lockf */ static void @@ -1068,3 +1084,18 @@ sys_eventfd2(struct tcb *tcp) { return do_eventfd(tcp, 1); } + +int +sys_perf_event_open(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%#lx, %d, %d, %d, ", + tcp->u_arg[0], + (int) tcp->u_arg[1], + (int) tcp->u_arg[2], + (int) tcp->u_arg[3]); + printflags(perf_event_open_flags, tcp->u_arg[4], + "PERF_FLAG_???"); + } + return 0; +} diff --git a/linux/dummy.h b/linux/dummy.h index ce340b9d..182896e3 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -39,7 +39,6 @@ #define sys_lookup_dcookie printargs #define sys_name_to_handle_at printargs #define sys_open_by_handle_at printargs -#define sys_perf_event_open printargs #define sys_request_key printargs #define sys_sync_file_range printargs #define sys_sysfs printargs diff --git a/linux/syscall.h b/linux/syscall.h index 7e0155ec..81b4c695 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -163,6 +163,7 @@ int sys_oldselect(); int sys_oldstat(); int sys_open(); int sys_openat(); +int sys_perf_event_open(); int sys_personality(); int sys_pipe(); int sys_pipe2();