Commit Graph

175 Commits

Author SHA1 Message Date
Julian Seward
9ad4d494fa New options for Memcheck, --malloc-fill=<hexnumber> and
--fill-free=<hexnumber>, which cause malloc'd(etc) and free'd(etc)
blocks to be filled with the specified value.  This can apparently be
useful for shaking out hard-to-track-down memory corruption.  The
definedness/addressability of said areas is not affected -- only the
contents.  Documentation to follow.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7259
2007-11-30 21:41:40 +00:00
Julian Seward
755bc0ea22 Make the freed-block-queue volume metrics 64-bit throughout, to avoid
any wierdness on very large machines in the future.  Also, double the
default size from 5MB to 10MB, on the basis that programs are now on
average twice as lardy as they were when it was set to 5MB, whenever
that was.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7256
2007-11-30 17:19:36 +00:00
Julian Seward
75fd9878c9 Merge (from branches/THRCHECK) the following amd64-linux stack unwind
kludges^H^H^H^H^H^H^Henhancements:

r6802: For VG_(record_ExeContext) et al, add a new parameter
(first_ip_delta) which is added to the initial IP value before the
stack is unwound.  A safe value to pass is zero, which causes the
existing behaviour to be unchanged.  This is a kludge needed to work
around the incomplete amd64 stack unwind info in glibc-2.5's clone()
routine.

r7059: Add a last-ditch heuristic-hack to the amd64-linux stack
unwinder, which is used when all other methods fail.  Seems like GDB
has something similar.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7118
2007-11-09 23:02:28 +00:00
Nicholas Nethercote
7cb817e078 Fix various format string errors, courtesy of Florian Krohm.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6902
2007-09-23 00:51:24 +00:00
Nicholas Nethercote
3f2e579afa Change an Int to a SSizeT to avoid overflows. Fixed bug 148174.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6855
2007-09-17 22:46:45 +00:00
Nicholas Nethercote
0974a299f5 Split the OSet interface into two parts: "OSetGen_", which is the existing
interface and provides full power;  and "OSetWord_", which is an
easier-to-use interface for if you just want to store words.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6841
2007-09-17 05:30:48 +00:00
Julian Seward
0ed8fc0ce0 Merge, from CGTUNE branch, a cleaned up version of r6742:
Another optimisation: allow tools to provide a final_tidy function
which they can use to mess with the final post-tree-built IR before it
is handed off to instruction selection.

In memcheck, use this to remove redundant calls to
MC_(helperc_value_check0_fail) et al.  Gives a 6% reduction in code
size for Memcheck on x86 and a smaller (3% ?) speedup.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6787
2007-08-28 06:05:20 +00:00
Julian Seward
0e70d01bdd Changes to m_hashtable:
Allow hashtables to dynamically resize (patch from Christoph
Bartoschek).  Results in the following interface changes:

* HT_construct: no need to supply an initial table size.
  Instead, supply a text string used to "name" the table, so
  that debugging messages ("resizing the table") can say which
  one they are resizing.

* Remove VG_(HT_get_node).  This exposes the chain structure to 
  callers (via the next_ptr parameter), which is a problem since
  callers could get some info about the chain structure which then
  changes when the table is resized.  Fortunately is not used.

* Remove VG_(HT_first_match) and VG_(HT_apply_to_all_nodes) as
  they are unused.

* Make the iteration mechanism more paranoid, so any adding or
  deleting of nodes part way through an iteration causes VG_(HT_next)
  to assert.

* Fix the comment on VG_(HT_to_array) so it no longer speaks 
  specifically about MC's leak detector.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6778
2007-08-25 07:19:08 +00:00
Julian Seward
172505c978 Update copyright dates.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6488
2007-01-08 06:01:59 +00:00
Nicholas Nethercote
422afe504a Remove dead code.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6449
2006-12-27 23:19:10 +00:00
Nicholas Nethercote
d162731a2c Completely overhauled the internals of Memcheck's error handling. All the
different error kinds were reusing the same struct for storing their
details.  Each one used some but not all the fields, and the AddrInfo was
similar, and it was very confusing.

So I changed MC_Error and AddrInfo to be tagged unions, like Vex's IRExpr and
IRStmt types.  The resulting code is a little more verbose but much easier
to understand.  I also split up several error kinds, which also made things
simpler.  The user-visible behaviour is identical except for a couple of
very minor things that I've documented in the NEWS file for the 3.3.0
release.

