Commit Graph

193 Commits

Author SHA1 Message Date
Nicholas Nethercote
21f31418f0 Fix up vg_preload_core.so vs. vgpreload_core.so confusion introduced
during the ASPACEM merge.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4815
2005-09-29 00:25:07 +00:00
Julian Seward
b98ac01c9f Get rid of pub_core_main.h, so that m_main is not imported by anyone,
and so is not part of a module cycle.  This requires a moderately
grotty hack of passing a continuation-function pointer in a global
variable.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4806
2005-09-28 10:47:38 +00:00
Julian Seward
c3d915e97b Rename m_launcher.c to launcher.c to make clear it's not part of the
normal module scheme -- it's a standalone program.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4804
2005-09-28 01:53:07 +00:00
Nicholas Nethercote
d9c2f2f027 Fix up Makefile.core.am which got a little confused during the ASPACEM
merging.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4794
2005-09-27 20:27:04 +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
Tom Hughes
abd818b4c0 Quote the expansion of CC when invoking make for VEX. Fixes bug #111785.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4589
2005-08-30 18:47:35 +00:00
Julian Seward
42b4516a9d Pass $(CC) to the vex Makefile.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4559
2005-08-29 12:11:06 +00:00
Nicholas Nethercote
63df7df1c8 Give file a better name.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4546
2005-08-28 04:48:12 +00:00
Nicholas Nethercote
e1d86426b2 Move the core dumping code out of m_signals to a new module,
m_coredump.  The code is still commented out, though.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4545
2005-08-28 04:38:12 +00:00
Nicholas Nethercote
ed0bcea859 Rename vg_preload_core.so to vgpreload_core.so to be consistent with
tool preload modules, which are called vgpreload_<tool>.so.  Also
fixed a couple of comments relating to this.

(This need not be merged into 3_0_X.)


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4514
2005-08-25 22:53:57 +00:00
Tom Hughes
596e2787a5 Make sure vex_svnversion.h is updated after an svn update and declare
the libvex.a target as phone to ensure that we always try and rebuild
it in case there have been changed in the VEX code.

The partially fixes bug #110770.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4473
2005-08-20 16:26:04 +00:00
Tom Hughes
79342fc67f Pass AM_CFLAGS to the compiler when extracting the default linker
script so we are sure to get the 32 bit version when appropriate.

Also pass ARCH_CORE_AM_CFLAGS in EXTRA_CFLAGS when building VEX so
we can be sure to build a 32 bit VEX when appropriate.

This should fix bug #110830.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4442
2005-08-17 08:50:51 +00:00
Nicholas Nethercote
89163ecf45 Added new module, m_oset, which provides a generic data structure, OSet,
which is a sorted set with no duplicates.  This is derived from
m_skiplist, which it will hopefully replace.  The interface has the
following improvements:

- Avoided all mention of how the data structure is implemented in the
  interface, so it could be replaced with another data structure without
  changing external code.
- Two kinds of comparison:  fast -- use the first word of each element
  for comparison;  slow -- use a custom function.  The custom function
  compares a key with an element, so non-overlapping interval lists can
  be supported easily.  m_skiplist only supports the slow variant, and it
  makes things almost 2x faster.
- Users pass in malloc() and free() functions, so m_oset.c it doesn't
  rely on any particular allocator.
- It has a Destroy() function which will deallocate all the nodes.
- It allows variable-sized nodes.
- No static constructor;  I needed the flexibility of being able to
  execute arbitrary code in the constructor.  This also means no type
  internals are exposed.

No part of Valgrind actually uses OSet yet, although I've privately
converted several data structures, and so I'm confident that the
interface is basically sound.  Some functions may be added later.
  
The implementation uses AVL trees, and has the following
characteristics:

- Lookup is much faster than for skiplists -- around 3x.  This is
  because the inner lookup loop is much tighter.
- Insertion and removal is similar speed to skiplists, maybe a little
  slower, but there's still some fat to be trimmed.
- The code is a bit longer and more complex than the skiplist code.

