Improve perf_event_open argument decoding

* configure.ac (AC_CHECK_HEADERS): Add linux/perf_event.h.
* desc.c [HAVE_LINUX_PERF_EVENT_H]: Include <linux/perf_event.h>.
(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 <info@bnoordhuis.nl>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
This commit is contained in:
Ben Noordhuis 2013-02-04 00:04:57 +01:00 committed by Dmitry V. Levin
parent af8dc6b3a5
commit 88eafd81ab
4 changed files with 33 additions and 1 deletions

View File

@ -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

31
desc.c
View File

@ -37,6 +37,9 @@
#ifdef HAVE_LIBAIO_H
# include <libaio.h>
#endif
#ifdef HAVE_LINUX_PERF_EVENT_H
# include <linux/perf_event.h>
#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;
}

View File

@ -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

View File

@ -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();