Commit Graph

209 Commits

Author SHA1 Message Date
Nicholas Nethercote
b05a2a18d7 This commit merges the BUILD_TWEAKS branch onto the trunk. It has the
following improvements:

- Arch/OS/platform-specific files are now included/excluded via the
  preprocessor, rather than via the build system.  This is more consistent
  (we use the pre-processor for small arch/OS/platform-specific chunks
  within files) and makes the build system much simpler, as the sources for
  all programs are the same on all platforms.

- Vast amounts of cut+paste Makefile.am code has been factored out.  If a
  new platform is implemented, you need to add 11 extra Makefile.am lines.
  Previously it was over 100 lines.

- Vex has been autotoolised.  Dependency checking now works in Vex (no more
  incomplete builds).  Parallel builds now also work.  --with-vex no longer
  works;  it's little use and a pain to support.  VEX/Makefile is still in
  the Vex repository and gets overwritten at configure-time;  it should
  probably be renamed Makefile-gcc to avoid possible problems, such as
  accidentally committing a generated Makefile.  There's a bunch of hacky
  copying to deal with the fact that autotools don't handle same-named files
  in different directories.  Julian plans to rename the files to avoid this
  problem.

- Various small Makefile.am things have been made more standard automake
  style, eg. the use of pkginclude/pkglib prefixes instead of rolling our
  own.

- The existing five top-level Makefile.am include files have been
  consolidated into three.

- Most Makefile.am files now are structured more clearly, with comment
  headers separating sections, declarations relating to the same things next
  to each other, better spacing and layout, etc.

- Removed the unused exp-ptrcheck/tests/x86 directory.

- Renamed some XML files.

- Factored out some duplicated dSYM handling code.

- Split auxprogs/ into auxprogs/ and mpi/, which allowed the resulting
  Makefile.am files to be much more standard.

- Cleaned up m_coredump by merging a bunch of files that had been
  overzealously separated.

The net result is 630 fewer lines of Makefile.am code, or 897 if you exclude
the added Makefile.vex.am, or 997 once the hacky file copying for Vex is
removed.  And the build system is much simpler.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10364
2009-06-24 00:37:09 +00:00
Julian Seward
07e9355969 Fix compile breakage in is_systemish_library_name introduced in r10173.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10188
2009-05-31 19:59:29 +00:00
Julian Seward
b2568db819 is_systemish_library_name: add "/opt" and "/sw" to the list of places
where we shouldn't auto-run dsymutil.  (Luc Bourhis).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10173
2009-05-31 08:31:06 +00:00
Nicholas Nethercote
07045477ca Merge the DARWIN branch onto the trunk.
I tried using 'svn merge' to do the merge but it did a terrible job and
there were bazillions of conflicts.  So instead I just took the diff between
the branch and trunk  at r10155, applied the diff to the trunk, 'svn add'ed
the added files (no files needed to be 'svn remove'd) and committed.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10156
2009-05-28 01:53:07 +00:00
Nicholas Nethercote
f7b44686d5 DARWIN sync: add a comment.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10149
2009-05-25 01:48:32 +00:00
Julian Seward
cd999dd99e Handle DW_CFA_{remember,restore}_state. This requires having a stack
of currently on-the-go register rules, rather than just one.  

