Commit Graph

68 Commits

Author SHA1 Message Date
Nicholas Nethercote
698c99b62c Merge r9529 (better memalign abort message) from the DARWIN branch.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9530
2009-04-14 23:43:15 +00:00
Nicholas Nethercote
f224503623 whitespace-only change
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9454
2009-03-17 04:51:19 +00:00
Nicholas Nethercote
b15e3d9a45 Fix all the non-VEX problems identified with the Clang Static Analyzer.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9416
2009-03-15 23:25:38 +00:00
Nicholas Nethercote
2001629c3f Updated copyright years.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9344
2009-03-10 22:02:09 +00:00
Nicholas Nethercote
5aac956e64 Remove a number of unused parameters, found with -Wunused-parameter.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9248
2009-02-24 03:07:37 +00:00
Nicholas Nethercote
3ed4532cde In the core, include malloc_usable_size() as one of the functions that must
be replaced if malloc() et al are replaced by a tool.  This is because
different tools implement the function in different ways.

Add an appropriate malloc_usable_size() replacement to each of Memcheck,
Helgrind, DRD, Ptrcheck, Massif.

Update memcheck/tests/malloc_usable and add massif/tests/malloc_usable.

Merged from the DARWIN branch.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9193
2009-02-17 04:31:18 +00:00
Nicholas Nethercote
d33b3e0d24 Patch from Robert O'Callahan:
make realloc(NULL, size) behave like malloc(size), and make
  realloc(ptr, 0) behave like free(ptr), as the real libc realloc does.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8666
2008-10-12 19:51:41 +00:00
Julian Seward
6e8238ffc4 m_mallocfree.c: omit the 8 byte per block cost-center field used
for heap profiling, if heap profiling is not selected.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8625
2008-09-19 20:13:39 +00:00
Julian Seward
335992d8fc Merge all remaining changes from branches/PTRCHECK. These are some
relatively minor extensions to m_debuginfo, a major overhaul of
m_debuginfo/readdwarf3.c to get its space usage under control, and
changes throughout the system to enable heap-use profiling.

The majority of the merged changes were committed into
branches/PTRCHECK as the following revs: 8591 8595 8598 8599 8601 and
8161.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8621
2008-09-18 18:12:50 +00:00
Bart Van Assche
8e96150945 Merged FORMATCHECK branch (r8368) to trunk.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8369
2008-07-07 06:49:24 +00:00
Julian Seward
72a3a2f4f2 Make the size calculations inside VG_(mallinfo) 64-bit clean.
I don't really understand how 'struct mallinfo' makes any sense on a
64-bit platform given that all the field sizes are 32-bit ints, and
surely at least .arena and .uordblocks and probably others could
easily exceed 32-bit range.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8149
2008-05-29 13:45:49 +00:00
Bart Van Assche
2497cadb85 Refined mallinfo() implementation (contributed by Eugene Toder).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7901
2008-04-21 17:28:50 +00:00
Bart Van Assche
2a7b4f5bd5 Added mallinfo() implementation based on patch by Eugene Toder (see also bug 160956).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7888
2008-04-19 14:43:30 +00:00
Julian Seward
14af4957fc Merge in the DATASYMS branch.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7540
2008-03-03 01:35:41 +00:00
Julian Seward
5679a22410 Update copyright dates ("200X-2007" --> "200X-2008").
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7398
2008-02-11 11:34:59 +00:00
Julian Seward
b1cd71d2ca Attempt to shake out uses of uninitialised malloc'd memory by Valgrind
itself, if such exist.  Attempt failed (or no such uses exist :-)
Commit does not change any code.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7207
2007-11-24 23:37:07 +00:00
Nicholas Nethercote
d95559802b Changed Massif to record the 'slop' heap bytes caused by rounding asked-for
sizes up to a multiple of 8 (or whatever --alignment is).  This is combined
with the "admin" bytes, resulting in the "extra" bytes.  Added
VG_(malloc_usable_size) to the tool interface to support this.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7133
2007-11-10 04:08:08 +00:00
Nicholas Nethercote
cd95227e38 Add a comment.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7009
2007-10-16 23:18:06 +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
Julian Seward
3773a4d6c2 The drastic increase in the number of per-arena freelists in r6771
exposes a performance problem with doing m_mallocfree.c sanity checks
(at --sanity-level=3, at least), caused by slowness in
listNo_to_pszB_min.  This commit fixes the problem by caching the
results of queries to listNo_to_pszB_min.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6775
2007-08-23 10:22:44 +00:00
Julian Seward
f65fd40ae0 Previously, each Arena has a linked list of Superblocks, which can
make VG_(arena_free) expensive if many superblocks have to be checked
before the right one is found.  This change gives the arena a
dynamically expanding sorted array of superblocks, so that finding the
superblock containing an about-to-be-freed block (findSb) is now
O(log2 n) rather than linear in the number of superblocks in the
arena.  Patch from Christoph Bartoschek.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6771
2007-08-21 10:55:26 +00:00
Julian Seward
0f312746f1 Some improvements for malloc/free intensive programs, inspired by
performance studies by Christoph Bartoschek:

* Increase the number of freelists per arena from 18 to 112, so as
  to (drastically) cut down on the amount of freelist searching that
  happens.

* Increase the size of the client and tool arenas, so as to reduce
  the cost of finding arenas during freeing.  This is a kludge; a
  better solution would be to use binary search on superblocks, as
  Christoph's patches do.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6770
2007-08-20 22:57:56 +00:00
Nicholas Nethercote
38fd939a14 Clarify the "out of memory" message.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6656
2007-03-22 03:36:55 +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
Julian Seward
78cd9b9a70 Merge r6136:
Track SysRes change; support bigpage allocation on AIX; make the
client-arena superblocks much bigger on AIX.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6273
2006-10-17 01:42:40 +00:00
Julian Seward
ae8215b3ac Create a new module, m_vki, and move all knowledge about the kernel
interface, except for the syscall numbers, into that.  Mostly this
means moving include/vki-*.h to include/vki/vki-*.h.

include/pub_tool_basics.h previously dragged in the entire kernel
interface.  I've done away with that, so that modules which need to
see the kernel interface now have to include pub_{core,tool}_vki.h
explicitly.  This is why there are many modified .c files -- they have
all acquired an extra #include line.

This certainly breaks all platforms except x86.  Will fix shortly.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6225
2006-10-14 19:26:10 +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
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
6b44965dc5 code layout wibbles only
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5440
2005-12-26 17:50:22 +00:00
Nicholas Nethercote
e830c38ce8 A minor performance improvement -- make swizzle() faster.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5431
2005-12-25 02:47:12 +00:00
Nicholas Nethercote
3866282110 Remove all remaining profiling gunk.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5388
2005-12-19 22:48:39 +00:00
Julian Seward
be18f74393 findSb: gradually rearrange the superblock list to bring frequently
accessed blocks closer to the front.  This speeds up malloc/free
intensive programs because evidently those searches cause a lot of
cache misses (so cachegrind tells us).  For perf/heap.c on P4
Northwood, this halves the run-time (!) from 85.8 to 42.9 seconds.
For "real" code (start/exit ktuberling) there is a small but
worthwhile performance gain, of about 2 seconds out of 95.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5365
2005-12-17 20:37:36 +00:00
Nicholas Nethercote
ad827637fd Add info about overhead in heap blocks and OSet nodes.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5361
2005-12-16 17:06:37 +00:00
Julian Seward
07f008c0f2 Defensive hacks to detect cases where V corrupts its own heap and/or
uses memory after freeing.  Check the redzones for all non-client
frees, and fill all non-client freed areas with garbage.  Unroll
VG_(memset) as a precautionary measure against performance lossage.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5283
2005-12-04 23:27:14 +00:00
Julian Seward
36152f964e Pass args to match format string.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4963
2005-10-21 12:05:05 +00:00
Julian Seward
6048f9c854 Add a new arena (VG_AR_TTAUX) for holding auxiliary TT/TC structures
(see next commit).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4941
2005-10-18 02:20:18 +00:00
Tom Hughes
6961dcf591 Fix statement-before-declaration warnings for the core code.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4906
2005-10-12 10:45:27 +00:00
Tom Hughes
c0893e8f7d Stop memalign crashing if it fails to allocate the memory. Bug 112538.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4879
2005-10-06 12:04:26 +00:00
Julian Seward
cc8ccbbfb4 This commit merges in changes from branches/ASPACEM (specifically,
changes from r4341 through r4787 inclusive).  That branch is now dead.
Please do not commit anything else to it.