Ideally I'd get rid of the Addr and Char* fields in the core Error type,
which are not always used, and do them similarly within tools.  But that
would require changing the core/tool interface, so I'm leaving it for the
moment.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6402
2006-12-16 00:54:12 +00:00
Nicholas Nethercote
52dfe4cb39 Remove defunct constant.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6401
2006-12-15 04:37:25 +00:00
Julian Seward
dfa95416d2 Fix error in aix zeropage handling.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6396
2006-12-13 03:16:40 +00:00
Julian Seward
34a8fb5292 Fix suppression-matching bogon (Paul Floyd).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6378
2006-12-06 03:36:24 +00:00
Julian Seward
7fe15db883 Make it possible to suppress, and auto-generate suppressions for,
"User" errors; that is, errors resulting from client requests (check
memory range is addressible / defined).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6374
2006-11-28 00:15:35 +00:00
Julian Seward
c7b05679fe - Fix a subtle alignment-check bug I introduced into mc_die_mem_stack_12
- Add comments to many of the functions to make explicit their 
  alignment-check logic



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6314
2006-10-17 23:14:42 +00:00
Julian Seward
88d3b910a2 Merge r6112:
Changes resulting from porting to AIX5:

- Auxiliary primary map handling has been redone, so that the
  performance penalty for hitting memory above the magic 32G limit is
  much reduced, and also the number of usable maps is limited only by
  how much memory is available.  The current code has been tested on
  64-bit AIX for processes up to about 8GB in size.

  The auxiliary primary maps are now stored in an OSet, "auxmap_L2".
  However, looking up in an OSet for each memory reference is
  expensive.  So the OSet is 'fronted' by 24-entry array which holds
  pointers to the 24 most recently used auxiliary primary maps.
  Accesses to this array are made faster by incrementally rearranging
  it on every lookup (if the requested map is found in the array, it
  is moved one element closer to the start of the array).

  Logically speaking, auxmap_L1 is a cache of auxmap_L2.  The L2-L1
  relationship is one of inclusion; iow L2 is not a victim cache.

  There is extensive new sanity check code for these structures.

- Along with the auxmap changes are semi-fast cases in mc_LOADVn_slow
  and mc_STOREVn_slow.  These catch naturally aligned, word-size loads
  which fall into addressible memory, and handle them directly rather
  than in a byte-by-byte fashion.

- Fix longstanding error with alignment checks in
  {new,die}_mem_stack_N.  Previously, these checked the alignment of
  the new SP value without taking the stack redzone size into account.
  This is only safe if the redzone size is 8-aligned.  The right thing
  to do is check alignment after adding on the redzone size.

- Add a new mechanism which allows specification, on the command line,
  of address ranges which memcheck is to 'ignore'.  Meaning that it
  regards all writes to those ranges as acceptable and all reads from
  those ranges as acceptable and returning initialised data.  This is
  done without disturbing the existing finally-balanced bitmap 
  machinery.  Instead, in mc_record_address_error, just ignore the
  error if the address falls inside an ignored-range.

  There is a new command-line flag --ignore-ranges= to specify
  the address ranges.  Currently up to 4 non-overlapping ranges may
  be specified.

  This kind of thing is useful if you want to do some strange thing
  like map a high-performance network card into memory and can't be
  bothered to tell memcheck about it through the official channels
  (intercepting syscalls/ioctls and telling aspacem about them.)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6256
2006-10-17 01:28:10 +00:00
Julian Seward
a81be9f483 A memory pool update from Graydon Hoare.
Here's an update to the mempool move / change client requests and sanity 
checking. The following changes are present:

   - Added one more (hopefully last) client request, a predicate to
     test whether a mempool anchor address is currently tracked.
     It turns out mozilla's arena-using code is sufficiently inconsistent
     in its assumptions that it's very difficult to phrase the valgrind
     client-request annotations without this request. Namely: sometime
     arena-init and arena-free operations are assumed to be idempotent.

   - Fixed a very rapid tool-memory leak in the mempool sanity check
     routine. The previous version of the patch I posted would use all
     memory even on my Very Beefy Test Machine within ~15 minutes of
     browsing with firefox.

   - Added a little logging code to print the counts of pools and chunks
     active every ~10000 sanity checks, when running with -v.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6197