gcc doesn't appear to generate these (it's pretty darn obscure), but
they do turn up a piece of handwritten assembly somewhere in the
depths of Python-2.6 on amd64-linux.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10075
2009-05-21 15:33:36 +00:00
Nicholas Nethercote
6ed160c72c DARWIN sync: put conditional compilation alternatives in the usual order.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10003
2009-05-20 02:27:00 +00:00
Nicholas Nethercote
556f397c21 DARWIN sync: comment change.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9998
2009-05-20 02:11:49 +00:00
Nicholas Nethercote
d140d6cb64 DARWIN sync: stabs wibble.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9997
2009-05-20 02:07:56 +00:00
Nicholas Nethercote
7f19e9cb79 Merge r9993, r9995 (comment changes about vg_stat) from the DARWIN branch,
and rename all the vg_stat fields to avoid problems that the old names cause
on Darwin.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9996
2009-05-20 02:02:30 +00:00
Nicholas Nethercote
131ab00744 Merged non-Darwin-specific parts of r9397,r9423,r9490, 9461, 9462 from the
DARWIN branch.  A big ugly DARWIN/trunk sync commit, mostly to do with
changing the representation of SysRes and vki_sigset_t.  Functionality of
the trunk shouldn't be changed by it.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9876
2009-05-18 02:12:08 +00:00
Nicholas Nethercote
0265500df6 Merged r9678 (removed a compile warning) from the DARWIN branch.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9679
2009-04-29 05:39:00 +00:00
Nicholas Nethercote
239c566d12 Add some extra symbol comparisons, based on those from the DARWIN branch.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9677
2009-04-29 05:08:15 +00:00
Julian Seward
7bb3b12036 Comment-only change: add comments pertaining to revs 9329 and 9469,
which were a fix for #185816.  These commits added _debug_{svma,bias}
fields to struct _DebugInfo.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9647
2009-04-27 19:59:10 +00:00
Julian Seward
779bbb61c6 Add support for reading Windows PDB debug info (symbols and line
numbers) when Valgrind is running Wine.  Modified version of a
patch by John Reiser (vgsvn+wine-load-pdb-debuginfo.patch) with
extensions to read a second format of line number tables.

Wine uses a new client request, VG_USERREQ__LOAD_PDB_DEBUGINFO,
to tell Valgrind when to read PDB info.  Wine's implementation
of module loading is vastly different from that used by
ld-linux.so, and it is too difficult to recognize what is going
on just by observing the calls to mmap and mprotect.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9580
2009-04-22 22:42:10 +00:00
Tom Hughes
d3d43abbe5 Handle DW_CFA_same_value opcodes in DWARF CFI data.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9520
2009-04-08 15:06:34 +00:00
Tom Hughes
5007d80b09 Check whether the symbol table is in the main object file or the debug
object file and use that information to decide which svma and bias
values to use when working out what section a symbol refers to.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9469
2009-03-20 10:32:37 +00:00
Nicholas Nethercote
6d714e6abf Tweak the format of stack traces, so they're more consistent.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9437
2009-03-16 22:11:31 +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
Tom Hughes
5df14931d9 Keep track of the svma and bias values for the debug data separately
as they may be different to those for other sections of the ELF file
if we have separated debug information and the main file has been
prelinked since they were split. Fixes bug #185816.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9329
2009-03-09 09:19:03 +00:00
Julian Seward
64b679b95b Get rid of the second argument ("PtrdiffT debug_offset") to
ML_(read_debuginfo_stabs) since it's always equal to di->text_bias.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9294
2009-02-28 21:23:11 +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
01a6838e61 Cleaned up the demangling mess:
- Now more clearly distinguishing between C++-demangling, Z-demangling, and
  below-main renaming, particularly in 'get_sym_name'.
  
- --demangle=no no longer prevents Z-demangling, which makes more sense,
  although it's unlikely to affect anyone.

- Broke the circular dependency between m_demangle and m_debuginfo by moving
  below-main renaming into m_debuginfo.

- Renamed some get_fnname_* functions to make their effect clearer, and
  improved their comments.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9138
2009-02-11 06:06:10 +00:00
Nicholas Nethercote
a8c9970a34 Cleaned up the mess that was the treatment of "below main" functions such as
'__libc_start_main', in Massif, m_debuginfo and m_stacktrace.  As part of
this, --show-below-main is now visible to tools, and Massif pays attention
to it.

Improved the description of --show-below-main=yes in the manual.

Replaced some instances of "__libc_start_main" in the test *.exp files with
"(below main)", which is what will actually be seen.  Also updated
scalar.stderr.exp*, which should make it get closer to actually passing.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9131
2009-02-10 06:48:00 +00:00
Julian Seward
c538f32818 Handle a couple of artefacts produced by icc11: DW_TAG_reference_type
that doesn't have a size, and DW_FORM_ref_addr (assuming my
interpretation of the standard is correct.)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9058
2009-01-25 23:50:32 +00:00
Julian Seward
7f9bff9f46 Handle a couple of artefacts generated by gcc-4.4: DW_OP_reg{0..31}
and DW_OP_const1s.

