Commit Graph

92 Commits

Author SHA1 Message Date
Wolfgang Pieb 29d4d64637 [DWARF][NFC] Refactor a function to return Optional<> instead of bool
Minor refactor of DWARFUnit::getStringOffsetSectionItem().

Differential Revision: https://reviews.llvm.org/D53948


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345776 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-31 21:05:51 +00:00
Wolfgang Pieb daecf945cc [DWARF] Revert r345546: Refactor range list extraction and dumping
This patch caused some internal tests to break which are being investigated.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345687 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-31 01:12:58 +00:00
Wolfgang Pieb 3efd3a74af [DWARF][NFC] Refactor range list extraction and dumping
The purpose of this patch is twofold: 
- Fold pre-DWARF v5 functionality into v5 to eliminate the need for 2 different 
  versions of range list handling. We get rid of DWARFDebugRangelist{.cpp,.h}.
- Templatize the handling of range list tables so that location list handling
  can take advantage of it as well. Location list and range list tables have the 
  same basic layout.

A non-NFC version of this patch was previously submitted with r342218, but it caused
errors with some TSan tests. This patch has no functional changes. The difference to
the non-NFC patch is that there are no changes to rangelist dumping in this patch.

Differential Revision: https://reviews.llvm.org/D53545



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345546 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 22:16:47 +00:00
Wolfgang Pieb d0ae3cb27e [DWARF][NFC] cleanup (mostly leftovers from the implementation of string offsets tables)
Majority of the patch by David Blaikie.

Differential Revision: https://reviews.llvm.org/D53741


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345404 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 17:14:46 +00:00
David Blaikie b8fd9d55db llvm-dwarfdump: Account for skeleton addr_base when dumping addresses in split unit in the same file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345215 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 22:44:54 +00:00
David Blaikie 3a1bc560ac llvm-dwarfdump: Support RLE_addressx and RLE_startx_length in .debug_rnglists
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344835 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-20 06:16:25 +00:00
David Blaikie b5d5e5ebf6 DebugInfo: Use debug_addr for non-dwo addresses in DWARF 5
Putting addresses in the address pool, even with non-fission, can reduce
relocations - reusing the addresses from debug_info and debug_rnglists
(the latter coming soon)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344834 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-20 06:02:15 +00:00
Wolfgang Pieb 3b86c68554 [DWARF] Make llvm-dwarfdump display location lists in a .dwp file correctly. Fixes PR38990.
Considers the index when extracting location lists from a .dwp file.
Majority of the patch by David Blaikie.

Reviewers: dblaikie

Differential revision: https://reviews.llvm.org/D53155


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344807 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-19 19:23:16 +00:00
Jonas Devlieghere 722833d6cb [dwarfdump] Verify compatibility of attribute TAGs.
Verify that DW_AT_specification and DW_AT_abstract_origin reference a
DIE with a compatible tag.

Differential revision: https://reviews.llvm.org/D38719

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342712 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-21 07:49:29 +00:00
Alexander Kornienko d2dad5476b Revert "[DWARF] reposting r342048, which was reverted in r342056 due to buildbot errors. Adjusted 2 test cases for ARM and darwin and fixed a bug with the original change in dsymutil."
This reverts commit r342218. Due to a number of failures under TSAN. An isolated
test case is being worked on.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342399 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-17 15:40:01 +00:00
Wolfgang Pieb dbed722b63 [DWARF] reposting r342048, which was reverted in r342056 due to buildbot
errors.
Adjusted 2 test cases for ARM and darwin and fixed a bug with the original
change in dsymutil.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342218 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-14 09:14:10 +00:00
Wolfgang Pieb 103f07fe70 Reverting r342048, which caused UBSan failures in dsymutil.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342056 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-12 14:40:04 +00:00
Wolfgang Pieb 76d3c908f5 [DWARF] Refactoring range list dumping to fold DWARF v4 functionality into v5 handling
Eliminating some duplication of rangelist dumping code at the expense of
some version-dependent code in dump and extract routines.