2006-10-05 17:59:23 +00:00
Nicholas Nethercote
cd94343ee3 Add a comment about marking static memory as defined.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6083
2006-09-21 15:59:30 +00:00
Julian Seward
7586467ab5 Add a mempool-trimming client request (Graydon Hoare).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5992
2006-07-28 00:06:37 +00:00
Julian Seward
ddbe46ba1e Fix copy-n-paste error to do with ppc64-linux stack redzone handling
(from r5791).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5973
2006-06-16 21:39:08 +00:00
Julian Seward
ad67fd79fe Update copyright dates.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5954
2006-06-05 23:21:15 +00:00
Julian Seward
84f71ab2f3 Assertion is too restrictive; it's possible to validly get an
addressibility error when MC_(clo_undef_value_errors) is True.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5922
2006-05-22 13:59:42 +00:00
Julian Seward
23ad3fce2f Vectorise copy_address_range_perms for common cases. This gives about
40% speedup on artificial programs which just do realloc() and nothing
else, and about a 3-4% speedup on starting kpresenter-1.5.0 and
loading a 16-slide presentation.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5880
2006-05-03 22:13:57 +00:00
Nicholas Nethercote
1a7237d77b Remove tool-specific code (which says which tools allow XML) from the core
by introducing a new "need":  VG_(needs_xml_output)().


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5854
2006-04-16 10:25:43 +00:00
Nicholas Nethercote
148c02054a Use better variable names.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5830
2006-04-06 13:33:48 +00:00
Nicholas Nethercote
3d12e0e9db Terminology change: previously in Memcheck we had the four states:
noaccess, writable, readable, other

Now they are:

   noaccess, undefined, defined, partdefined

As a result, the following names:

   make_writable, make_readable,
   check_writable, check_readable, check_defined

have become:

   make_mem_undefined, make_mem_defined,
   check_mem_is_addressable, check_mem_is_defined, check_value_is_defined

(and likewise for the upper-case versions for client request macros).
The old MAKE_* and CHECK_* macros still work for backwards compatibility.

This is much better, because the old names were subtly misleading.  For
example:

  - "readable" really meant "readable and writable".
  - "writable" really meant "writable and maybe readable, depending on how
    the read value is used".
  - "check_writable" really meant "check writable or readable"

The new names avoid these problems.

The recently-added macro which was called MAKE_DEFINED is now
MAKE_MEM_DEFINED_IF_ADDRESSABLE.

I also corrected the spelling of "addressable" in numerous places in
memcheck.h.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5802
2006-03-31 11:57:59 +00:00
Nicholas Nethercote
e6abeb8b0a Change to some better function names.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5797
2006-03-28 12:51:02 +00:00
Nicholas Nethercote
ad92170332 Change some uses of bytes to bits for consistency.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5796
2006-03-28 12:35:08 +00:00
Nicholas Nethercote
991367c922 Merge in the COMPVBITS branch to the trunk. This is a big change to
Memcheck, replacing the 9-bits-per-byte shadow memory representation to a
2-bits-per-byte representation (with possibly a little more on the side) by
taking advantage of the fact that extremely few memory bytes are partially
defined.

For the SPEC2k benchmarks with "test" inputs, this speeds up Memcheck by a
(geometric mean) factor of 1.20, and reduces the size of shadow memory by a
(geometric mean) factor of 4.26.

At the same time, Addrcheck is removed.  It hadn't worked for quite some
time, and with these improvements in Memcheck its raisons-d'etre have
shrivelled so much that it's not worth the effort to keep around.  Hooray!

