Commit Graph

373 Commits

Author SHA1 Message Date
Nicholas Nethercote
3ae647fa4e Move some decls out of tool.h into the new file pub_tool_aspacemgr.h.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3885
2005-06-11 04:58:29 +00:00
Nicholas Nethercote
0622471f7b Move NULL from tool.h into basic_types.h.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3884
2005-06-11 04:44:38 +00:00
Nicholas Nethercote
ffc2a3f8ee Move OINK from tool.h to pub_tool_libcprint.h.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3883
2005-06-11 03:31:09 +00:00
Nicholas Nethercote
7bf8160d24 Moved VG_(strdup)() and VG_(arena_strdup)() into m_mallocfree.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3878
2005-06-11 01:12:08 +00:00
Nicholas Nethercote
17bb449c9e Modularised signal libc stuff into m_libcsignal.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3870
2005-06-10 22:08:14 +00:00
Julian Seward
dfebbde255 Move some #define-d constants into the VKI department, where I should
have put them in the first place.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3860
2005-06-09 14:17:47 +00:00
Julian Seward
091ebb69f5 A major overhaul of all machinery to do with syscalls, but mostly of
the m_syscalls module.  Fundamentally the aim of the overhaul is to
clean up the logic and abstractions surrounding syscalls in order that
we can cleanly support ppc32 and other new targets.  Aims in detail:

* To further decouple the syscall PRE/POST wrappers from specifics of
  how those values are stored on a given platform.  The wrappers look
  the same as they did before, mostly (eg, references to ARGn and
  RES are unchanged), but now those macros refer to values in structs
  SyscallArgs and SyscallStatus (see priv_types_n_macros.h).

* Complete overhaul of the driver logic for syscalls.  The resulting
  logic is algorithmically identical to what we had before, but is
  more documented, and deals with moving arg/result data between
  platform specific representations and the canonical forms in
  structs SyscallArgs and SyscallStatus.

* Also as a result of this change, remove problems in the old logic
  due to assignments of RES in PRE wrappers trashing the ARGs whilst
  we still need to see them.

* Lots of other cleanups and documentation.  There is extensive
  commentary in syscalls-main.c.

The driver logic has been placed in its own file, syscalls-main.c.

New/deleted files in m_syscalls:

* syscalls.c is divided up into syscalls-main.c, containing driver
  logic, and syscalls-generic.c, containing generic Unix wrappers.

* priv_syscalls.h is chopped up into priv_types_n_macros.h
  and priv_syscalls-{generic,main}.h.

                           ------------

All the above changes are in m_syscalls.  However there is one
system-wide change as a result of all this.

The x86-linux assumption that syscall return values in the range -4095
.. -1 are errors and all others are values, has been done away with
everywhere.  Instead there is a new basic type SysRes which holds a
system call result in a platform-neutral way.

Everywhere that previously an Int would have held a system call
result, there is now a SysRes in its place.

                           ------------

Almost everything works on SuSE 9.1 (LinuxThreads) again.  NPTL will
still be majorly broken; I will commit fixes shortly.  AMD64 is also
totalled.  I will get to that too.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3849
2005-06-07 20:04:56 +00:00
Robert Walsh
5d35d711ba Implement stack registration client requests. See the documentation
in the user manual for usage information.  The stack_changes.c file in
corecheck/tests contains a short example.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3846
2005-06-04 20:42:33 +00:00
Nicholas Nethercote
face101a47 Modularised file and socket libc stuff in m_libcfile.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3844
2005-06-04 20:03:55 +00:00
Nicholas Nethercote
eb2d0a7d06 Modularised assertions and panics in m_libcassert.
As part of this, killed the VG_STRINGIFY macro, which was used to expand
out names like "VG_(foo)" and "vgPlain_foo" in assertion failure
messages.  This is good since we actually want the "VG_(foo)" form used
in these messages.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3842
2005-06-04 19:16:06 +00:00
Nicholas Nethercote
dbc8c6d99c Modularise printing functions in m_libcprint.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3840
2005-06-03 03:08:39 +00:00
Nicholas Nethercote
fbcb21d4c4 Rename *ROUND* as VG_*ROUND* to be consistent with everything else. Also
make them tool-visible, so that Memcheck and Helgrind don't have to defined
their own versions!



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3839
2005-06-02 03:52:53 +00:00
Nicholas Nethercote
09980587a9 Started modularising vg_mylibc. Put all the standalone stuff -- ie. not
relying on any other modules -- in m_libcbase.

Also converted the 'size' parameters to functions like VG_(memcpy) and
VG_(strncpy) from Int to SizeT, as they should be.

Also removed VG_(atoll16) and VG_(toupper), which weren't being used.