--> 3_4_BRANCH




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9057
2009-01-25 23:48:31 +00:00
Julian Seward
c72e27c5b0 Accept 'enum' type DIEs that do not have any names; apparently Dwarf2
allows this.  Patch from Nuno Lopes.  #181707.
MERGE TO 3_4_BRANCH


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9055
2009-01-24 01:44:15 +00:00
Julian Seward
2e1b7166fc Fix aix5 build breakage following r9021.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9053
2009-01-24 01:22:51 +00:00
Julian Seward
3825cfb6aa ML_(evaluate_trivial_GX): handle the case
(DW_OP_addr: DW_OP_plus_uconst: ULEB < 128)

This is a really nasty kludge and should be fixed properly.

MERGE TO 3_4_BRANCH (?)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9050
2009-01-24 00:06:13 +00:00
Julian Seward
3a786496c1 Handle the case where a Compilation Unit (CU) (or, really, the CU and
its associated DIEs) occupies less space than stated in the CU's
header.  icc9 appears to produce CUs with this anomaly.  Not handling
the case causes the reader to lose sync at the start of the following
CU, since it hasn't skipped the junk bytes at the end of the current
CU, and it is basically hosed after that.
MERGE TO 3_4_BRANCH (?)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9049
2009-01-24 00:04:28 +00:00
Julian Seward
7e1fd774cc Minor tidyings:
search_all_symtabs: look for data symbols also in .sbss and .rodata
sections.

VG_(seginfo_sect_kind): identify addresses in .sbss sections.

VG_(pp_SectKind): handle missing case Vg_SectGOTPLT

search_all_loctabs, VG_(get_objname), VG_(find_seginfo): augment tests
"di->text_present" with "&& di->text_size > 0" (probably not
necessary, but is clearer, and more consistent in that most places
that look at DebugInfo.text_{size,avma} first perform both of those
tests).



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9029
2009-01-22 21:18:15 +00:00
Tom Hughes
986c69ccf8 Don't worry about an unmapped, zero sized, bss segment. Bug #181594.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9026
2009-01-22 16:53:25 +00:00
Tom Hughes
d298be2664 Accept zero size text segments. Bug #181594.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9025
2009-01-22 15:08:53 +00:00
Tom Hughes
8f774ff30b Handle the rodata and sbss sections and cope with variables that
are in those sections.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9024
2009-01-22 14:14:13 +00:00
Tom Hughes
20abad2fad Bias values should be PtrdiffT now.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9023
2009-01-22 14:02:26 +00:00
Tom Hughes
33a768dabc Removed unused round_Addr_upwards function.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9022
2009-01-22 13:44:03 +00:00
Tom Hughes
4ca0c5f735 Don't assume that all global variables are in the data section - we
now cope with variables in the text, data, sdata and bss sections.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9021
2009-01-22 13:40:12 +00:00
Tom Hughes
0e02b9ee5b Improve detection of where ELF sections have been mapped by taking
the ELF segment table into account when deciding on the mapping
between SVMA and AVMA for a section.

This also allows the BSS kludge to be dropped, as the BSS address is
now correctly determined.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9020
2009-01-22 13:24:06 +00:00
Nicholas Nethercote
5ad1dd61f9 Introduce a new type, PtrdiffT. Replace lots of uses of OffT (all those
that are memory offsets) with PtrdiffT;  OffT should only be used for file
sizes and offsets.

Change Off64T from a ULong to a Long, as it should be.  Replace some uses
of ULong in the address space manager with Off64T to match.

Also add a comment explaining the meanings of the basic types like Addr,
OffT, SizeT, etc.

Also fix the prototype for VG_(pread) -- the last arg is an OffT, not an
Int.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8959
2009-01-15 21:29:24 +00:00
Julian Seward
d4fc363b2f ML_(addDiCfSI)(): truncate DiCfSI's that fall partially but not
entirely inside the r-x mapped area, so that they fall entirely
within the mapped area.  This is necessary in order to avoid
assertion failures later in check_CFSI_related_invariants().



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8877
2008-12-23 20:00:23 +00:00
Julian Seward
ba2ece03b8 This commit subtly changes the meaning of the values obtained via the
stack unwind mechanism (the function VG_(record_ExeContext) et al),
clears up some associated kludges, and makes suppression matching work
more reliably.

