2868 Commits

Author SHA1 Message Date
David Blaikie
60b9b0d581 Sink DwarfUnit::CURanges into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221161 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-03 16:40:43 +00:00
Oliver Stannard
25f4c35b22 Revert r221150, as it broke sanitizer tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221151 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-03 12:19:03 +00:00
Oliver Stannard
b63d71ef81 Emit .eh_frame with relocations to functions, rather than sections
When LLVM emits DWARF call frame information, it currently creates a local,
section-relative symbol in the code section, which is pointed to by a
relocation on the .eh_frame section. However, for C++ we emit some functions in
section groups, and the SysV ABI has some rules to make it easier to remove
these sections
(http://www.sco.com/developers/gabi/latest/ch4.sheader.html#section_group_rules):

  A symbol table entry with STB_LOCAL binding that is defined relative to one
  of a group's sections, and that is contained in a symbol table section that is
  not part of the group, must be discarded if the group members are discarded.
  References to this symbol table entry from outside the group are not allowed.

This means that we need to use the function symbol for the relocation, not a
temporary symbol.

There was a comment in the code claiming that the local symbol was used to
avoid creating a relocation, but a relocation must be created anyway as the
code and CFI are in different sections.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221150 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-03 12:02:51 +00:00
David Blaikie
c70aecad29 Sink range list handling down from DwarfUnit into its only use, in DwarfCompileUnit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221123 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-03 02:41:49 +00:00
David Blaikie
e8e0fcf1f3 Formatting
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221095 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 08:52:37 +00:00
David Blaikie
67177d320d Add DwarfUnit::isDwoUnit and use it to generalize string creation
Currently we only need to emit skeleton strings into the CU header and
we do this by explicitly calling "addLocalString". With gmlt-in-fission,
we'll be emitting a bunch of other strings from other codepaths where
it's not statically known that these strings will be local or not.

Introduce a virtual function to indicate whether this unit is a DWO unit
or not (I'm not sure if we have a good term for this, the
opposite/alternative to 'skeleton' unit) and use that to generalize the
string emission logic so that strings can be correctly emitted in both
the skeleton and dwo unit when in split dwarf mode.

And to demonstrate that this works, switch the existing special callers
of addLocalString in the skeleton builder to addString - and they still
work. Yay.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221094 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 08:51:37 +00:00
David Blaikie
1fcc568ebb Remove the last mention of LineTablesOnly from DwarfUnit, sinking it into DwarfCompileUnit
This is a useful distinction/invariant/delination to make because
LineTablesOnly mode is never relevant to type units, so it's clear that
we're not doing weird line-tables-only-with-types by making this API
choice.

It also lays the foundations nicely for adding gmlt-like data to fission
skeleton CUs while limiting the effects to CUs and not TUs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221093 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 08:18:06 +00:00
David Blaikie
c28e37e4dd Sink DwarfUnit::applySubprogramAttributesToDefinition into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221092 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 08:09:09 +00:00
David Blaikie
c821f8794d Sink DwarfUnit::addExpr into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221090 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 07:11:55 +00:00
David Blaikie
3c2838f6ad Fix the build from the last commit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221089 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 07:08:12 +00:00
David Blaikie
9aa32f9e1f Sink DwarfUnit::applyVariableAttributes into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221088 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 07:06:51 +00:00
David Blaikie
51af3541a8 Sink DwarfUnit::addLocationList down into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221087 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 07:03:19 +00:00
David Blaikie
1ce60ab99d Sink DwarfUnit::addComplexAddress down into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221086 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 06:58:44 +00:00
David Blaikie
9e4cbe62b1 Push DwarfUnit::addAddress down into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221085 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 06:46:40 +00:00
David Blaikie
f5dd438f80 Sink DwarfUnit::addVariableAddress into DwarfCompileUnit since type units don't have variables
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221084 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 06:37:23 +00:00
David Blaikie
21cd65acf4 DebugInfo: Sink accelerator table lists down (GlobalNames/Types) into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221083 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 06:16:39 +00:00
David Blaikie
5ede09079b Add DwarfUnit::addGlobalType to match DwarfUnit::addGlobalName
(these will shortly become virtual, with a null implementation in
DwarfUnit (since type units don't have accelerator tables in the current
schema) and the current implementation down in DwarfCompileUnit, moving
the actual maps there too)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221082 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 06:06:14 +00:00
David Blaikie
7f0ed39af9 DebugInfo: Refactor index type DIE initialization by rolling it into the accessor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221080 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 03:09:13 +00:00
David Blaikie
91ff6ebef0 Be sure to initialize DwarfCompileUnit::LabelBegin now that it may be skipped in initSection
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221079 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 02:40:26 +00:00
David Blaikie
3ee898c624 Don't bother creating LabelBegin for .dwo units
This would help catch cases where we might otherwise try to reference a
dwo CU label, which would be weird - because without relocations in the
dwo file it's not generally meaningful to talk about the CU offsets
there (or, if it is, we can do so in absolute terms without using a
relocation to compute it).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221078 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 02:26:24 +00:00
David Blaikie
d998d1cc56 Drop DwarfCompileUnit::getLocalLabel* in favor of just mapping through the skeleton explicitly.
Confusing to do this two different ways - I'm not too wedded to either
one, but here goes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221076 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 01:21:43 +00:00
David Blaikie
da53f1e088 Sink DwarfUnit::LabelBegin down into DwarfCompileUnit since that's the only place it's needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221075 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-02 01:21:40 +00:00
David Blaikie
5e8ee21fb6 Sink dwarf unit length emission down into DwarfUnit::emitHeader
This allows the CU label to be emitted only for compile units, as
they're the only ones that need it (so they can be referenced from
pubnames)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221072 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 23:59:23 +00:00
David Blaikie
8ff48760a3 Remove DwarfUnit::LabelEnd in favor of computing the length of the section directly
This was a compile-unit specific label (unused in type units) and seems
unnecessary anyway when we can more easily directly compute the size of
the compile unit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221067 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 23:07:14 +00:00
David Blaikie
33e07581b2 Sink DwarfUnit::SectionSym into DwarfCompileUnit as it's only needed/used there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221062 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 20:06:28 +00:00
David Blaikie
b2dae39d05 Make DwarfCompileUnit::Skeleton more narrowly typed (DwarfCompileUnit* instead of DwarfUnit*) now that it's specific to DwarfCompileUnit anyway.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221060 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 19:26:05 +00:00
David Blaikie
4e35ac1b48 Sink DwarfUnit::Skeleton down into DwarfCompileUnit
Type units no longer have skeletons and it's misleading to be able to
query for a type unit's skeleton (it might incorrectly lead one to
conclude that if a unit doesn't have a skeleton it's not in a .dwo
file... ).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221055 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 18:18:07 +00:00
David Blaikie
153cd65fd4 Sink DwarfDebug::AbstractSPDies down into DwarfFile
This is the first big step to allowing gmlt-like inline scope
information in the skeleton CU. While this commit doesn't change the
functionality, it's only a small step to call
"constructAbstractSubprogramDIE" on both the InfoHolder and the
SkeletonHolder (when in use) and that will at least create the abstract
SP dies in that case, though still not creating the other subprograms.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221051 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 17:21:26 +00:00
David Blaikie
db5d201b2a Remove unused function
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221037 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 01:15:26 +00:00
David Blaikie
b1494f18ec And... fix the build some more.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221036 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 01:15:24 +00:00
David Blaikie
a49cbece54 Just iterate the DwarfCompileUnits rather than trying to filter them out of the list of all units.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221034 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 01:11:19 +00:00
David Blaikie
bf29eb3ad1 Add '*' to auto variable that is a pointer, as per the coding conventions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221033 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 01:03:39 +00:00
David Blaikie
e542d91ee5 Add DwarfCompileUnit::getSkeleton that returns DwarfCompileUnit* to avoid having to cast from DwarfUnit* on every call.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221031 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-01 00:50:34 +00:00
David Blaikie
54a86b37dd Sink some of DwarfDebug::collectDeadVariables down into DwarfCompileUnit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221010 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-31 22:30:30 +00:00
David Blaikie
021153f536 Sink most of DwarfDebug::constructAbstractSubprogramScopeDIE into DwarfCompileUnit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221005 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-31 21:57:02 +00:00
David Blaikie
7d26b99189 Correct assert text from r220923
Noticed in post-commit review by Adrian Prantl.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220967 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-31 16:45:36 +00:00
David Blaikie
5f5c65058b PR21408: Workaround the appearance of duplicate variables due to problems when inlining two calls to the same function from the same call site.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220923 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-30 20:20:11 +00:00
David Blaikie
f9219079ac Minimize the scope of some variables, NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220759 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-28 02:57:26 +00:00
David Blaikie
bcc5753df8 Remove some unnecessary casts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220658 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-26 23:37:04 +00:00
Frederic Riss
ab08da75d7 Sink DwarfUnit::constructImportedEntityDIE into DwarfCompileUnit.
So that it has access to getOrCreateGlobalVariableDIE. If we ever support
decsribing using directive in C++ classes (thus requiring support in type
units), it will certainly use another mechanism anyway.