Also made VG_(atoll36) less flexible -- it now only does base-36 numbers
instead of any base in the range 2..36, since base-36 is the only one we
need.  As part of that, I fixed a horrible bug in it which caused it to
return incorrect answers for any number containing the digits 'A'..'I'!
(Eg. for "A; it would return 17 instead of 10!)

Had to disable the assertions in VG_(string_match), since this module can't
see vg_assert, which wasn't ideal but also isn't a disaster.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3838
2005-06-02 03:39:33 +00:00
Nicholas Nethercote
5bdf595e70 Modularised the profiling stuff as m_profile.c. It's much more
sensible now -- no vg_dummy_profile.c, no silly #including of
vg_profile.c from tools.  

Unfortunately, it still doesn't work, due to bad interactions
with signal handling that I don't understand.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3833
2005-06-01 03:09:59 +00:00
Nicholas Nethercote
d01259a1d0 Modularised all the debug info stuff as m_debuginfo/. It's a mess
and needs further cleaning up, but it's a start.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3821
2005-05-31 02:38:09 +00:00
Julian Seward
2479bb6b9b Change the way thread termination is handled. Until now, there has
been a concept of a 'master thread'.  This is the first thread in the
process.  There was special logic which kept the master thread alive
artificially should it attempt to exit before its children.  So the
master would wait for all children to exit and then exit itself, in
the process emitting the final summary of errors, leaks, etc.

This has the advantage that any process waiting on this one will see
the final summaries appearing before its sys_wait call returns.  In
other words, the final summary output is synchronous with the
master-thread exiting.

Unfortunately the master-thread idea has a serious drawback, namely
that it can and sometimes does cause threaded programs to deadlock at
exit.  It introduces an artificial dependency which is that the master
thread cannot really exit until all its children have exited.  If --
by any means at all -- the children are waiting for the master to exit
before exiting themselves, deadlock results.  There are now two known
examples of such deadlocks.

This commit removes the master thread concept and lets threads exit in
the order which they would have exited without Valgrind's involvement.
The last thread to exit prints the final summaries.  This has the
disadvantage that final output may appear arbitrarily later relative
to the exit of the initial thread.  Whether this is a problem in
practice remains to be seen.

As a minor side effect of this change, some functions have had
_NORETURN added to their names.  Such functions do not return.  The
thread in which they execute is guaranteed to exit before they return.
This makes the logic somewhat easier to follow.

amd64 compilation is now broken.  I will fix it shortly.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3816
2005-05-30 21:44:08 +00:00
Julian Seward
161cfde150 First pass at adding ability for Memcheck to print all output in XML
form.  The relevant flag is --xml=yes.  Currently this only works with
Memcheck.

Specifying this flag fixes various other options relating to verbosity
and behaviour of the leak checker, so that the resulting output is in
a relatively fixed form suitable for parsing by GUIs.

Still to do:

* Add mechanism to show error counts
* Add regression test
* Document the resulting format



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3773
2005-05-19 00:25:45 +00:00
Nicholas Nethercote
58d279dbf2 Avoid compiler warnings.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3763
2005-05-17 21:07:46 +00:00
Nicholas Nethercote
0eec4e6ae2 Undo the awful Leak Error type-abuse.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3754
2005-05-17 04:00:11 +00:00
Nicholas Nethercote
26afa60bf2 Update website address.
MERGE TO 2.4 REPOSITORY



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3753
2005-05-17 03:22:38 +00:00
Nicholas Nethercote
937a49ea05 Added module m_options for holding all the command-line option stuff.
Perhaps parts of process_cmd_line_option() should go in here, but I've
not done that for now.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3751
2005-05-16 23:31:24 +00:00
Nicholas Nethercote
df94111968 Removed the core_arch_asm.h files. The OYNK macros now live in tool_asm.h,
at least for the moment.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3748
2005-05-16 21:30:24 +00:00
Nicholas Nethercote
586e79e4bd core.h: remove some #include lines, move some others to more localised
places.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3745
2005-05-16 20:40:51 +00:00
Nicholas Nethercote
816419fa9a No need to generate valgrind.h from valgrind.h.in. We can just use the
compiler symbols rather than our own symbols for the architectures (we
already were, more or less).  This simplifies the build, hurrah!

I also inverted the sense of the NVALGRIND ifdefs, to make them easier to
read, and fixed up some comments.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3739
2005-05-16 13:31:23 +00:00
Nicholas Nethercote
5f3248aeb3 Complete restructuring of include/ directory -- I forgot about the ARM
stuff.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3734
2005-05-16 03:36:19 +00:00
Nicholas Nethercote
8c63e060a7 Restructured the include/ directory.
- All the subdirectories have gone: arm/, x86/, amd64/, linux/,         
  x86-linux/, amd64-linux/, arm-linux/.

- The following files were moved out of those directories into include/:

    amd64-linux/vki_arch.h            --> vki-amd64-linux.h
    x86-linux/vki_arch.h              --> vki-x86-linux.h
    x86-linux/vki_arch_posixtypes.h   --> vki_posixtypes-x86-linux.h
    linux/vki.h                       --> vki-linux.h
    amd64-linux/vki_arch_posixtypes.h --> vki_posixtypes-amd64-linux.h

- The following very small files were inlined into tool.h using the "#if
  defined(VGP_x86)..." technique:

    x86/tool_arch.h
    arm/tool_arch.h
    amd64/tool_arch.h

  The same technique was used twice to include the appropriate
  vki-$PLATFORM and vki-$OS files into tool.h.  

- The other files in those directories were removed.

- The build is much simpler, since we have 7(!) fewer Makefile.am files.
  Far fewer -I options are needed when compiling, too.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3733
2005-05-16 03:25:12 +00:00
Nicholas Nethercote
92c61a5fd1 Don't mix backticks and apostrophes when quoting words -- eg. use 'foo'
rather than `foo', as www.cl.cam.ac.uk/~mgk25/ucs/quotes.html explains
we should (in more detail than you'd imagine was possible).  I did this
both in output messages and in some comments, for consistency.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3723
2005-05-15 17:28:26 +00:00
Nicholas Nethercote
357303aebf Modularised vg_hashtable.c as m_hashtable.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3710
2005-05-14 21:28:43 +00:00
Nicholas Nethercote
0367213e2d Renamed the field Segment.symtab to Segment.seginfo to avoid confusion
with SegInfo.symtab.  

Also renamed VG_(symtab_{inc,dec}ref)() as VG_(seginfo_{inc,dec}ref)()
for the same reason.

Also renamed various SegInfo variables from "seg" to "si" to avoid
confusion with the many Segment variables called "seg".



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3709
2005-05-14 18:42:26 +00:00
Nicholas Nethercote
a5d1db8fc7 Use HChar for format strings to printf-like functions.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3696
2005-05-13 21:49:30 +00:00
Julian Seward
dbdcd9034c Sudden attack of 64-bit paranoia: therefore stick even more (probably
pointless) casts in.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3688
2005-05-12 23:23:38 +00:00
Nicholas Nethercote
4cb3e8a7e4 Modularised vg_skiplist.c as m_skiplist.c.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3671
2005-05-12 04:37:27 +00:00
Nicholas Nethercote
a653c5da3c Cleaned up vg_messages.c and related printf stuff. vg_messages.c is now a
layer above the printf stuff in vg_mylibc.c, which is layered over
m_debuglog.  This makes the module interfaces neater, more consistent, and
cuts 40 lines of code.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3670
2005-05-12 03:51:15 +00:00
Nicholas Nethercote
d7aa13765c Remove dead macro.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3664
2005-05-11 19:03:57 +00:00
Nicholas Nethercote
247e241160 Modularised the core/tool interface ('details', 'needs' and VG_(tdict))
into a new module m_tooliface.  Pretty straightforward.  Touches a lot
of files because many files use this interface and so need to include
the headers for the new module.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3652
2005-05-10 04:37:01 +00:00
Nicholas Nethercote
58d0178013 Add a comment explaining the recently changed behaviour of
RUNNING_ON_VALGRIND.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3651
2005-05-10 03:01:23 +00:00
Nicholas Nethercote
eb32bc7045 Modularised the malloc/free stuff into two modules: m_mallocfree for the
malloc/free implementation, and m_replacemalloc with the stuff for the tools
that replace malloc with their own version.  Previously these two areas of
functionality were mixed up somewhat.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3648
2005-05-10 02:47:21 +00:00
Nicholas Nethercote
a08662c48c Big clean-up: changed the core/tool interface to be mediated entirely
through the VG_(tdict) function dictionary, rather than using TL_(foo)
functions.

This facilitated the following changes:

- Removed the "TL_" prefix, which is no longer needed.

- Removed the auto-generated files vg_toolint.[ch], which were no longer
  needed, which simplifies the build a great deal.  Their (greatly
  streamlined) contents went into core.h and vg_needs.h (and will soon
  go into a new module defining the core/tool interface).  
  
  This also meant that tool.h.base reverted to tool.h (so no more
  accidentally editing tool.h and not having the changes go into the
  repo, hooray!)  And gen_toolint.pl was removed.  And toolfuncs.def was
  removed.

- Removed VG_(missing_tool_func)(), no longer used.

- Bumped the core/tool interface major version number to 8.  And I
  killed the minor version number, which was never used.  The layout
  of the ToolInfo struct is such that this should not cause problems.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3644
2005-05-09 01:02:08 +00:00
Nicholas Nethercote
89a26b8f71 Rename some _SIZE macros as _SZB to make their units clear. This change is
in response to a mixed-units (bytes and words) error we had involving
VGA_STACK_REDZONE_SIZE (which is now VGA_STACK_REDZONE_SZB).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3639
2005-05-08 17:49:37 +00:00
Nicholas Nethercote
63901a5d88 Put all the system call stuff in a new module, m_syscalls. This
required moving a lot of stuff around.  I deleted
VG_(set_return_from_syscall_shadow)() and VG_(get_exit_status_shadow)(),
which screwed up the modularity and weren't being used and can be
simulated in other ways with a bit of care.

What are the chances that I've added and moved all the files correctly
in this commit, and not broken the amd64 port?


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3636
2005-05-08 14:45:13 +00:00
Nicholas Nethercote
a9c13f8c5c Remove dead function VG_(exit_single)().
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3633
2005-05-08 02:13:47 +00:00
Nicholas Nethercote
fe432113e6 A crucial, crucial change: update my email address.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3632
2005-05-08 02:10:27 +00:00
Julian Seward
628f8fbd1b gcc-3.3.3 is fooled by strings like "linux/include/asm-i386/*.h"; it
thinks it is seeing a comment within a comment, and complains.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3598
2005-05-02 17:11:58 +00:00
Nicholas Nethercote
bb0ff0ee26 Correct header comment.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3597
2005-05-02 13:24:14 +00:00
Julian Seward
5496e4553b Add macro definitions that make it possible to do cpu/os/both
ifdeffery in a sane way where it's absolutely unavoidable.  When
building the core, eg on amd64-linux, the following preprocessor
symbols are defined:

   VGA_amd64
   VGO_linux
   VGP_amd64_linux

etc on other platforms.

Also, include/basic_types.h now defines VG_WORDSIZE and this is what
should be used for ifdefs that need to know the host word size.

ifdefs based on the C compilers built-ins such as __amd64__ etc
are deprecated and will be done away with.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3590
2005-05-02 10:25:34 +00:00
Julian Seward
487756039c Add a new module: the debug-logger. For a while now, we've used the
same logging mechanism to emit both end-user messages and debugging-
valgrind-itself messages.  This commit creates a new mechanism for the
latter purpose.

The main feature of m_debuglog is that it has zero dependencies on any
other module and therefore can safely operate all the way through
stage1 and stage2 startup.  It is restricted to emitting debug info on
file descriptor 2 (stderr), but that's not a big deal.

As a result of this change the basic formatted-print routines
(vprintf) have been moved from vg_mylibc.c into m_debuglog, so that
m_debuglog remains standalone.

The %y format string is currently disabled, since supporting it ("show
symbol corresponding to this address") would create a dependency from
m_debuglog to the entire debug-info reading machinery and all the
stuff that depends on, thereby making a nonsense of m_debuglog being
standalone.  Its omission does not seem to cause any regression tests
to fail, though.

The debug logger is activated with "-d".  More "-d"s make it more
verbose.

m_debuglog.o is linked into both stage1 and stage2, but as it is
completely standalone this causes no particular problems.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3559
2005-04-25 01:36:56 +00:00
Julian Seward
d82491f9da Update comment about stack management, and remove some unused
functions.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3552
2005-04-24 11:05:55 +00:00
Julian Seward
2c4c0c38f6 Allow memcheck to take account of VGA_STACK_REDZONE_SIZE -- that is,
account for the fact that on amd64 (really, on amd64-linux) the area
up to 128 bytes below the stack pointer is accessible.  This meant
moving the definitions of VGA_STACK_REDZONE_SIZE to tool-visible
places.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3546
2005-04-23 22:42:27 +00:00
Nicholas Nethercote
5446180661 Renamed vg_errcontext.c as errormgr.c, and carved off the relevant parts of
core.h and tool.h into pub_core_errormgr.h and pub_tool_errormgr.h.  All
just to improve general modularity.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3532
2005-04-19 04:10:25 +00:00
Nicholas Nethercote
9aecfe0d13 Added new assert macros vg_assert2 and tl_assert2 which allow you to print a
string explaining more detail if the assertion fails (eg. the value of the
bogus variable) using printf-style format arguments.

One consequence of this is that you can do something like
 
  vg_assert2(0, "bad bad bad");

instead of calling VG_(core_panic).  The advantage of the new approach is
that it shows the file/function/line info for the failing code, whereas
VG_(core_panic)() does not.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3528
2005-04-08 23:28:23 +00:00