For the most part the merge was not troublesome.  The main areas of
uncertainty are:

- build system: I had to import by hand Makefile.core-AM_CPPFLAGS.am
  and include it in a couple of places.  Building etc seems to still
  work, but I haven't tried building the documentation.

- syscall wrappers: Following analysis by Greg & Nick, a whole lot of
  stuff was moved from -generic to -linux after the branch was created.
  I think that is satisfactorily glued back together now.

- Regtests: although this appears to work, no .out files appear, which
  is strange, and makes it hard to diagnose regtest failures.  In
  particular memcheck/tests/x86/scalar.stderr.exp remains in a 
  conflicted state.

- amd64 is broken (slightly), and ppc32 will be unbuildable.  I'll
  attend to the former shortly.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4789
2005-09-27 19:20:21 +00:00
Nicholas Nethercote
281297db9f Fix a problem I introduced in r4208 when reducing the space used by
heap blocks.  The minimum size for redzones is now sizeof(void*), but
I forgot to ensure this.  Massif was asking for 0 byte redzones, and this
was screwing things up on 64-bit platforms, and Massif was dying very
quickly.  This should fix bugs #111090 and #111285.

The fact that Massif was this badly broken but there were only 2 bug reports
indicates that not many people are using it, at least not on AMD64.

I also added a regtest that does some basic malloc/realloc/free testing
for Massif, which would have caught this problem.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4492
2005-08-24 22:38:00 +00:00
Nicholas Nethercote
f55a9512e0 Make the allocator's access functions slightly stricter in their
checking of the lo/hi size fields.  If we are corrupting the metadata,
this should make it more likely that we get an assertion failure rather
than an outright crash.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4480
2005-08-23 22:11:20 +00:00
Nicholas Nethercote
d2d79a668a Partial implementation of mallinfo(). It still puts zero in all
the fields, but all the plumbing is now there so that m_mallocfree.c
can fill them in.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4441
2005-08-17 05:01:37 +00:00
Nicholas Nethercote
dbae71819c malloc_usable_size() was totally broken, crashing immediately.
I guess it's not very widely used :)


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4439
2005-08-17 04:03:31 +00:00
Nicholas Nethercote
6be8d53922 This commit reduces the overhead of each heap allocation done by
Valgrind's allocator, by overlapping the redzones (used when blocks
are in-use) with the prev/next ptrs (used when they are free).
This reduces the overhead for a heap block allocated by the core from
32B to 16B on 32 bit machines, and from 48B to 32B on 64 bit machines.

The only conceivable downside of this is that on 64 bit machines, if
the client frees a block and then writes past the start/end of it,
it will corrupt the metadata after only 8 bytes of overwriting, rather than
16 bytes.  Memcheck will have squealed to kingdom come by this time anyway.
(This won't happen on 32 bit machines because the overhead hasn't changed
for client blocks as allocated by Memcheck on 32 bit machines.)

I also tweaked the access functions.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4208
2005-07-20 04:12:41 +00:00
Nicholas Nethercote
ced59e1593 tweak
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4155
2005-07-17 23:12:33 +00:00
Nicholas Nethercote
dc09fec388 Introduced get_pszB() to cover several common cases.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4154
2005-07-17 18:12:00 +00:00
Nicholas Nethercote
b04d33383d tweaks
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4153
2005-07-17 18:00:57 +00:00
Nicholas Nethercote
325aa03f8a Introduce get_bszB() and get_bszB_as_is() to factor out some common
combinations of function calls.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4152
2005-07-17 17:55:42 +00:00
Nicholas Nethercote
c7461d15cd Replace is_inuse_bszB() with is_inuse_block(), which is higher-level
and thus makes the code that uses it easier to understand.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4151
2005-07-17 17:20:30 +00:00
Nicholas Nethercote
7fb39f11e8 Rename 'other' as 'other_b' to make the fact it's a block more clear.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4150
2005-07-17 17:12:24 +00:00