Differential Revision: http://reviews.llvm.org/D5975

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220594 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 21:31:09 +00:00
David Blaikie
7f6ba1758b DebugInfo: Sink DwarfDebug::ScopeVariables down into DwarfFile
(part of refactoring to allow subprogram emission in both the skeleton
and main units to enable -gmlt-like data to be included in the skeleton
for live inlined backtracing purposes)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220578 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 17:57:34 +00:00
David Blaikie
3ad7d41947 Remove DwarfDebug::FirstCU as it has no use
It was only being used as a flag to identify the lack of debug info from
within endModule - use the section labels for that instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220575 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 17:53:38 +00:00
Timur Iskhodzhanov
92e132a36f Fix PR21189 -- Emit symbol subsection required to debug LLVM-built binaries with VS2012+
Reviewed at http://reviews.llvm.org/D5772

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220544 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 01:27:45 +00:00
David Blaikie
8a5eafb58d DebugInfo: Remove DwarfDebug::addScopeVariable now that it's just a trivial wrapper
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220542 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 00:43:47 +00:00
David Blaikie
991327143f DebugInfo: Remove DwarfDebug::CurrentFnArguments since we have to handle argument ordering of other arguments (abstract arguments) in the same way and already have code for that too.
While refactoring this code I was confused by both the name I had
introduced (addNonArgumentVariable... but it has all this logic to
handle argument numbering and keep things in order?) and by the
redundancy. Seems when I fixed the misordered inlined argument handling,
I didn't realize it was mostly redundant with the argument ordering code
(which I may've also written, I'm not sure). So let's just rely on the
more general case.