Reviewer: dblaikie, JDevlieghere, vleschuk

Differential revision: https://reviews.llvm.org/D51081


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342048 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-12 12:01:19 +00:00
David Blaikie 2da88b084c llvm-symbolizer: Fix bug related to TUs interfering with symbolizing
With the merge of TUs and CUs into a single container, some code that
relied on the CU range having an ordered range of contiguous addresses
(for locating a CU at a given offset) broke. But the units from
debug_info (currently only CUs, but CUs and TUs in DWARFv5) are in a
contiguous sub-range of that container - searching only through that
subrange is still valid & so do that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341889 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-11 02:04:45 +00:00
Victor Leschuk f030fcc4ba [DWARF] Refactor DWARF classes to use unified error reporting. NFC.
DWARF-related classes in lib/DebugInfo/DWARF contained 
duplicating code for creating StringError instances, like:

template <typename... Ts>
static Error createError(char const *Fmt, const Ts &... Vals) {
  std::string Buffer;
  raw_string_ostream Stream(Buffer);
  Stream << format(Fmt, Vals...);
  return make_error<StringError>(Stream.str(), inconvertibleErrorCode());
}

Similar function was placed in Support lib in https://reviews.llvm.org/D49824

This revision makes DWARF classes use this function
instead of their local implementation of it.

Reviewers: aprantl, dblaikie, probinson, wolfgangp, JDevlieghere, jhenderson

Reviewed By: JDevlieghere, jhenderson

Differential Revision: https://reviews.llvm.org/D49964



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340163 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 09:59:08 +00:00
Paul Robinson a42866d162 [DebugInfo/DWARF] [4/4] Unify handling of compile and type units. NFC
This is patch 4 of 4 NFC refactorings to handle type units and compile
units more consistently and with less concern about the object-file
section that they came from.

Patch 4 combines separate DWARFUnitVectors for compile and type units
into a single DWARFUnitVector that contains both.  For now the
implementation distinguishes compile units from type units by putting
all compile units at the front of the vector, reflecting the DWARF v4
distinction between .debug_info and .debug_types sections.  A future
patch will change this to allow the free mixing of unit kinds, as is
specified by DWARF v5.

Differential Revision: https://reviews.llvm.org/D49744

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338633 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 20:54:11 +00:00
Paul Robinson 72eb9b0a58 [DebugInfo/DWARF] [3/4] Rename DWARFUnitSection to DWARFUnitVector. NFC
This is patch 3 of 4 NFC refactorings to handle type units and compile
units more consistently and with less concern about the object-file
section that they came from.

Patch 3 simply renames DWARFUnitSection to DWARFUnitVector, as the
object-file section of a unit is nearly irrelevant now.

Differential Revision: https://reviews.llvm.org/D49743

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338632 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 20:49:44 +00:00
Paul Robinson 2b9857ed4f [DebugInfo/DWARF] [2/4] Type units no longer in a std::deque. NFC
This is patch 2 of 4 NFC refactorings to handle type units and compile
units more consistently and with less concern about the object-file
section that they came from.

Patch 2 takes the existing std::deque<DWARFUnitSection> for type units
and makes it a simple DWARFUnitSection, simplifying the handling of
type units and making it more consistent with compile units.

Differential Revision: https://reviews.llvm.org/D49742

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338629 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 20:46:46 +00:00
Paul Robinson 55a0ed21cd [DebugInfo/DWARF] [1/4] De-templatize DWARFUnitSection. NFC
This is patch 1 of 4 NFC refactorings to handle type units and compile
units more consistently and with less concern about the object-file
section that they came from.

Patch 1 replaces the templated DWARFUnitSection with a non-templated
version. That is, instead of being a SmallVector of pointers to a
specific unit kind, it is not a SmallVector of pointers to the base
class for both type and compile units.  Virtual methods are magic.

Differential Revision: https://reviews.llvm.org/D49741

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338628 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 20:43:47 +00:00
Wolfgang Pieb 7bfb55f7a4 [DWARF v5] Don't report an error when the .debug_rnglists section is empty or non-existent. Fixes PR38297.
Reviewer: JDevlieghere

