Commit Graph

912 Commits

Author SHA1 Message Date
Timur Iskhodzhanov 4c719cf6c6 Generalize debug info / EH emission in AsmPrinter
llvm-svn: 196270
2013-12-03 12:05:18 +00:00
Eric Christopher be2513e143 Refactor the handling of lexical block and inline scope ranges
into a single function. No functional change.

llvm-svn: 196181
2013-12-03 00:45:59 +00:00
Eric Christopher 0f63d06d64 Make ranges and range lists be a discrete entity that can be located
and emitted per function and CU. Begins coalescing ranges as a first
class entity through debug info. No functional change.

llvm-svn: 196178
2013-12-03 00:45:45 +00:00
David Blaikie 2a80e4426c DebugInfo: Rename generic unit references to "TheU" instead of TheCU now that they might be type units instead of compile units.
CR feedback from Eric Christopher on r196139.

llvm-svn: 196159
2013-12-02 22:09:48 +00:00
David Blaikie 2c86a72331 DebugInfo: Rename DwarfCompileUnit.* to DwarfUnit.* to match their contents.
llvm-svn: 196140
2013-12-02 19:33:15 +00:00
David Blaikie 319a05f78d DebugInfo: Refactor CompileUnit into a Unit baseclass and CompileUnit/TypeUnit derived classes.
Header/cpp file rename to follow immediately - just splitting out the
commits for ease of review/reading to demonstrate that the renaming
changes are entirely mechanical.

llvm-svn: 196139
2013-12-02 19:33:10 +00:00
David Blaikie 3c1d33241c DebugInfo: Type Units: Propagate the correct DW_AT_language into type units.
llvm-svn: 196130
2013-12-02 18:44:29 +00:00
Eric Christopher f52eddf9ca 80-column fixups.
llvm-svn: 195790
2013-11-26 22:23:27 +00:00
David Blaikie fd1eff5a0a DwarfDebug: Include type units in accelerator tables.
Since type units aren't in the CUMap, use the DwarfUnits list to iterate
over units for tasks such as accelerator table building.

llvm-svn: 195776
2013-11-26 19:14:34 +00:00
David Blaikie 9d861bed9b DebugInfo: Pubtypes: Coelesce pubtype registration with accelerator type registration.
It might be possible to eventually use one data structure, but I haven't
looked at the exact criteria used for accelerator tables and pubtypes to
see if there's good reason for the differences between the two or not.

llvm-svn: 195696
2013-11-26 00:15:27 +00:00
David Blaikie 72f1a3ec76 DwarfDebug: Move ownership of CompileUnits into DwarfUnits
This avoids the need for an extra list of SkeletonCUs and associated
cleanup while staging things to be cleaner for further type unit
improvements.

Also hopefully fixes a memory leak introduced in r195166.

llvm-svn: 195536
2013-11-23 01:17:34 +00:00
Eric Christopher 4751d701b7 Refactor DW_AT_ranges handling to use labels for ranges rather than
a non-relocatable number offset.

One fixme to make the ranges as discrete data structures and
have range lists explicitly represented rather than as a list of symbols.

llvm-svn: 195523
2013-11-23 00:05:29 +00:00
Eric Christopher 33ff697cb1 In Dwarf 3 (and Dwarf 2) attributes whose value are offsets into a
section use the form DW_FORM_data4 whilst in Dwarf 4 and later they
use the form DW_FORM_sec_offset.

This patch updates the places where such attributes are generated to
use the appropriate form depending on the Dwarf version. The DIE entries
affected have the following tags:
DW_AT_stmt_list, DW_AT_ranges, DW_AT_location, DW_AT_GNU_pubnames,
DW_AT_GNU_pubtypes, DW_AT_GNU_addr_base, DW_AT_GNU_ranges_base

It also adds a hidden command line option "--dwarf-version=<uint>"
to llc which allows the version of Dwarf to be generated to override
what is specified in the metadata; this makes it possible to update
existing tests to check the debugging information generated for both
Dwarf 4 (the default) and Dwarf 3 using the same metadata.

Patch (slightly modified) by Keith Walker!

llvm-svn: 195391
2013-11-21 23:46:41 +00:00
Eric Christopher 0fe676a243 Constify the DIEs used for pubname and pubtype tables. Propagate
through findAttribute etc.

llvm-svn: 195290
2013-11-21 00:48:22 +00:00
David Blaikie 409dd9c34a DebugInfo: Partial implementation of DWARF type units.
Emit DW_TAG_type_units into the debug_info section using compile unit
headers. This is bogus/unusable by debuggers, but testable and provides
more isolated review.

Subsequent patches will include support for type unit headers and
emission into the debug_types section, as well as comdat grouping the
types based on their hash. Also the CompileUnit type will be renamed
'Unit' and relevant portions pulled out into respective CompileUnit and
TypeUnit types.

