I had to make some changes to valgrind so that it could be used to run the `make check' tests in the GNU coreutils package. Note that to get the test scripts to run the tools via valgrind, I tweak every Makefile.am under the coreutils/tests/ hierarchy in order to run each program via its own wrapper script. Minimal instructions are in coreutils' README-valgrind in CVS.
ChangeLog entries and diffs are below. Obviously, only the changes to vg_syscalls.c are intended to be directly useful to you. The others are mainly for your reference. Is there some other way to suppress the "discard syms in %s due to munmap()" warnings? I confess that I may not have read the documentation carefully enough. BTW, valgrind detected a free-mem-read bug in csplit. Thanks! Jim P.S., I did register with KDE bugzilla and then tried to report via that, but when I hit the `commit' button, it failed. Sigh. I reported _that_ to the indicated address. I'm using Debian unstable, linux-2.4.22, libc-2.3.2, and valgrind-2.0.0 compiled from sources. FYI, when running the test suite, each of the 90 programs in the coreutils is invoked through its own wrapper script that exec's valgrind. Here's the wrapper for `cat' as an example: $ cat src/vg/cat #!/bin/sh export PATH=/work/fetish/cu/src:... exec /p/bin/valgrind --suppressions=/tmp/cu-vg --gen-suppressions=yes --quiet --num-callers=9 cat "$@" ========================================================= 2003-11-17 Jim Meyering <[EMAIL PROTECTED]> * coregrind/vg_syscalls.c (perform_assumed_nonblocking_syscall) [case __NR_clock_gettime]: Check for `res == 0', not `res > 0'. [case __NR_statfs64] (syscall 268): Handle new syscall. [case __NR_utimes] (syscall 271): Likewise. * coregrind/vg_main.c (process_cmd_line_options): Raise the upper bound on the number of command line arguments to 1500. Coreutils runs a test case that uses over 1300. This might deserve an option. * coregrind/vg_symtab2.c: #if-0'out the code that produces diagnostics like these. Using --quiet doesn't suppress them, and the extra output (albeit on stderr) induces many unwarranted failures in the coreutils test suite. ==10629== discard syms in /lib/libnss_compat-2.3.2.so due to munmap() ==10629== discard syms in /lib/libnss_nis-2.3.2.so due to munmap() ==10629== discard syms in /lib/libnsl-2.3.2.so due to munmap() ==10629== discard syms in /lib/libnss_files-2.3.2.so due to munmap() [case __NR_utimes] (syscall 271): Likewise. * coregrind/vg_unsafe.h: Include kernel definition of `struct list_head', to avoid this sort of compile error: In file included from /usr/include/linux/timer.h:5, from /usr/include/linux/isdn/fsm.h:15, from /usr/include/linux/isdn.h:17, from vg_unsafe.h:53, from vg_signals.c:34: /usr/include/linux/list.h:576:2: warning: #warning "don't include kernel headers in userspace" In file included from /usr/include/linux/isdn/fsm.h:15, from /usr/include/linux/isdn.h:17, from vg_unsafe.h:53, from vg_signals.c:34: /usr/include/linux/timer.h:11: error: field `entry' has incomplete type make[3]: *** [vg_signals.o] Error 1 diff -F '^[_a-zA-Z$]' -ur -x config.status -x config.log -x configure -x Makefile -x '*.Po' valgrind-2.0.0/coregrind/vg_syscalls.c valgrind-2.0.0-my/coregrind/vg_syscalls.c --- valgrind-2.0.0/coregrind/vg_syscalls.c 2003-11-03 20:15:04.000000000 +0100 +++ valgrind-2.0.0-my/coregrind/vg_syscalls.c 2003-11-17 13:52:56.000000000 +0100 @@ -492,7 +492,7 @@ void VG_(perform_assumed_nonblocking_sys SYSCALL_TRACK( pre_mem_write, tid, "clock_gettime(tp)", arg2, sizeof(struct timespec) ); KERNEL_DO_SYSCALL(tid,res); - if (!VG_(is_kerror)(res) && res > 0) + if (!VG_(is_kerror)(res) && res == 0) VG_TRACK( post_mem_write, arg2, sizeof(struct timespec) ); break; # endif @@ -2961,6 +2961,29 @@ void VG_(perform_assumed_nonblocking_sys KERNEL_DO_SYSCALL(tid,res); break; +# if defined(__NR_statfs64) + case __NR_statfs64: /* syscall 268 */ + /* int statfs64(const char *path, struct statfs64 *buf); */ + MAYBE_PRINTF("statfs64 ( %s, %p )\n", arg1,arg2); + SYSCALL_TRACK( pre_mem_read_asciiz, tid, "statfs64(path)", arg1 ); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + VG_TRACK( post_mem_write,arg2, sizeof(struct statfs) ); + break; +# endif + +# if defined(__NR_utimes) + case __NR_utimes: /* syscall 271 */ + /* int utimes(const char *filename, struct timeval *tvp); */ + MAYBE_PRINTF("utimes ( %p, %p )\n", arg1,arg2); + SYSCALL_TRACK( pre_mem_read_asciiz, tid, "utimes(filename)", arg1 ); + if (arg2 != (UInt)NULL) + SYSCALL_TRACK( pre_mem_read, tid, "utimes(tvp)", arg2, + sizeof(struct timeval) ); + KERNEL_DO_SYSCALL(tid,res); + break; +# endif + # if defined(__NR_setuid32) case __NR_setuid32: /* syscall 213 */ # endif diff -F '^[_a-zA-Z$]' -ur -x config.status -x config.log -x configure -x Makefile -x '*.Po' valgrind-2.0.0/coregrind/vg_main.c valgrind-2.0.0-my/coregrind/vg_main.c --- valgrind-2.0.0/coregrind/vg_main.c 2003-10-05 02:02:43.000000000 +0200 +++ valgrind-2.0.0-my/coregrind/vg_main.c 2003-11-17 13:44:05.000000000 +0100 @@ -874,7 +874,7 @@ static void process_cmd_line_options ( v if (*sp == VG_(client_argc)) break; VG_(client_argc)++; - if (++ctr >= 1000) + if (++ctr >= 1500) args_grok_error( "suspiciously many (1000) argv[] entries; giving up"); } diff -F '^[_a-zA-Z$]' -ur -x config.status -x config.log -x configure -x Makefile -x '*.Po' valgrind-2.0.0/coregrind/vg_symtab2.c valgrind-2.0.0-my/coregrind/vg_symtab2.c --- valgrind-2.0.0/coregrind/vg_symtab2.c 2003-10-29 23:52:46.000000000 +0100 +++ valgrind-2.0.0-my/coregrind/vg_symtab2.c 2003-11-17 13:44:07.000000000 +0100 @@ -2299,9 +2299,11 @@ void VG_(unload_symbols) ( Addr start, U if (curr == NULL) return; +#if 0 VG_(message)(Vg_UserMsg, "discard syms in %s due to munmap()", curr->filename ? curr->filename : (UChar*)"???"); +#endif vg_assert(prev == NULL || prev->next == curr); diff -F '^[_a-zA-Z$]' -ur -x config.status -x config.log -x configure -x Makefile -x '*.Po' valgrind-2.0.0/coregrind/vg_unsafe.h valgrind-2.0.0-my/coregrind/vg_unsafe.h --- valgrind-2.0.0/coregrind/vg_unsafe.h 2003-11-05 00:18:40.000000000 +0100 +++ valgrind-2.0.0-my/coregrind/vg_unsafe.h 2003-11-17 13:44:12.000000000 +0100 @@ -50,6 +50,9 @@ #include <linux/msg.h> /* for struct msgbuf */ #include <linux/sem.h> /* for struct sembuf */ +struct list_head { + struct list_head *next, *prev; +}; #include <linux/isdn.h> /* for ISDN ioctls */ #include <scsi/sg.h> /* for the SG_* ioctls */ #include <sched.h> /* for struct sched_param */ _______________________________________________ Bug-coreutils mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-coreutils