This was intended to replace the need for the VgHashTable type.  But my
experiments have shown that VgHashTable is really fast, faster than both
AVL trees and skiplists in all but extreme cases (eg. if the hashtable
becomes way too full):  insertion takes constant time, because you always
prepend to chains;  lookup depends on chain length, but the inner loop
is so tight that you need about 20 elements per chain before it gets
worse than the AVL tree;  removal is similar to lookup.  And because
insertion uses prepending, any locality in accesses will help things.  If
VgHashTable had its interface cleaned up to look like OSet's, and was made
to auto-resize when it got too full, it might be a better OSet (although
it's not sorted).

So, it's currently unclear exactly how the AVL tree OSet will be used.
The skiplist could be converted to the new interface (I have a 90%
complete version which I used in the comparison experiments).  If
VgHashTable was converted to the same interface (or as close as
possible) it would make direct comparison of important places (eg.
Memcheck's malloc_lists) simple.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4410
2005-08-14 22:13:00 +00:00
Julian Seward
b101826494 Makefile stuff, partly from Tom, which uses the SVN-externall'd VEX
tree a bit better.  Also, fixes to make 'make dist' include into the
final tarball a minimal but workable subset of the stuff in the VEX
directory.

Note, you must do 'make' or 'make install' before 'make dist' since
otherwise VEX/priv/main/vex_svnversion.h will not exist.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4266
2005-07-26 10:42:57 +00:00
Nicholas Nethercote
61448c507d We have a nice little collection of text files describing various high
level things.  But they're all over the place.  This commits moves
them all to the new docs/internals/ directory, and gives them 
a consistent naming scheme.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4196
2005-07-19 21:46:19 +00:00
Nicholas Nethercote
37a45c37b9 Added a file containing Josef's explanation of Calltree's function
entry/exit tracking.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4176
2005-07-19 03:30:31 +00:00
Nicholas Nethercote
0274f91dfe wibbles
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4173
2005-07-19 00:40:16 +00:00
Dirk Mueller
e674c875f1 remove the version script, doesn't work for executables
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4170
2005-07-18 23:52:10 +00:00
Nicholas Nethercote
fbf8653c8b Removed the remnants of the attempt at an ARM port, because it had
bit-rotted badly and was clogging up the code.

I put the useful remnants in docs/porting-to-ARM in case anyone ever
wants to try porting to ARM again.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4092
2005-07-02 23:13:59 +00:00
Nicholas Nethercote
128115f4df "make dist" fixes from Ralf Wildenhues.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4010
2005-06-24 13:45:56 +00:00
Nicholas Nethercote
f4ee5eee2a Moved Robert's stack tracking code out of m_aspacemgr into a new module
m_stacks, because it's a nicely distinct and stand-alone piece of
functionality.  This happily removes m_aspacemgr's dependence on
m_mallocfree (there was an apparent dependence due to the #include, even if
it didn't manifest itself in practice -- very important!) and m_options (not
so important).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4009
2005-06-24 03:28:30 +00:00
Nicholas Nethercote
82a9510ad7 Rename ume.c/ume.h as m_ume.c/pub_core_ume.h to be consistent with
all the other modules.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3992
2005-06-21 22:47:54 +00:00
Nicholas Nethercote
493731937c Attempt to fix the stage2.lds borkage.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3980
2005-06-21 03:30:51 +00:00
Cerion Armour-Brown
d5f7c8aed3 Finally, valgrind on ppc32.
Plenty still to do, but simple programs like ls seem to run ok

Thanks, Paul, for having your ppc port of valgrind 2.4 to work from!




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3969
2005-06-20 15:51:07 +00:00
Nicholas Nethercote
1b3a92639e Moved VG_(start_debugger) out of m_main.c into its own module,
m_debugger.  This removes the dependence of m_signals.c and m_errormgr.c
on m_main.c.  It required also moving VG_(clexecfd) out of m_main.c;  I put
it in m_libcproc.c which seemed like an ok-but-not-great choice.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3957
2005-06-19 19:25:44 +00:00
Nicholas Nethercote
f174930b23 Final commit for the initial modularisation pass:
- Broke part of m_scheduler off into a new module m_threadstate.  It
  contains ThreadState, VG_(threads)[] and some basic operations on the
  thread table.  All simple stuff, the complex stuff stays in m_scheduler.
  This avoids lots of circular dependencies between m_scheduler and other
  modules.

- Managed to finally remove core.h and tool.h, double hurrah!

- Introduced pub_tool_basics.h and pub_core_basics.h, one of which is
  include by every single C file.

- Lots of little cleanups and changes related to the above.

- I even did a small amount of documentation updating.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3944
2005-06-19 01:24:32 +00:00
Nicholas Nethercote
f4871f2c72 Move CPUID functions into their own module, m_cpuid.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3940
2005-06-18 18:31:26 +00:00
Nicholas Nethercote
a0a6af2854 Make the stage2.lds building platform-independent by not trying to match
an exact address (idea from Paul Mackerras' PPC port).  Thus it could be
moved into coregrind/Makefile.am.

Let me know if this breaks anything on other platforms.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3939
2005-06-18 16:41:30 +00:00
Nicholas Nethercote
6404b199cb Moved call_on_new_stack_0_1 and jump_and_switch_stacks to better places.
This enabled the removal of $ARCH/jmp_with_stack.c, hurrah!


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3938
2005-06-18 15:54:25 +00:00
Nicholas Nethercote
1279058c7c Renamed tool_asm.h as pub_basics_asm.h. Removed core_asm.h.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3931
2005-06-18 04:10:56 +00:00
Nicholas Nethercote
2f407d612c Moved the code trampoline stuff into a new module, m_trampoline. Not
certain this was the right thing to do, but that stuff sure as hell
didn't fit in any of the existing modules.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3929
2005-06-18 03:27:58 +00:00
Nicholas Nethercote
c5a38c663b Created coregrind.h, a counterpart to valgrind.h containing the internal
client requests.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3927
2005-06-18 02:18:04 +00:00
Nicholas Nethercote
b54b42c310 Rename m_syscalls/ as m_syswrap/ to complete the module renaming.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3924
2005-06-17 22:27:21 +00:00
Nicholas Nethercote
626d5c129c Renamed the m_syscalls module m_syswrap, which better describes what it
does and better distinguishes it from m_syscall.  Did everything for this
except renaming the m_syscalls/ directory -- I'll do that shortly, I don't
think Subversion can handle renaming a directory and files within that
directory at the same time.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3923
2005-06-17 22:19:06 +00:00
Nicholas Nethercote
cfbf606ac5 Moved the basic syscall stuff out of m_libcbase.c into a new module
m_syscall.c.  Plus some associated cleanups.

Moved VG_(sigreturn) into m_signals.c and made it local.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3922
2005-06-17 21:31:45 +00:00
Nicholas Nethercote
3ae4d1a0ab A cleanup of the redirection stuff.
- Renamed VG_INTERCEPT as VG_REPLACE_FUNCTION to make its purpose
  clearer.

- Renamed VG_WRAPPER as VG_NOTIFY_ON_LOAD to make its purpose cleare.
  Started calling that stuff "load notification".

- Moved various things into m_redir.c, a much more sensible place for
  them.  This reduced the number of exported functions overall.  Renamed
  intercept_demangle() as Z_decode() as part of this.

- Improved the documentation of this stuff, especially in
  pub_core_redir.c.

- Got --run-libc-freeres=yes working again.  It was doing nothing.

- Renamed vg_inject.so as vg_preload_core.so to match
  vg_preload_<tool>.so

- Renamed vg_intercept.c as vg_preloaded.c.  (I kept the "vg_" prefix
  because this filename can appear in stack traces, so the "vg_" is a
  useful hint for users that it belongs to Valgrind.)

- Removed all the Memcheck-specific calls to add_redirect_sym_to_sym()
  from VG_(setup_redirect_table)(), instead using VG_REPLACE_FUNCTION in
  mac_replace_strmem.c, just like vg_replace_malloc.c.  This is the
  right way to do it.  This required moving some of
  coregrind/pub_core_redir.h into the newly added
  include/pub_tool_redir.h.  add_redirect_sym_to_sym() is no longer
  used...

- Now only handing off symbols to m_redir for inspection/decoding after
  they have been deemed to be interesting by the symbol table reader.

- Factored out commonality between the add_redirect_*_to_* functions
  into add_redirect_X_to_X().

- Added "Zh", meaning '-' ('h' for "hyphen"), to the Z-decoding scheme,
  to handle sonames like "ld-linux-x86-64.so.2".

- Added a FAQ explaining the newly found issue of glibc aliasing 
  sometimes causing the wrong function name to appear in stack traces.

- Added a new regtest strchr.c.  It's possible this will fail on some
  platforms.  If so, an alternative output file can be provided, but
  I'd like to see it in practice first.

It's possible that there will be minor breakage on other
platforms/setups, but it should be minimal and easily fixable.

Plus some ordinary cleanups in symtab.c:

- Removed the old optimisation from VG_(addStr)() whereby it kept track
  of the previous 5 added strings and avoiding duplicating any of them.
  Turns out it was barely having any effect any more, and just
  complicated things.

- Made read_symtab() more readable, by introducing a new variable
  "sym_name" and introducing the auxiliary function
  is_symbol_interesting().

- renamed the module variable 'segInfo' as 'segInfo_list' to make it
  more obvious it's a module variable and not just some ordinary local
  variable (which was an easy mistake to make).

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

XXX: [later] remove add_redirect_sym_to_sym, and everything related to
     X_to_sym?  (ie. only need X_to_addr)

XXX: better function names?  all those 'resolved' names...
     [later...]




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3916
2005-06-16 03:56:58 +00:00
Nicholas Nethercote
1d0e2e6e41 Created m_machine, for various machine-related things.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3903
2005-06-13 04:21:38 +00:00
Nicholas Nethercote
b842a8f27b Moved the last two functions out of linux/core_os.c, and removed it.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3900
2005-06-12 17:26:29 +00:00
Nicholas Nethercote
e3abdc62d5 Finished the modularisation of vg_mylibc.c, which meant it could be removed.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3894
2005-06-12 02:43:17 +00:00
Nicholas Nethercote
82860347b1 Modularised the libc low-level memory management stuff (mmap, etc).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3891
2005-06-11 15:51:30 +00:00
Nicholas Nethercote
0e57f4956f Modularised the thread/pthread modelling stuff.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3877
2005-06-11 01:07:00 +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
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
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
Nicholas Nethercote
02df24345a Modularised vg_signals.c as m_signals.c.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3820
2005-05-31 01:00:08 +00:00
Nicholas Nethercote
d13bacd9cd Modularised vg_main.c as m_main.c. Moved some stuff out of it to reduce the
number of files that depend on it, but there are still some which should be
removed in the future.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3819
2005-05-31 00:23:43 +00:00