llvm-svn: 195166
2013-11-19 23:08:21 +00:00
David Blaikie 2ea848b972 DebugInfo: Constify accelerator table handling, and separate type accelarator insertion in preparation for a second use of this code from type units.
llvm-svn: 195164
2013-11-19 22:51:04 +00:00
Eric Christopher 65132a8c2c Fix comment.
llvm-svn: 195121
2013-11-19 09:11:26 +00:00
Eric Christopher 9a8f5eddad Refactor the section emission code to remove duplicates now that
we can emit various sections in any order.
No functional change.

llvm-svn: 195120
2013-11-19 09:04:50 +00:00
Eric Christopher b4bef6d254 Reformat file.
llvm-svn: 195119
2013-11-19 09:04:36 +00:00
David Blaikie e26a3774c6 DwarfDebug: Move trailing else to the same line as prior closing brace
llvm-svn: 195060
2013-11-18 23:59:04 +00:00
David Blaikie 5af2aca274 DwarfDebug: Remove some more redundant explicit constructions.
llvm-svn: 195059
2013-11-18 23:57:26 +00:00
David Blaikie a781b25ba5 DwarfCompileUnit: Add type safety to createGlobalVariableDIE
llvm-svn: 194979
2013-11-17 21:55:13 +00:00
Eric Christopher d0b82aea8c For dwarf4 use the correct form for referencing debug_loc locations,
and update test cases accordingly.

This doesn't affect the output dumped using llvm-dwarfdump, but
readelf does now dump the debug_loc section.

llvm-svn: 194898
2013-11-16 00:18:40 +00:00
David Blaikie b01f13ecf6 DwarfCompileUnit: Add type safety to CompileUnit::getNode by returning DICompileUnit instead of a raw MDNode*.
llvm-svn: 194895
2013-11-15 23:54:45 +00:00
David Blaikie 5a15240ef7 DwarfCompileUnit: Add type safety by using DICompileUnit rather than raw MDNode* for the CU metadata node
llvm-svn: 194893
2013-11-15 23:52:02 +00:00
David Blaikie 25bc7198b2 DwarfDebug: Push DISubprogram through updateSubprogramScopeDIE
llvm-svn: 194879
2013-11-15 23:13:08 +00:00
David Blaikie 2ad0016e53 DwarfCompileUnit: Push DIDescriptors through a getDIE/insertDIE
llvm-svn: 194875
2013-11-15 23:09:13 +00:00
Eric Christopher 34a2c8718f Use a reference rather than a pointer as we don't expect a NULL
DbgVariable.

No functional change.

llvm-svn: 194761
2013-11-15 01:43:19 +00:00
Eric Christopher fedfa44922 Comment some and reformat for clarity beginFunction.
llvm-svn: 193894
2013-11-01 23:14:17 +00:00
Manman Ren 4dbdc9021d Debug Info: remove duplication of DIEs when a DIE can be shared across CUs.
We add a map in DwarfDebug to map MDNodes that are shareable across CUs to the
corresponding DIEs: MDTypeNodeToDieMap. These DIEs can be shared across CUs,
that is why we keep the maps in DwarfDebug instead of CompileUnit.

We make the assumption that if a DIE is not added to an owner yet, we assume
it belongs to the current CU. Since DIEs for the type system are added to
their owners immediately after creation, and other DIEs belong to the current
CU, the assumption should be true.

A testing case is added to show that we only create a single DIE for a type
MDNode and we use ref_addr to refer to the type DIE.

We also add a testing case to show ref_addr relocations for non-darwin
platforms.

llvm-svn: 193779
2013-10-31 17:54:35 +00:00
David Blaikie 6b288cfa7a DebugInfo: Push header handling down into CompileUnit
This is a preliminary step to handling type units by abstracting over
all (type or compile) units.

llvm-svn: 193714
2013-10-30 20:42:41 +00:00
David Blaikie 2d4e11228b DwarfDebug: Change Abbreviations member from pointer to reference
llvm-svn: 193699
2013-10-30 17:14:24 +00:00
Manman Ren 251a1bd215 Debug Info: code clean up.
Use EmitLabelOffsetDifference for handling on darwin platform when
non-darwin platforms use EmitLabelPlusOffset.

Also fix a bug in EmitLabelOffsetDifference where the size is hard-coded
to 4 even though Size is passed in as an argument.

llvm-svn: 193660
2013-10-29 23:14:15 +00:00
Manman Ren ce20d460e2 Debug Info: support for DW_FORM_ref_addr.
To support ref_addr, we calculate the section offset of a DIE (i.e. offset
of a DIE from beginning of the debug info section). The Offset field in DIE
is currently CU-relative. To calculate the section offset, we add a
DebugInfoOffset field in CompileUnit to store the offset of a CU from beginning
of the debug info section. We set the value in DwarfUnits::computeSizeAndOffset
for each CompileUnit.

A helper function DIE::getCompileUnit is added to return the CU DIE that
the input DIE belongs to. We also add a map CUDieMap in DwarfDebug to help
finding the CU for a given CU DIE.