The only oddity in output this produces is that it means when we emit
all the variables for the current function, we don't track when we've
finished the argument variables and are about to start the local
variables and insert DW_AT_unspecified_parameters (for varargs
functions) there. Instead it ends up after the local variables, scopes,
etc. But this isn't invalid and doesn't cause DWARF consumers problems
that I know of... so we'll just go with that because it makes the code
nice & simple.

(though, let's see what the buildbots have to say about this - *crosses
fingers*)

There will be some cleanup commits to follow to remove the now trivial
wrappers, etc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220527 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 22:27:50 +00:00
David Blaikie
48ba51a8cd DebugInfo: Sink DwarfDebug::addNonArgumentScopeVariable into DwarfFile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220520 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 22:04:30 +00:00
David Blaikie
78f043e90a DebugInfo: Remove DwarfDebug::addCurrentFnArgument declaration now that it's moved to DwarfFile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220515 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 21:53:17 +00:00
David Blaikie
129ab6c6c5 DebugInfo: Simplify/tidy/correct global variable decl/def emission handling.
This fixes a bug (introduced by fixing the IR emitted from Clang where
the definition of a static member would be scoped within the class,
rather than within its lexical decl context) where the definition of a
static variable would be placed inside a class.

It also improves source fidelity by scoping static class member
definitions inside the lexical decl context in which tehy are written
(eg: namespace n { class foo { static int i; } int foo::i; } - the
definition of 'i' will be within the namespace 'n' in the DWARF output
now).

Lastly, and the original goal, this reduces debug info size slightly
(and makes debug info easier to read, etc) by placing the definitions of
non-member global variables within their namespace, rather than using a
separate namespace-scoped declaration along with a definition at global
scope.

Based on patches and discussion with Frédéric.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220497 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 19:12:43 +00:00
David Blaikie
3d71678283 Remove explicit (void) use of DwarfFile::DD that was accidentally left in r220452.
Caught in post-commit review by Frédéric.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220487 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 16:12:58 +00:00
David Blaikie
87e9d8c051 [DebugInfo] Sink DwarfDebug::addCurrentFnArgument down into DwarfFile.
Variable handling will be sunk into DwarfFile so that abstract variables
and the like can be shared across multiple CUs (to handle cross-CU
inlining, for example).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220453 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 00:16:05 +00:00