--- valgrind/coregrind/m_syswrap/priv_syswrap-linux.h 2009-10-27 21:31:49.852433085 +0100 +++ valgrind/coregrind/m_syswrap/priv_syswrap-linux.h 2009-10-27 21:25:05.000000000 +0100 @@ -47,6 +47,7 @@ extern SysRes ML_(do_fork_clone) ( Threa DECL_TEMPLATE(linux, sys_mount); DECL_TEMPLATE(linux, sys_oldumount); DECL_TEMPLATE(linux, sys_umount); +DECL_TEMPLATE(linux, sys_perf_counter_open); // POSIX, but various sub-cases differ between Linux and Darwin. DECL_TEMPLATE(linux, sys_fcntl); --- valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-10-27 21:31:49.852433085 +0100 +++ valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-10-27 21:25:05.000000000 +0100 @@ -1375,7 +1375,12 @@ const SyscallTableEntry ML_(syscall_tabl LINXY(__NR_epoll_create1, sys_epoll_create1), // 291 // (__NR_dup3, sys_ni_syscall) // 292 LINXY(__NR_pipe2, sys_pipe2), // 293 - LINXY(__NR_inotify_init1, sys_inotify_init1), // 294 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 294 + + // (__NR_preadv, sys_ni_syscall) // 295 + // (__NR_pwritev, sys_ni_syscall) // 296 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 297 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 298 }; const UInt ML_(syscall_table_size) = --- valgrind/coregrind/m_syswrap/syswrap-linux.c 2009-10-27 21:31:49.853433112 +0100 +++ valgrind/coregrind/m_syswrap/syswrap-linux.c 2009-10-27 21:25:05.000000000 +0100 @@ -2410,6 +2410,30 @@ PRE(sys_stime) PRE_MEM_READ( "stime(t)", ARG1, sizeof(vki_time_t) ); } +PRE(sys_perf_counter_open) +{ + PRINT("sys_perf_counter_open ( %#lx, %ld, %ld, %ld, %ld )", + ARG1,ARG2,ARG3,ARG4,ARG5); + PRE_REG_READ5(long, "perf_counter_open", + struct vki_perf_counter_attr *, attr, + vki_pid_t, pid, int, cpu, int, group_fd, + unsigned long, flags); + PRE_MEM_READ( "perf_counter_open(attr)", + ARG1, sizeof(struct vki_perf_counter_attr) ); +} + +POST(sys_perf_counter_open) +{ + vg_assert(SUCCESS); + if (!ML_(fd_allowed)(RES, "perf_counter_open", tid, True)) { + VG_(close)(RES); + SET_STATUS_Failure( VKI_EMFILE ); + } else { + if (VG_(clo_track_fds)) + ML_(record_fd_open_nameless)(tid, RES); + } +} + /* --------------------------------------------------------------------- utime wrapper ------------------------------------------------------------------ */ --- valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-10-27 21:31:49.855432715 +0100 +++ valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-10-27 21:25:05.000000000 +0100 @@ -1867,7 +1867,11 @@ const SyscallTableEntry ML_(syscall_tabl LINXY(__NR_epoll_create1, sys_epoll_create1), // 315 // (__NR_dup3, sys_ni_syscall) // 316 LINXY(__NR_pipe2, sys_pipe2), // 317 - LINX_(__NR_inotify_init1, sys_inotify_init1) // 318 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 318 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 319 + // (__NR_preadv, sys_ni_syscall) // 320 + // (__NR_pwritev, sys_ni_syscall) // 321 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 }; const UInt ML_(syscall_table_size) = --- valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-10-27 21:31:49.855432715 +0100 +++ valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-10-27 21:25:05.000000000 +0100 @@ -1191,10 +1191,10 @@ const SyscallTableEntry ML_(syscall_tabl GENX_(__NR_rename, sys_rename), // 38 GENX_(__NR_mkdir, sys_mkdir), // 39 -// _____(__NR_rmdir, sys_rmdir), // 40 + GENX_(__NR_rmdir, sys_rmdir), // 40 GENXY(__NR_dup, sys_dup), // 41 LINXY(__NR_pipe, sys_pipe), // 42 - GENXY(__NR_times, sys_times), // 43 + GENXY(__NR_times, sys_times), // 43 // _____(__NR_prof, sys_prof), // 44 GENX_(__NR_brk, sys_brk), // 45 @@ -1355,7 +1355,7 @@ const SyscallTableEntry ML_(syscall_tabl // _____(__NR_rt_sigpending, sys_rt_sigpending), // 175 LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 176 -// _____(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 177 + LINXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 177 // _____(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 178 GENXY(__NR_pread64, sys_pread64), // 179 @@ -1507,7 +1507,11 @@ const SyscallTableEntry ML_(syscall_tabl LINXY(__NR_epoll_create1, sys_epoll_create1), // 315 // (__NR_dup3, sys_ni_syscall) // 316 LINXY(__NR_pipe2, sys_pipe2), // 317 - LINX_(__NR_inotify_init1, sys_inotify_init1) // 318 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 318 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 319 + // (__NR_preadv, sys_ni_syscall) // 320 + // (__NR_pwritev, sys_ni_syscall) // 321 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 }; const UInt ML_(syscall_table_size) = --- valgrind/coregrind/m_syswrap/syswrap-x86-linux.c 2009-10-27 21:31:49.854432906 +0100 +++ valgrind/coregrind/m_syswrap/syswrap-x86-linux.c 2009-10-27 21:25:05.000000000 +0100 @@ -2254,7 +2254,12 @@ const SyscallTableEntry ML_(syscall_tabl // (__NR_dup3, sys_ni_syscall) // 330 LINXY(__NR_pipe2, sys_pipe2), // 331 - LINX_(__NR_inotify_init1, sys_inotify_init1) // 332 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 332 + // (__NR_preadv, sys_ni_syscall) // 333 + // (__NR_pwritev, sys_ni_syscall) // 334 + + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 335 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 336 }; const UInt ML_(syscall_table_size) = --- valgrind/include/vki/vki-linux.h 2009-08-19 15:37:07.000000000 +0200 +++ valgrind/include/vki/vki-linux.h 2009-10-27 21:50:13.000000000 +0100 @@ -2570,6 +2570,57 @@ struct vki_iwreq union vki_iwreq_data u; }; +/*--------------------------------------------------------------------*/ +// From linux-2.6.31.5/include/linux/perf_counter.h +/*--------------------------------------------------------------------*/ + +struct vki_perf_counter_attr { + + /* + * Major type: hardware/software/tracepoint/etc. + */ + __vki_u32 type; + + /* + * Size of the attr structure, for fwd/bwd compat. + */ + __vki_u32 size; + + /* + * Type specific configuration information. + */ + __vki_u64 config; + + union { + __vki_u64 sample_period; + __vki_u64 sample_freq; + }; + + __vki_u64 sample_type; + __vki_u64 read_format; + + __vki_u64 disabled : 1, /* off by default */ + inherit : 1, /* children inherit it */ + pinned : 1, /* must always be on PMU */ + exclusive : 1, /* only group on PMU */ + exclude_user : 1, /* don't count user */ + exclude_kernel : 1, /* ditto kernel */ + exclude_hv : 1, /* ditto hypervisor */ + exclude_idle : 1, /* don't count when idle */ + mmap : 1, /* include mmap data */ + comm : 1, /* include comm data */ + freq : 1, /* use freq, not period */ + inherit_stat : 1, /* per task counts */ + enable_on_exec : 1, /* next exec enables */ + task : 1, /* trace fork/exit */ + + __reserved_1 : 50; + + __vki_u32 wakeup_events; /* wakeup every n events */ + __vki_u32 __reserved_2; + + __vki_u64 __reserved_3; +}; #endif // __VKI_LINUX_H --- valgrind/include/vki/vki-scnums-amd64-linux.h 2009-08-19 15:37:07.000000000 +0200 +++ valgrind/include/vki/vki-scnums-amd64-linux.h 2009-10-27 21:50:13.000000000 +0100 @@ -376,6 +376,10 @@ #define __NR_dup3 292 #define __NR_pipe2 293 #define __NR_inotify_init1 294 +#define __NR_preadv 295 +#define __NR_pwritev 296 +#define __NR_rt_tgsigqueueinfo 297 +#define __NR_perf_counter_open 298 #endif /* __VKI_SCNUMS_AMD64_LINUX_H */ --- valgrind/include/vki/vki-scnums-ppc32-linux.h 2009-08-19 15:37:07.000000000 +0200 +++ valgrind/include/vki/vki-scnums-ppc32-linux.h 2009-10-27 21:50:13.000000000 +0100 @@ -361,6 +361,10 @@ #define __NR_dup3 316 #define __NR_pipe2 317 #define __NR_inotify_init1 318 +#define __NR_perf_counter_open 319 +#define __NR_preadv 320 +#define __NR_pwritev 321 +#define __NR_rt_tgsigqueueinfo 322 #endif /* __VKI_SCNUMS_PPC32_LINUX_H */ --- valgrind/include/vki/vki-scnums-ppc64-linux.h 2009-08-19 15:37:07.000000000 +0200 +++ valgrind/include/vki/vki-scnums-ppc64-linux.h 2009-10-27 21:50:13.000000000 +0100 @@ -353,6 +353,10 @@ #define __NR_dup3 316 #define __NR_pipe2 317 #define __NR_inotify_init1 318 +#define __NR_perf_counter_open 319 +#define __NR_preadv 320 +#define __NR_pwritev 321 +#define __NR_rt_tgsigqueueinfo 322 #endif /* __VKI_SCNUMS_PPC64_LINUX_H */ diff -upr valgrind/include/vki/vki-scnums-x86-linux.h valgrind/include/vki/vki-scnums-x86-linux.h --- valgrind/include/vki/vki-scnums-x86-linux.h 2009-08-19 15:37:07.000000000 +0200 +++ valgrind/include/vki/vki-scnums-x86-linux.h 2009-10-27 21:50:13.000000000 +0100 @@ -367,6 +367,10 @@ #define __NR_dup3 330 #define __NR_pipe2 331 #define __NR_inotify_init1 332 +#define __NR_preadv 333 +#define __NR_pwritev 334 +#define __NR_rt_tgsigqueueinfo 335 +#define __NR_perf_counter_open 336 #endif /* __VKI_SCNUMS_X86_LINUX_H */