Differential Revision: https://reviews.llvm.org/D49815
 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337993 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-26 01:12:41 +00:00
Wolfgang Pieb 3e597f45e6 [DWARF v5] Refactor range lists dumping by using a more generic way of handling tables of lists.
The intent is to use it for location list tables as well. Change is almost NFC with the exception
of the spelling of some strings used during dumping (all lowercase now).

Reviewer: JDevlieghere

Differential Revision: https://reviews.llvm.org/D49500



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337763 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-23 22:37:17 +00:00
Fangrui Song adfcff45ee [DebugInfo] Fix getPreviousSibling after r336823
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@336837 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-11 19:09:37 +00:00
Jonas Devlieghere f8497881d6 [DebugInfo] Make children iterator bidirectional
Make the DIE iterator bidirectional so we can move to the previous
sibling of a DIE.

Differential revision: https://reviews.llvm.org/D49173

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@336823 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-11 17:11:11 +00:00
Wolfgang Pieb 5a4174c540 [DWARF] Improved error reporting for range lists.
Errors found processing the DW_AT_ranges attribute are propagated by lower level 
routines and reported by their callers.

Reviewer: JDevlieghere

Differential Revision: https://reviews.llvm.org/D48344



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@335188 91177308-0d34-0410-b5e6-96231b3b80d8
2018-06-20 22:56:37 +00:00
Paul Robinson 04a387aa0f [DWARFv5] Put the DWO ID in its place.
In DWARF v5, the DWO ID is in the (split/skeleton) CU header, not an
attribute on the CU DIE.

This changes the size of those headers, so use the parsed size whenever
we have one, for simplicitly.

Differential Revision: https://reviews.llvm.org/D47158

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333004 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-22 17:27:31 +00:00
Jonas Devlieghere 74157fc710 [DebugInfo] Use absolute addresses in location lists
Rather than relying on the user to do the address calculating in
DW_AT_location we should just dump the absolute address.

rdar://problem/38513870

Differential revision: https://reviews.llvm.org/D47152

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332873 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-21 19:36:54 +00:00
Wolfgang Pieb 02babe8338 Addressing a couple of compiler warnings introduced with r332759.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332766 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-18 20:51:16 +00:00
Wolfgang Pieb a576ca1044 Fixing build error introduced with r332759.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332762 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-18 20:35:13 +00:00
Wolfgang Pieb eab311b661 [DWARF v5] Improved support for .debug_rnglists (consumer). Enables any consumer to
extract DWARF v5 encoded rangelists.

Reviewer: JDevlieghere

Differential Revision: https://reviews.llvm.org/D45549


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332759 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-18 20:12:54 +00:00
Paul Robinson 989920616f [DWARF] Factor out a DWARFUnitHeader class. NFC
Extract information related to a "unit header" from DWARFUnit into a
new DWARFUnitHeader class, and add a DWARFUnit member for the header.
This is one step in the direction of allowing type units in the
.debug_info section for DWARF v5.

Differential Revision: https://reviews.llvm.org/D46707

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332289 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-14 20:32:31 +00:00
Wolfgang Pieb 3dc44a9d48 [DWARF] Fixing a bug in DWARF v5 string offsets tables where the length encoded the contribution
length excluding the table header. Instead it must encode the contribution length minus the length
field itself.

Reviewer: JDevliegehere

Differential Revision: https://reviews.llvm.org/D45922


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332030 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-10 20:02:34 +00:00
David Blaikie df69f1ffbe llvm-symbolizer: Handle function definitions nested within other functions
LLVM always puts function definition DIEs at the top level, but under
some circumstances GCC does not (at least in this case with member
functions of a function-local type).