Nb: this code hasn't been tested on PPC.  If things go wrong, look first in
the fast stack-handling functions (eg. mc_new_mem_stack_160,
MC_(helperc_MAKE_STACK_UNINIT)).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5791
2006-03-27 11:37:07 +00:00
Julian Seward
522cf5944f Add a new kind of memory-painting primitive, which is: 'make_defined'.
For each byte in the range, if the byte is addressible, make it be
initialised, but if it isn't addressible, leave it alone.  So it's
like a version of make_readable which doesn't alter addressibility.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5736
2006-03-10 13:41:58 +00:00
Julian Seward
aee8146a06 Reinstate the SET/GET_VBITS client requests.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5723
2006-03-08 13:20:09 +00:00
Julian Seward
eedadc5fb3 get_abit_and_vbyte/get_abit can be a significant bottleneck when
painting/checking huge numbers of bytes resulting from client check
requests.  Inlining them helps significantly.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5710
2006-03-03 21:02:18 +00:00
Julian Seward
aa35c50723 Extend stack-permissions-change fast-case machinery to handle +/- 112,
128, 144 and 160.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5640
2006-02-12 15:42:20 +00:00
Julian Seward
6af183ac21 Changes to make function wrapping work better on ppc64-linux:
- when recording the non-redirected address in guest_NRADDR, also
  snapshot the current R2 value, as that will be needed to run the
  original safely

- As a consequence, the original-function information extracted by
  VALGRIND_GET_ORIG_FN is different on ppc64-linux (2 words) from
  all other platforms (1 word).  So change the type of it from
  void* to a new type OrigFn which can be defined differently for
  each platform.

- Change the CALL_FN_* macros for ppc64-linux to save/restore
  R2 values appropriately.

- ppc64-linux: detect overflow/underflow of the redirect stack
  and bring Valgrind to a halt if this happens

- Update VG_CLREQ_SZB for ppc32/64 (was out of date).





git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5569
2006-01-20 14:31:57 +00:00
Julian Seward
b4628a7314 Valgrind-side handling (fast case) for the ppc64 ELF stack redzone.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5545
2006-01-18 04:16:27 +00:00
Julian Seward
6c04df88c8 Increase size of the largest guest state handled.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5532
2006-01-17 01:58:24 +00:00
Julian Seward
cc9a4e788c Fix a casting bug in the LOADV8 slow (misaligned) case spotted by Nick.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5500
2006-01-05 14:09:46 +00:00
Nicholas Nethercote
798fba1991 Remove remaining profiling gunk from Memcheck.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5387
2005-12-19 22:48:06 +00:00
Nicholas Nethercote
c2e79c35e4 Remove the old profiling stuff from Memcheck.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5385
2005-12-19 22:23:35 +00:00
Tom Hughes
9a850246f9 Fixed to check whether __builtin_expect is supported before using it.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5372
2005-12-19 12:40:13 +00:00
Cerion Armour-Brown
b714685c63 Take ppc64 startup further along the road
- fixed launcher.c to recognise ppc32/64-linux platforms properly
 - lots of assembly fixes to handle func descriptors, toc references, 64bit regs.
 - fixed var types in vki-ppc64-linux

Now gets as far as VG_(translate), but dies from a case of invalid orig_addr.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5299
2005-12-06 19:07:08 +00:00
Julian Seward
0a24c03427 Fix obscure memcheck bug found by Nick. This could cause false
negatives, but only in the following unlikely circumstances: for an
8-byte store, which is handled by by the slow path (due to
misalignment or incomplete addressibility).  In this case, the bug
caused the top 32 of the written V bits to be forced to zero
("defined").  This would not have affected the vast majority of 8-byte
stores since almost all of them would either have been handled by the
fast case or would have the top 32 V bits as zero anyway (almost
certainly both).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5222
2005-11-20 19:08:08 +00:00
Nicholas Nethercote
a26bd07b31 Remove horribly out-of-date comment.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5132
2005-11-15 02:24:57 +00:00
Julian Seward
57e70cee23 Get rid of old flags that memcheck no longer has.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5039
2005-11-08 14:10:24 +00:00
Julian Seward
7f31b1528f memcheck: make --partial-loads-ok=yes work again, but now make it
the non-default (it's a hack after all).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5035
2005-11-08 02:25:37 +00:00
Nicholas Nethercote
f2ec4febfe Make the usage message a little neater and more self-consistent.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4948
2005-10-19 22:39:40 +00:00
Julian Seward
00c09f8f0d Build fixes for gcc-2.96. The system now builds and regtests with the
default gcc-2.96 on Red Hat 7.3.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4911
2005-10-12 12:53:20 +00:00
Nicholas Nethercote
2349f41c86 Add a comment about Memcheck not doing anything for mprotect.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4886
2005-10-07 04:48:37 +00:00
Julian Seward
75d5c9fbd4 %u -> %lu
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4813
2005-09-28 20:00:30 +00:00