Several other Valgrind tools have been created. Some of these
can plug directly into an existing Valgrind installation, but
some require downloading a whole Valgrind distribution which
contains a specially modified core. Please note that some of
these are experimental, and may not work 100%.
I've been working on various patches for Valgrind. The
complete set is rolled together as
valgrind-patches.tar.bz2.
Note: they are designed to be applied in the following order.
- 1. new-threading
-
Redo threading model so that we no longer emulate pthreads.
Threads are done at the kernel level with clone etc. Vastly
simplifies things.
dev/null | 5183 ----------------------------
Makefile.am | 2
addrcheck/ac_main.c | 8
cachegrind/x86/cg_arch.c | 39
configure.in | 44
corecheck/tests/pth_rwlock.stderr.exp | 9
corecheck/tests/sigkill.c | 4
corecheck/tests/sigkill.stderr.exp | 12
coregrind/Makefile.am | 21
coregrind/core.h | 455 --
coregrind/core_asm.h | 2
coregrind/linux/Makefile.am | 2
coregrind/linux/core_os.c | 195 +
coregrind/linux/core_os.h | 88
coregrind/linux/sema.c | 105
coregrind/linux/syscalls.c | 24
coregrind/vg_execontext.c | 5
coregrind/vg_intercept.c.base | 36
coregrind/vg_main.c | 134
coregrind/vg_mylibc.c | 45
coregrind/vg_scheduler.c | 3222 ++---------------
coregrind/vg_signals.c | 892 +---
coregrind/vg_symtab2.c | 21
coregrind/vg_syscalls.c | 649 +--
coregrind/vg_to_ucode.c | 4
coregrind/x86-linux/core_platform.h | 76
coregrind/x86-linux/ldt.c | 2
coregrind/x86-linux/platform-private.h | 10
coregrind/x86-linux/syscall.S | 130
coregrind/x86-linux/syscalls.c | 471 +-
coregrind/x86/core_arch.h | 47
coregrind/x86/dispatch.S | 4
coregrind/x86/signal.c | 9
coregrind/x86/state.c | 15
helgrind/hg_main.c | 22
include/linux/vki.h | 11
include/tool.h.base | 21
include/x86-linux/vki_arch.h | 9
memcheck/mac_leakcheck.c | 3
memcheck/mc_main.c | 26
memcheck/tests/scalar_exit_group.stderr.exp | 2
none/tests/Makefile.am | 4
none/tests/pending.c | 84
none/tests/pending.stderr.exp | 2
none/tests/pending.stdout.exp | 7
none/tests/syscall-restart1.c | 2
tests/vg_regtest.in | 2
47 files changed, 2499 insertions(+), 9661 deletions(-)
- 2. no-fomit-framepointer
-
Don't use -fomit-framepointer
anywhere in the
core makefiles. It just makes debugging harder. We can add it
back later if it really makes a performance improvement (but I'm
a bit skeptical).
coregrind/linux/Makefile.am | 2 +-
coregrind/x86-linux/Makefile.am | 2 +-
coregrind/x86/Makefile.am | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
- 3. libpthread-warning
-
Warn if a program appears to be using the now-obsolete
Valgrind libpthread.
coregrind/core.h | 55 +++++++++--------------------------------------
coregrind/vg_scheduler.c | 47 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 44 deletions(-)
- 4. fix-static-exec
-
Fix some tiny bugs which prevented Valgrind from running
static executables.
coregrind/ume.c | 4 ++++
1 files changed, 4 insertions(+)
- 5. signal-state
-
Allow the VCPU state to be examined and manipulated from
within a signal handler. Integer state is pretty easy, but FP
state requires a lot of fiddley conversion between the CPU's
state and the structure passed to the signal handler.
core.h | 0
coregrind/vg_scheduler.c | 18 --
coregrind/vg_signals.c | 211 ++++++++++++++------------
coregrind/x86/core_arch.h | 36 ++++
coregrind/x86/signal.c | 305 ++++++++++++++++++++++++++++++---------
coregrind/x86/state.c | 4
none/tests/Makefile.am | 7
none/tests/sigcontext.c | 92 +++++++++++
none/tests/sigcontext.stderr.exp | 2
none/tests/sigcontext.stdout.exp | 4
none/tests/sigcontext.vgtest | 1
11 files changed, 499 insertions(+), 181 deletions(-)
- 6. fix-prefixes
-
Instruction prefixes can appear in any order.
coregrind/vg_to_ucode.c | 49 ++++++++++++++++++++++++++++--------------------
1 files changed, 29 insertions(+), 20 deletions(-)
- 7. selfrun
-
Misc changes needed so that Valgrind can run itself.
coregrind/core.h | 4 ++
coregrind/linux/core_os.c | 16 +++++++-
coregrind/stage1.c | 4 +-
coregrind/vg_main.c | 14 +------
coregrind/vg_messages.c | 6 ++-
coregrind/vg_procselfmaps.c | 7 ++-
coregrind/vg_scheduler.c | 10 ++++-
coregrind/vg_signals.c | 78 +++++++++++++++++++++++++++++--------------
coregrind/vg_symtab2.c | 14 ++++++-
coregrind/vg_syscalls.c | 26 +++++++++-----
coregrind/vg_transtab.c | 43 ++++++++++++-----------
include/x86-linux/vki_arch.h | 8 ++--
12 files changed, 149 insertions(+), 81 deletions(-)
- 8. signal-queue
-
What started as a simple signal queueing patch turned into an
omnibus signal rework. Lots of details changed, but the big
picture is the same.
tests/blockfault.stdout.exp | 0
coregrind/core.h | 48 ++++--
coregrind/linux/core_os.c | 14 -
coregrind/vg_main.c | 13 +
coregrind/vg_mylibc.c | 6
coregrind/vg_scheduler.c | 123 +++++++--------
coregrind/vg_signals.c | 301 ++++++++++++++++++++++++++++++++-------
coregrind/vg_syscalls.c | 14 +
coregrind/x86-linux/ldt.c | 9 -
coregrind/x86-linux/syscalls.c | 7
coregrind/x86/signal.c | 71 ++++++++-
include/tool.h.base | 6
none/tests/Makefile.am | 4
none/tests/blockfault.c | 31 ++++
none/tests/blockfault.stderr.exp | 6
none/tests/blockfault.vgtest | 1
none/tests/x86/badseg.c | 2
17 files changed, 493 insertions(+), 163 deletions(-)
- 9. as-stabs
-
Generate stabs debugging info for .S files.
Makefile.core-AM_CPPFLAGS.am | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
- 10. update-regtest
-
Little updates to quiet down 'make regtest'. Oh, and a revamp
of the syscall args checking so that Valgrind should be much more
immune to segfaulting itself.
corecheck/tests/as_mmap.stderr.exp | 2
corecheck/tests/fdleak_cmsg.c | 4
corecheck/tests/fdleak_cmsg.stderr.exp | 14
coregrind/core.h | 33 +
coregrind/linux/syscalls.c | 105 ++-
coregrind/vg_memory.c | 59 --
coregrind/vg_scheduler.c | 8
coregrind/vg_signals.c | 40 +
coregrind/vg_symtab2.c | 11
coregrind/vg_syscalls.c | 904 +++++++++++++++++----------------
coregrind/vg_translate.c | 2
coregrind/x86-linux/syscalls.c | 48 +
coregrind/x86/signal.c | 46 -
glibc-2.3.supp | 71 ++
include/tool.h.base | 2
massif/ms_main.c | 1
memcheck/tests/scalar.c | 2
memcheck/tests/scalar.stderr.exp | 13
memcheck/tests/zeropage.stderr.exp | 3
memcheck/tests/zeropage.stdout.exp | 3
none/tests/cmdline1.stdout.exp | 1
none/tests/cmdline2.stdout.exp | 2
none/tests/exec-sigmask.c | 68 ++
none/tests/exec-sigmask.stderr.exp | 1
none/tests/exec-sigmask.stdout.exp | 1
none/tests/pth_blockedsig.c | 3
none/tests/yield.c | 36 -
tests/toobig-allocs.c | 2
28 files changed, 852 insertions(+), 633 deletions(-)
- 11. fix-exit-race
-
Fix up a nasty little race on thread exit. After the thread
sets the status to Empty and releases run_sema, it could get
recycled. Since there's a little bit of code which needs to run
after unlocking, there's a chance that it could get its stack
stolen from under it.
The solution it to use a temporary Zombie state, which
prevents the thread structure from being reallocated. The thread
exit code then sets the state to Empty and exits without touching
the stack in the meantime.
coregrind/core.h | 3 ++-
coregrind/linux/core_os.c | 6 ------
coregrind/vg_main.c | 2 ++
coregrind/vg_scheduler.c | 19 +++++++++++++++----
coregrind/x86-linux/syscalls.c | 24 +++++++++++++++---------
5 files changed, 34 insertions(+), 20 deletions(-)
- 12. sigreturn-syscall
-
Use sigreturn/rt_sigreturn to finish a signal handler rather
than using a client request. This allows clients to use
SA_RESTORER, and it helps gdb understand the signal stack frames
Valgrind generates.
coregrind/core.h | 8
coregrind/vg_scheduler.c | 9
coregrind/vg_signals.c | 26 --
coregrind/x86-linux/syscalls.c | 34 ++-
coregrind/x86/core_arch.h | 5
coregrind/x86/helpers.S | 33 +-
coregrind/x86/signal.c | 456 ++++++++++++++++++++++++-----------------
7 files changed, 333 insertions(+), 238 deletions(-)
- 13. fix-tracking
-
Add a missing thread-creation track.
coregrind/linux/core_os.c | 16 +++++++++-------
1 files changed, 9 insertions(+), 7 deletions(-)
14. segment-sanity
-
Add an expensive sanity check to make sure that the Segment list is
consistent with the contents of /proc/self/maps at all times.es
coregrind/core.h | 6
coregrind/vg_main.c | 44 ++++++
coregrind/vg_memory.c | 278 ++++++++++++++++++++++++++++++++++++++++++--
coregrind/vg_procselfmaps.c | 3
4 files changed, 315 insertions(+), 16 deletions(-)