To ensure that doesn't appear as though the local type's member function
is unduly inlined within the outer function - ensure the inline
discovery DIE parent walk stops at the first DW_TAG_subprogram.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331291 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-01 18:08:45 +00:00
Jonas Devlieghere 0c191c5e26 [DebugInfo] Use WithColor to print errors/warnings
Use the convenience methods from WithColor to consistently print errors
and warnings in libDebugInfo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330092 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-14 22:07:23 +00:00
Rafael Espindola d227a3b47e Handle abbr_offset with relocations.
This is mostly just plumbing to get a DWARFDataExtractor where we
compute abbr_offset so we can use getRelocatedValue.

This is part of PR36793.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328154 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-21 21:31:25 +00:00
Pavel Labath fa49d7da44 DWARF: Unify form size handling code
Summary:
This patch replaces the two switches which are deducing the size of
various forms with a single implementation. I have put the new
implementation into BinaryFormat, to avoid introducing dependencies
between the two independent libraries (DebugInfo and CodeGen) that need
this functionality.

Reviewers: aprantl, JDevlieghere, dblaikie

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D44418

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327486 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-14 09:39:54 +00:00
David Blaikie 232b1a899c Revert "Rewrite the cached map used for locating the most precise DIE among inlined subroutines for a given address."
Seeing some inlining missing in internal uses of symbolizer. I'll work
on a reproduction, tests, improvements & recommit as soon as possible.

(Chandler would like it to be known that this improvement did make
check-llvm 4x faster... - so there's certainly some fairly good
motivation to push on fixing/figuring this out & getting it back in)

This reverts commit r321345.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@324981 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-13 01:52:30 +00:00
Paul Robinson a58b230718 Stop tracking .debug_line_str in DWARFUnit. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323701 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-29 22:02:56 +00:00
Paul Robinson 920b6750b9 [DWARFv5] Support DW_FORM_line_strp in llvm-dwarfdump.
This form is like DW_FORM_strp, but points to .debug_line_str instead
of .debug_str as the string section.  It's intended to be used from
the line-table header, and allows string-pooling of directory and
filenames across compilation units.

Differential Revision: https://reviews.llvm.org/D42553

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323476 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-25 22:02:36 +00:00
Chandler Carruth 45383c8c85 Rewrite the cached map used for locating the most precise DIE among
inlined subroutines for a given address.

This is essentially the hot path of llvm-symbolizer when extracting
inlined frames during symbolization. Previously, we would read every
subprogram and every inlined subroutine, building a std::map across the
entire PC space to the best DIE, and then do only a handful of queries
as we symbolized a backtrace. A huge fraction of the time was spent
building the map itself.

This patch changes it two a two-level system. First, we just build a map
from PC-interval to DWARF subprograms. These are required to be disjoint
and so constructing this is pretty easy. Second, we build a map *just*
for the inlined subroutines within the subprogram containing the query
address. This allows us to look at far fewer DIEs and build a *much*
smaller set of cached maps in the llvm-symbolizer case where only a few
address get symbolized during the entire run.

It also builds both interval maps in a very different way. It constructs
a single flat vector of pairs that maps from offset -> index. The
indices point into collections of DIE objects, but can also be
"tombstones" (-1) to mark gaps. In the case of subprograms, this mostly
just simplifies the data structure a bit. For inlined subroutines,
because we carefully split them as we build the map, we end up in many
cases having no holes and not having to store both start and stop
offsets.

Finally, the PC ranges for the inlined subroutines are compressed into
32-bits by making them relative to the base PC of the outer subprogram.
This means that if you have a single function body with over 2gb of
executable code in it, we will stop mapping address past the first 2gb
of that function into inlined subroutines and just give you the
subprogram. This doesn't seem like a problem. ;]

All of this combines to make llvm-symbolizer *well* over 2x faster for
symbolizing backtraces out of LLVM's unittests. Death-test heavy unit
tests are running >2x faster. I'm still going to look at completely
disabling symbolization there, but figured while I had a good benchmark
we should make symbolization a bit better.

Sadly, the logic to build the flat interval map for the inlined
subroutines is fairly complex. I'm not super happy about this and
welcome any simplifying suggestions.

