diff options
author | Pavel Labath <labath@google.com> | 2018-07-25 15:33:32 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-07-25 15:33:32 +0000 |
commit | 78ab659bb41296a47f8793614e9ac44cfe55aaa6 (patch) | |
tree | e40783dd8fc30b279c3825881761bfbb5d154e19 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 03772dd87b4826c16ee46920241fab3f747dfca7 (diff) | |
download | bcm5719-llvm-78ab659bb41296a47f8793614e9ac44cfe55aaa6.tar.gz bcm5719-llvm-78ab659bb41296a47f8793614e9ac44cfe55aaa6.zip |
dwarfgen: Add support for generating the debug_str_offsets section, take 2
This recommits r337910 after fixing an "ambiguous call to addAttribute"
error with some compilers (gcc circa 4.9 and MSVC). It seems that these
compilers will consider a "false -> pointer" conversion during overload
resolution. This creates ambiguity because one I added an overload which
takes a MCExpr * as an argument.
I fix this by making the new overload take MCExpr&, which avoids the
conversion. It also documents the fact that we expect a valid MCExpr
object.
Original commit message follows:
The motivation for this is D49493, where we'd like to test details of
debug_str_offsets behavior which is difficult to trigger from a
traditional test.
This adds the plubming necessary for dwarfgen to generate this section.
The more interesting changes are:
- I've moved emitStringOffsetsTableHeader function from DwarfFile to
DwarfStringPool, so I can generate the section header more easily from
the unit test.
- added a new addAttribute overload taking an MCExpr*. This is used to
generate the DW_AT_str_offsets_base, which links a compile unit to the
offset table.
I've also added a basic test for reading and writing DW_form_strx forms.
Reviewers: dblaikie, JDevlieghere, probinson
Subscribers: llvm-commits, aprantl
Differential Revision: https://reviews.llvm.org/D49670
llvm-svn: 337933
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index f1e61b488a2..d2f123ce78e 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1506,8 +1506,9 @@ void DwarfDebug::emitAbbreviations() { void DwarfDebug::emitStringOffsetsTableHeader() { DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; - Holder.emitStringOffsetsTableHeader( - Asm->getObjFileLowering().getDwarfStrOffSection()); + Holder.getStringPool().emitStringOffsetsTableHeader( + *Asm, Asm->getObjFileLowering().getDwarfStrOffSection(), + Holder.getStringOffsetsStartSym()); } template <typename AccelTableT> @@ -2292,8 +2293,9 @@ void DwarfDebug::emitDebugLineDWO() { void DwarfDebug::emitStringOffsetsTableHeaderDWO() { assert(useSplitDwarf() && "No split dwarf?"); - InfoHolder.emitStringOffsetsTableHeader( - Asm->getObjFileLowering().getDwarfStrOffDWOSection()); + InfoHolder.getStringPool().emitStringOffsetsTableHeader( + *Asm, Asm->getObjFileLowering().getDwarfStrOffDWOSection(), + InfoHolder.getStringOffsetsStartSym()); } // Emit the .debug_str.dwo section for separated dwarf. This contains the |