For a cross-referenced DIE, we first find the CU DIE it belongs to with
getCompileUnit, then we use CUDieMap to get the corresponding CU for the CU DIE.
Adding the section offset of the CU with the CU-relative offset of a DIE gives
us the seciton offset of the DIE.

We correctly emit ref_addr with relocation using EmitLabelPlusOffset when
doesDwarfUseRelocationsAcrossSections is true.

This commit handles the emission of DW_FORM_ref_addr when we have an attribute
with FORM_ref_addr. A follow-on patch will start using ref_addr when adding a
DIEEntry. This commit will be tested and verified in the follow-on patch.

Reviewed off-list by Eric, Thanks.

llvm-svn: 193658
2013-10-29 22:57:10 +00:00
Manman Ren 4a841a86bd Debug Info: use createAndAddDIE to wrap around "new DIE" in DwarfDebug.
This commit ensures DIEs are constructed within a compile unit and
immediately added to their parents.

Reviewed off-list by Eric.

llvm-svn: 193568
2013-10-29 01:03:01 +00:00
David Blaikie 68642d3118 DWARF emission: Remove unnecessary/redundant DIE reference code
The default case at the end of the switch handles this just fine.

llvm-svn: 193374
2013-10-24 22:00:44 +00:00
Eric Christopher b088d2d0bc Update misleading comment.
llvm-svn: 193371
2013-10-24 21:05:08 +00:00
David Blaikie 2aee7be871 DIEHash: Const correct and use references where non-null/non-rebound.
llvm-svn: 193363
2013-10-24 18:29:03 +00:00
Manman Ren 642a0acce2 Debug Info: code clean up.
Remove unnecessary creation of LexicalScope in collectDeadVariables.
The created LexicialScope was only used to get isAbstractScope, which
should be false from the creation:
"new LexicalScope(NULL, DIDescriptor(SP), NULL, false);".

We can also remove a DenseMap that holds the created LexicalScopes.

llvm-svn: 193196
2013-10-22 20:59:19 +00:00
Eric Christopher c798d8ad0a Formatting/whitespace.
llvm-svn: 193135
2013-10-22 00:22:39 +00:00
David Blaikie f244319cac DebugInfo: Put each kind of constant (form, attribute, tag, etc) into its own enum for ease of use.
This allows various variables to be more self-documenting and easier to
debug by being of specific types without overlapping enum values.

Precommit review by Eric Christopher.

llvm-svn: 193091
2013-10-21 17:28:37 +00:00
Eric Christopher 4d964a517f Revert the rest of r192749 to bring back the buildbot. These two
error messages should not be able to occur at the same time.

llvm-svn: 192985
2013-10-18 16:56:48 +00:00
Eric Christopher ffbc4decc2 Temporarily revert r192749 as it is causing problems for LTO and
requires a more in depth change to the IR structure.

llvm-svn: 192938
2013-10-18 01:57:30 +00:00
Eric Christopher 2c8b7907c3 According to the dwarf standard pubnames and pubtypes for languages
like C++ should be the fully qualified names for the type.

Add a routine that does a language specific context walk to build
up the qualified name and use it when we add types/names to the
tables. Expand the gnu pubnames testcase as it's the most complex
to make sure that qualified types are also being added.

llvm-svn: 192865
2013-10-17 02:06:06 +00:00
Eric Christopher d2b497b522 Fix a pair of bugs in the emission of pubname tables:
1) Make sure we emit static member variables by checking
at the end of createGlobalVariableDIE rather than piecemeal
in the function.
(As a note, createGlobalVariableDIE needs rewriting.)

2) Make sure we use the definition rather than declaration DIE
for two things: a) determining linkage for gnu pubnames, and b)
as the address of the DIE for global variables.
(As a note, createGlobalVariableDIE really needs rewriting.)

Adjust the testcase to make sure we're checking the correct DIEs.

llvm-svn: 192761
2013-10-16 01:37:49 +00:00
Eric Christopher a6c38a32a9 Make sure we're not attempting to construct a subprogram DIE
twice and just look up the value. Fix the one case where
we were trying to create a subprogram DIE and we should already
have had one. Reflow formatting in collectDeadVariables while fixing.

llvm-svn: 192749
2013-10-15 23:31:38 +00:00
Adrian Prantl 5bf1d0093b Remove some dead code. (DarwinGDBCompat was retired in r189903).
llvm-svn: 192731
2013-10-15 20:26:37 +00:00
Manman Ren 4c4b69c9c8 Debug Info: remove form from function addDIEEntry.
The form must be a reference form in addDIEEntry. Which reference form to
use will be decided by the callee.

No functionality change.

llvm-svn: 192517
2013-10-11 23:58:05 +00:00
Manman Ren c50fa1114b Debug Info: In DIBuilder, the context field of subprogram is updated to use
DIScopeRef.

A paired commit at clang is required due to changes to DIBuilder.

llvm-svn: 192378
2013-10-10 18:40:01 +00:00
Manman Ren be5576f5f6 Add DbgVariable::resolve per Eric's suggestion.
llvm-svn: 192218
2013-10-08 19:07:44 +00:00