Huge thanks to Dave Blaikie who helped walk me through what the various
things I needed to do in DWARF to make this work.

Differential Revision: https://reviews.llvm.org/D40987

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321345 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-22 06:41:23 +00:00
Wolfgang Pieb bd4e6fc5e7 [DWARF v5] Rework of string offsets table reader
Reorganizes the DWARF consumer to derive the string offsets table 
contribution's format from the contribution header instead of 
(incorrectly) from the unit's format.

Reviewers: JDevliegehere, aprantl

Differential Revision: https://reviews.llvm.org/D41146
 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321295 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-21 19:38:13 +00:00
Jonas Devlieghere c2c04200c8 Re-land "[dwarfdump] Add -lookup option"
Add the option to lookup an address in the debug information and print
out the file, function, block and line table details.

Differential revision: https://reviews.llvm.org/D38409

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316619 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-25 21:56:41 +00:00
George Rimar db07f4c8a7 [llvm-dwarfdump] - Fix array out of bounds access crash.
This fixes possible out of bound access in
DWARFDie::getFirstChild()
which might happen when .debug_info section is corrupted,
like shown in testcase.

Differential revision: https://reviews.llvm.org/D39185


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316566 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-25 10:23:49 +00:00
Hans Wennborg f8a9b3953b Revert r314817 "[dwarfdump] Add -lookup option"
The test fails on Linux; see follow-up email on the llvm-commits list.

> Add the option to lookup an address in the debug information and print
> out the file, function, block and line table details.
>
> Differential revision: https://reviews.llvm.org/D38409

This also reverts the follow-up r314818:

> [test] Fix llvm-dwarfdump/cmdline.test
>
> Fixes test/tools/llvm-dwarfdump/cmdline.test

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314825 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-03 18:39:13 +00:00
Jonas Devlieghere 05dde13ff8 [dwarfdump] Add -lookup option
Add the option to lookup an address in the debug information and print
out the file, function, block and line table details.

Differential revision: https://reviews.llvm.org/D38409

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314817 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-03 17:10:21 +00:00
David Blaikie b4ea5a3b36 dwarfdump/symbolizer: Avoid loading unneeded CUs from a DWP
When symbolizing large binaries, parsing every CU in a DWP file is a
significant performance penalty. Instead, use the index to only load the
CUs that are needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313659 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-19 18:36:11 +00:00
David Blaikie 7414b5dffd dwarfdump: Delay parsing abbreviations until they're needed
This speeds up dumping specific DIEs by not parsing abbreviations for
units that are not used.

(this is also handy to have in eventually to speed up llvm-symbolizer
for .dwp files, where parsing most of the DWP file can be avoided by
using the index)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313635 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-19 15:13:55 +00:00
George Rimar 5afc1530d6 [DebugInfo] - Fix for lld DWARF parsing of base address selection entries in range lists.
It solves issue of wrong section index evaluating for ranges when
base address is used.

Based on David Blaikie's patch D36097.

Differential revision: https://reviews.llvm.org/D37214

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312477 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-04 10:30:39 +00:00
David Blaikie 61dba579be DebugInfo: Test & handle (differently) non-zero DW_AT_ranges_base
Followup to r309570, fixing it slightly differently (ranges_base and
addr_base should never be read from a DWO file - so there shouldn't be
any issue with 'overriding' the values - conditionalize the code and
assert that the values aren't being overriden).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309879 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-02 20:16:22 +00:00
Benjamin Kramer 645faa5ddf [DebugInfo] Use shrink_to_fit to simplify code. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309683 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-01 14:38:08 +00:00
Benjamin Kramer b673bd159b [DebugInfo] Don't overwrite DWARFUnit fields if the CU DIE doesn't have them.
DIEs are lazily deserialized so it's possible that the DWO CU is created
before the DIE is parsed. DWO shares .debug_addr and .debug_ranges with the
object file so overwriting the offset with 0 will make the CU unusable.

No test case because I couldn't get clang to emit a non-zero range base.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309570 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-31 15:32:39 +00:00