Prior to this commit, a stack snapshot contained, at [0], the IP of
the relevant thread, and at all positions [1] and above, the return
addresses for the open calls.

When showing a snapshot to the user (in VG_(apply_StackTrace)), and
searching the stack for stack blocks (in VG_(get_data_description)), 1
is subtracted from positions [1] and above, so as to move these return
addresses back to the last byte of the calling instruction.  This
subtraction is also done even in VG_(get_StackTrace_wrk) itself, in
order to make the stack unwinding work at all.

It turns out that suppression-vs-function-name matching requires the
same hack, and sometimes failed to match suppressions that should
match, because of this self-same problem.

So the commit changes the stack unwinder itself, so that entries [1]
and above point to the last byte of the call instruction, rather than
the return address.  The associated kludges in VG_(apply_StackTrace)
and VG_(get_StackTrace_wrk) are removed, and suppression matching is
observed to work in a case where it failed before.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8818
2008-12-12 13:23:03 +00:00
Julian Seward
09dac86eca Add a new module, m_seqmatch, which does very simple sequence (regexp)
matching, in the function VG_(generic_match).  Patterns to be matched
against may contain only '*'-style wildcards (matches any number of
elements, we don't care what they are), '?' wildcards (matches exactly
one element, we don't care what it is) and literal elements.

It is totally abstractified, in the sense that the pattern and input
arrays may be arrays of anything.  The caller provides enough
information so that VG_(generic_match) can step along both arrays, and
can ask the questions "is this pattern element a '*' ?", "is this
pattern element a '?' ?", and "does this pattern element match an
input element ?".

The existing function VG_(string_match) is reimplemented using
VG_(generic_match), although the ability to escape metacharacters in
the pattern string is removed -- I don't think it was ever used.

In m_errormgr, matching of suppression stacks (including wildcard
"..." lines) against error stacks is re-implemented using
VG_(generic_match).

Further detailed comments are in m_seqmatch.h and pub_tool_seqmatch.h.

A negative side effect is that VG_(string_match) will be much slower
than before, due to the abstractification.  It may be necessary to
reimplement a specialised version later.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8816
2008-12-12 08:07:49 +00:00
Julian Seward
cf588ba40d When trying to establish whether or not debuginfo should be read from
a file, first the mapping permissions _before_ peering at the file's
header, rather than afterwards.  This changes the logic to behave more
like it does in 3.3.x.  Fixes #164669, although really it is all still
rather fragile.  The bug report,
http://bugs.kde.org/show_bug.cgi?id=164669, contains a detailed
explanation.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8747
2008-11-08 15:22:19 +00:00
Julian Seward
1ee7f51214 Rename some local variables called 'index' to something else, to stop
gcc-3.2.2 complaining they shadow some built-in global declaration of
'index'.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8715
2008-10-27 21:42:36 +00:00
Julian Seward
35c28b721f Merge Helgrind from branches/YARD into the trunk. Also includes some
minor changes to make stack unwinding on amd64-linux approximately
twice as fast as it was before.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8707
2008-10-25 16:22:41 +00:00
Julian Seward
e2b15887e6 get_Form_contents: handle DW_FORM_block2.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8701
2008-10-23 11:13:05 +00:00
Julian Seward
2db480e222 Tolerate apparently broken Dwarf3 generated by gcc (GCC) 4.4.0
20081017 (experimental): accept DW_TAG_enumerator with only a
DW_AT_name but no DW_AT_const_value.  This is in violation of the
Dwarf3 standard.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8700
2008-10-23 10:54:40 +00:00
Julian Seward
2d9f215985 Don't assert on icc9 generated Dwarf3.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8696
2008-10-22 15:49:59 +00:00
Julian Seward
1eceb4282b Dwarf3 variable & type reader: use 64-bit numbers throughout to
represent the sizes of types, even on 32-bit hosts, where a type with
a size >= 2^32 is, well, if not meaningless, then at least impossible
to instantiate.  This is of course motivated by reality .. on ppc32
SUSE11.0, the debuginfo for glibc-2.8 appears to contain a declaration
amounting to

  char __EH_FRAME_BEGIN__ [4294967296]

Really.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8683
2008-10-20 16:08:55 +00:00