use a custom-allocator and detect almost as many errors as you could detect if
you used malloc/new/new[]. (eg. leaks detected, free errors, free mismatch,
etc).
Had to fiddle with mac_malloc_wrappers.c a bit to factor out the appropriate
code to be called from the client request handling code. Also had to add a
new element `MAC_AllocCustom' to the MAC_AllocKind type.
Also added a little documentation, and a regression test.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1643
Removed the SK_(written_shadow_regs_values)() function. Instead, skins that
use shadow regs can track the `post_regs_write_init' event, and set the shadow
regs from within it. This is much more flexible, since it allows each shadow
register to be set to a separate value if necessary. It also matches the new
shadow-reg-change events described below.
In the core, there were some places where the shadow regs were changed, and
skins had no way of knowing about it, which was a problem for some skins.
So I added a bunch of new events to notify skins about these:
post_reg_write_syscall_return
post_reg_write_deliver_signal
post_reg_write_pthread_return
post_reg_write_clientreq_return
post_reg_write_clientcall_return
Any skin that uses shadow regs should almost certainly track these events. The
post_reg_write_clientcall_return allows a skin to tailor the shadow reg of the
return value of a CLIENTCALL'd function appropriately; this is especially
useful when replacing malloc() et al.
Defined some macros that should be used *whenever the core changes the value of
a shadow register* :
SET_SYSCALL_RETVAL
SET_SIGNAL_EDX (maybe should be SET_SIGNAL_RETVAL? ... not sure)
SET_SIGNAL_ESP
SET_CLREQ_RETVAL
SET_CLCALL_RETVAL
SET_PTHREQ_ESP
SET_PTHREQ_RETVAL
These replace all the old SET_EAX and SET_EDX macros, and are added in a few
places where the shadow-reg update was missing.
Added shadow registers to the machine state saved/restored when signal handlers
are pushed/popped (they were missing).
Added skin-callable functions VG_(set_return_from_syscall_shadow)() and
VG_(get_exit_status_shadow)() which are useful and abstract away from which
registers the results are in.
Also, poll() changes %ebx (it's first argument) sometimes, I don't know why.
So we notify skins about that too (with the `post_reg_write_syscall_return'
event, which isn't ideal I guess...)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1642
(prerelease) (SuSE Linux)") seems to complain about signed-vs-unsigned
comparisons, when -Wall is on. This commit fixes (most of) those
complaints.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1638
lines (it was 3 due to a bug).
Also removed VG_(get_suppressions)() which wasn't being used, and changed
VG_(exitcode) to an Int, as it should be.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1628
- Change various incorrect direct references to errno into
*(__errno_location()).
- In __errno_location and __h_errno_location, treat the tid==1 case
(root thread) specially, as with __res_state().
This seems to fix a bug in threaded handling of errno on R H 9 and SuSE8.2,
and almost makes OpenOffice work again on R H 9.
MERGE TO STABLE, if it doesn't break anything.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1625
Hi,
recently I found that there is sometimes cost attributed to some
strange lines (with cachegrind/calltree) with GCC 3.x (using the
DWARF2 debug info format).
I had time to look at this. There is a bug in the DWARF2 debug line
info loader when instructions following each other have source lines
far from each other (e.g. with inlined functions).
MERGE TO STABLE
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1619
requiring "make install". This is good for two reasons:
1. shorter compile times ("make" instead of "make install")
2. don't need to install before running the regression tests
Changes:
- root Makefile now builds a libpthread.so.0 symlink to libpthread.so, which
was needed.
- startup script accepts a --in-place=<dir> option for running a non-installed
version, where <dir> is the root of the src tree
- VG_(mash_LD_PRELOAD_and_LD_LIBRARY_PATH) had to be fiddled with a bit
- tests/vg_regtest now uses the --in-place option to test the non-installed
version
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1614
because there was no point exposing them to clients, as they don't know the
ThreadState type.
Also, removed the LOGMESSAGE request type, replaced it with calls to
VG_(message) via the generic VALGRIND_NON_SIMD_CALL2.
In fact, almost every single pthread client request could be removed in this
same way. That would result in less code, which would be nice... yeah, real
nice.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1584
recordable, etc. Thanks to Tom Hughes <thh@cyberscience.com> for the patch.
Also fixed a minor bug in the reporting -- the src/dst pointers given for
strncat(), strcpy(), strcat().
And I updated the relevent regression test.
And I even added relevant documentation.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1582
- getcwd() now uses the result for the post_mem_write length rather than
the argument, which would have over-estimated
- accept(), recvfrom() and getsockopt() can now all take NULL buffers (which
are quite legitimate) without Memcheck giving spurious errors
MERGE TO STABLE
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1579
#defined constants. I hope I got all the right places. I also hope that they
can be different sizes; experiments seem to indicate so. Also if I reduce the
size of the main stack at all below its current 10000 I get problems, but that
was happening before anyway, I think.
Julian, you may want to sanity check this.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1577
the output file wouldn't get written. No longer creating the file at startup
and then writing it at the end; just writing it at the end. Also recording
the start directory at the start so that the output ends up in it even if the
program does change directory.
Had to add VG_(getcwd)() to vg_mylibc.c for this.
Added a regression test for it too.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1576
("if (0)"'d it out).
2. Fixed the SSE state alignment in the baseBlock -- it worked for Memcheck,
Nulgrind and Corecheck, but not for Addrcheck, Cachegrind, Lackey, Helgrind,
due to variable numbers of shadow registers and registered compact helpers
coming before the SSE/FPU state.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1575
to include the SSE/SSE2 architectural state. Automagically detect
at startup, in vg_startup.S, whether or not this is a SSE-enabled
CPU and act accordingly. All subsequent FPU/SSE state transfers
between the simulated and real machine are then done either with
fsave/frstor (as before) or fxsave/fxrstor (the SSE equivalents).
Fragile and fiddly; (1) the SSE state needs to be stored on a 16-byte
boundary, and (2) certain bits in the saved MXCSR reg in a state
written by fxsave need to be anded out before we can safely restore
using fxrstor.
It does appear to work. I'd appreciate people trying it out on
various CPUs to establish whether the SSE / not-SSE check works
right, and/or anything else is broken.
Unfortunately makes some programs run significantly slower.
I don't know why. Perhaps due to copying around more processor
state than there was before (SSE state is 512 bytes, FPU state
was only 108). I will look into this.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1574
startup. I don't know if this is actually of interest, since surely
the flags are not live at the point where the section's .init function
is called, but still, it's a form of state pollution.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1570
is exiting normally. There's no point, and it causes breakage when
programs which write their environment variables, finish normally.
MERGE TO STABLE
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1567
Read symbols from both "symtab" and "dynsym" sections, rather than
merely from the one that comes last in the file.
MERGE TO STABLE
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1562
NPTL support.
The behaviour of weak vs strong symbols seems to have changed in
glibc-2.3.2. This caused problems in coregrind/vg_intercept.c,
wherein strong symbols in vg_libpthread.c were intended to
override weak symbols in vg_intercept.c, in order to give alternative
thread-safe implementations of some functions, poll(), select(), etc.
The change involves moving the nonblocking implementations of poll, etc
into vg_intercept.c, renaming them to (eg) VGR_(poll), and routing
all calls to poll to VGR_(poll) [dually for other such fns]. This
means even single-threaded programs now use these functions, but
that doesn't strike me as harmful.
MERGE TO STABLE, if it doesn't break anything
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1559
by the initial scan of /proc/self/maps, so that we correctly identify
addresses in it. This fix is thanks to Dirk Mueller.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1550
for skins.
Changed lackey to print out the exit code.
Changed AUTOMAKE_OPTIONS back to 1.5 (whoops)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1538
The first returns the number of errors found so far, and is a core request.
The second returns the number of bytes found
reachable/dubious/leaked/suppressed by all leak checks so far, for Memcheck and
Addrcheck.
Both are useful for using Valgrind in regression test suites where multiple
tests are present in a single file -- one can run Valgrind with no output
(using --logfile-fd=-1) and use the requests after each test to determine if
any errors happened.
Had to rename and make public vg_n_errs_found --> VG_(n_errs_found) to do so.
Nb: leak errors are not counted as errors for the purposes of
VALGRIND_COUNT_ERRORS. This was decided as the best thing to do after
discussion with Olly Betts, who original suggested these changes.
Pulled out common client request code shared between Memcheck and Addrcheck.
Added a regression test for this.
Added some documentation too.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1533