(Started this file at 14 Feb 02, 18:18 GMT) I decided it would be clearest for everybody (including me!) if I make a record of patches that I apply. The starting point for all these is valgrind-20020214; patches applied to it before that snapshot was released are not recorded anywhere. ------------------------------ 14 Feb 02 ------------------------------ Michael Matz : this fixes the leak (32bytes/demangled symbol)in cplus-dem.c. It also again localizes the changes to libiberty's cp-demangle.c at the top with some #defines. (It also has some unrelated changes like header guarding and making symbol sets disjoint, these are minor and were needed for the demangle_test program, and are local to the demangler) JRS: applied it, but it still seems to leak, running a g++2.96 compiled program, at least (/usr/bin/kedit as installed with RH72). (reenable VG_(show_all_arena_stats)() at vg_demangle.c:63 to see this) Michael Matz here the patch for changing order of restorage of %esp to not trash simulees stack Simon Hausmann I attached a patch for the latest vg snapshot to implement better support for shmat. Vg now correct marks the region returned by shmat as read or read-writable (we have to do that blindly as there is no way to figure out if another process initialized the data or not) . Also the patch adds a paranoia check for the buffer passed with shmctl. What's left todo is to make shmdt correctly mark the shm segment as invalid again, but I see no easy way to figure out the shm segment size just from the base address. Anyone? :) Otherwise it'll probably require keeping a copy of the allocated mappings inside vg -- shouldn't be expensive though. [...] Oops, my previous shm patch contained a little bug in that it called must_be_readable/writable for shmctl even when the address was 0 (which for example is the case when using IPC_RMID to remove a shared memory segment, which is perfectly valid) . Attached the updated patch that makes valgrinding Qt/Embedded apps possible :) me: Check for accessibility changes for first and last 64k of address space after every system call, so as to catch syscall wrapper bugs as soon as they happen Simon Hausmann The socketpair handler checks that the two fds passed must be readable, but I think the check should use must_be_writable instead as the kernel does not read those values but fills them in. Simon Hausmann Here's a patch that implements checking of arguments for sendmsg/recvmsg, as part of the socket syscall. [...] Oops, I just realized that the recvmsg wrapper should mark the fields of the received message as readable, as the kernel hopefully initialized them :) [...] Corrected patch attached. Nick Nethercote [Implemented pushaw/pushal/popaw/popal] They're kind of ugly due to the special treatment of %esp, but there didn't seem to be any elegant way around it. You may object to my heinous magic number use with the registers. It seems to work ok, but I'd check it carefully if I were you. In particular, I've only tried it with POPAD. (I think; gcc only accepts 'popa' in assembler files, and according to the Intel docs will probably choose between POPA and POPAD by looking at the D flag of the current code segment's descriptor. I'm guessing this is 32-bits for my little test program.) Dirk Mueller below a patch for checking if allocations are done correctly in C++ applications. it checks if new is free'ed by delete, new [] by delete [], and malloc, calloc, realloc by free(). It works for me , not intensively tested yet. Michael Matz [allow specification of length of backtrace, default 8] > > another small patch. it just increases the stacktrace > > length to 8 by default > > (16 with --long-stacktraces=yes). a backtrace of 4 is > > really short for KHTML, which often deeply nests calls. > > Wouldn't it be more usefull, to recognize a --bt-length= > option, instead of only two sizes? I.e. I would find the attached patch more usefull, which introduces an --bt-size= option (with docu ;-) ) but removes that long=yes/no option. JRS: the final name for the option is --num-callers ------------------------------ 15 Feb 02 ------------------------------ me: fix assertion failure in VG_(malloc_aligned) (duh. duh. duh.) Michael Matz [finally fix the last space leak in the demangler] this should now fix the rest of the leaks. The old c++ demangler is really crappy code, therefor it took longer to find the leaks. ;) Simon Hausmann Here are two micro patches for vg :) The first one fixes what I think is a bug: I think the result param of llseek before the actual syscall should be checked for writability instead of readability. The second one is a quick workaround for an assertion in the demangler that I hit quite sometimes (I'm surprised noone else has hit it before, maybe it's gcc3 specific though :) . I'm too lazy to write a full strtol replacement for now ;) , so just returning an error will keep the program running and output the mangled symbol instead. ------------------------------ 17 Feb 02 ------------------------------ me: Implement cleverer semantics for 4-byte integer loads from partially valid addresses, following complains from Coolo re spurious warnings from gcc-inlined strlen()s. As part of this, hardwire the default behaviour of --bad-addr-value and get rid of this flag entirely. New flag --partial-loads-ok=no|yes [default yes] controls use of new semantics. Also as a result, stop recommending people use --sloppy-malloc=yes by default. me: Options are now read from env var VALGRIND_OPTS. Also remove need to edit hardware install dir in shell script. Michael Matz Simon Hausmann this fixes some leaks in the v3 demangler found by Simon (Julian: i.e. those we couldn't possibly run into, as we use v2 demangling). ------------------------------ 18 Feb 02 ------------------------------ me: Tighten up the conditions for which --partial-loads-ok=yes is allowed me: Error management: slow down collecting errors after the 50th and stop altogether after the 500th me: Implement --workaround-gcc296-bugs, so RH 7.X and Mandrake users can use their default compilers. ------------------------------ 20 Feb 02 ------------------------------ me: Massive overhaul of the signal machinery so that signals can be delivered to the client even when it is blocked in a system call. This fixes the kmail-deadlocks-on-valgrind problem. ------------------------------ 21 Feb 02 ------------------------------ me: Implement GDB attachment to the program. Stephan Kulow Implement a few more syscall wrappers ------------------------------ 24 Feb 02 ------------------------------ me: Cleanup of the signal machinery. Now we deal with signals purely at the kernel interface, rather than muddying glibc's and the kernel's conflicting concepts of some of the calls and structures. Kevin Dwyer Implement bazillions of syscall wrappers for ioctls me: minor cleanups in vg_memory.c ------------------------------ 4 Mar 02 ------------------------------- This file is falling significantly behind reality. Me: get rid of this pointless and incorrect assert: vg_memory.c:441 (set_address_range_perms): Assertion `len < 30000000' failed. Me: remove incorrect assert: vg_assert(u_in->flags_w != FlagsEmpty); do to with instrumentation of RCL/RCR tracked down by Kevin Ryde Malcolm Studd Sanjay Ghemawat Implement pread (180) Byrial Jensen Implement getsid (147) Implement TCFLSH Me Implement pause (29) ------------------------------ 6 Mar 02 ------------------------------- Martin Nicolay Implement fstatfs (100) Implement ioctl FIOASYNC Implement ioctl SIOCSPGRP (was previously noted-but-unhandled) Sanjay Ghemawat Implement sync (36) Make mallopt() into a no-op, rather than panic ------------------------------ 7 Mar 02 ------------------------------- Me Write a great deal of technical docs about Valgrind internals See docs/techdocs.html Me Complete renaming of the kernel interface (vg_kerneliface.h) definitions. "Byrial Jensen" Use kernel rather than glibc sizes for struct termios Martin Jones Implement ioctl MIXER_WRITE(0) Jon Trowbridge Implement syscall pwrite (181) Me Revamp the leak detector; fix various segfaults and bus errors in it, and add the --show-reachable=no|yes flag, which makes it more useful. ------------------------------ 8 Mar 02 ------------------------------- Me Split up huge basic blocks into pieces, to avoid this: vg_main.c:495 (vgPlain_create_translation_for): Assertion `trans_size > 0 && trans_size < 65536' failed Crispin Flowerday Implement syscall sendfile (187) Allow accept to have NULL 3rd argument Me Write some more tech docs on the instrumentation and JITter ----------------------------- 10 Mar 02 ------------------------------- Crispin Flowerday SYS_SOCKETPAIR: on success, mark file descriptors as readable Ulrich Drepper Be cleverer on SYS_CONNECT Me Fix strange parse error at vg_symtab2.c:1017 Complete tech docs to do with the instrumenting JITter Write tech docs re future ideas ----------------------------- 11 Mar 02 ------------------------------- Me Fix some compile problems on Debian Potato, and add some supps Julian Brown Handle ioctl 0x40045431 ----------------------------- 12 Mar 02 ------------------------------- Martin Burchell Some ioctls. Crispin Flowerday Improved handling of SIOCGIFCONF. Frank Zago Various ioctls for the SCSI generic (sg) driver. Currently #if 0'd. Me Fix obscure simulated CPU bug causing this: -1: CMOVW t34, t36 (-rOSZACP) valgrind: vg_to_ucode.c:4197 (disInstr): Assertion `sane' failed. (Spotted by Thorsten Schnebeck ) Me Add yet more suppressions to linux24.supp Me [subrev b only] In the leak checker, use __builtin_{setjmp,longjmp} instead of the glibc (pthread) versions. This avoids a subtle memory corruption problem caused by pthread_longjmp (or whatever it is called), which finally manifests itself in this assertion failure: vgPlain_primary_map[i] == & vg_distinguished_secondary_map Many thanks to Michael Matz for coming up with an easy solution which saved me hours of pissing around. ----------------------------- 15 Mar 02 ------------------------------- Stephan Kulow Ioctls TIOCGPTN and TIOCSPTLCK Frank Zago Various ioctls for the SCSI generic (sg) driver; these are now engaged. Harri Porten Fix "tiny omission" in debug outputs in vg_clientmalloc.c. Wolfram Gloger mallopt returns 1 on success, not 0. Implement __posix_memalign. Alasdair G Kergon Syscalls setfsgid (139), setregid(71), setresuid(164), setfsuid(138). (argc,argv,envp) hack: reject candidate alignments giving argc==0. Malte Starostik Various ioctls, including some ISDN ones. Richard Moore Syscalls mlockall (152), munlockall (153), sched_get_priority_max (159), sched_getscheduler (156), NR_sched_setscheduler (157). Ioctl SG_IO. Print ioctl numbers in hex. Me Syscall _sysctl (149). Aaron M. Ucko Use the size/dir info encoded in the top 16 bits of an ioctl number, where appropriate. Dirk Mueller Syscall setfsuid32 (215), and bazillions of ioctls, mostly linux soundcard ones. Me (following request from Dirk Mueller) Rehash of context management system. Now --num-callers= accepts values from 2 to 50. Also --leak-resolution=low|med|high adjusts how the leak detector presents results. RTFM ... ----------------------------- 15 Mar 02 second snapshot (0315b) ------- Me Allow suppression of invalid free and mismatching free errors. Resurrect the internal profiling stuff (VG_PROFILE) and then fail to find anything obvious that I could speed up :-( Start playing with using AMD cache prefetch insns as described in docs/techdocs.html. Wrap ioctl SNDCTL_DSP_GETSPDIF in #ifdef; apparently undefined in RH 7.2. ----------------------------- 17 Mar 02 ------------------------------- Me New flag -q --quiet, so it just prints error messages and nothing else Experimental feature: allow clients to set/check memory range permissions. Read documentation pertaining to the --client-perms flag. ----------------------------- 19 Mar 02 ------------------------------- Harri Porten Syscalls fchown (95), fchown32 (207) Ulrich Drepper Syscall ftruncate64 (194) (?? on irc; can't remember) Syscall chown32 (212) Me Modify implementation of "sahf" insn, so that the instrumenter creates code which checks the definedness of just %AH rather than all of %EAX. Fixes a spurious warning reported by Daniel Veillard . ----------------------------- 20 Mar 02 ------------------------------- Me Allow suppressions with a single top-stack-frame spec, to help folks who have to suppress errors in libraries compiled with -fomit-frame-pointer. Implement x86 "das" insn. Stranger than strange. Adam Gundy ioctls TCSETA, TCGETA. ----------------------------- 24 Mar 02 ------------------------------- Move to putting stuff in ChangeLog. This file finishes here.