[llvm] r337924 - Revert "dwarfgen: Add support for generating the debug_str_offsets section"

Pavel Labath via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 25 08:35:19 PDT 2018


Done in r337933, thanks.
On Wed, 25 Jul 2018 at 16:23, <paul.robinson at sony.com> wrote:
>
>
>
> > -----Original Message-----
> > From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf
> > Of Pavel Labath via llvm-commits
> > Sent: Wednesday, July 25, 2018 8:52 AM
> > To: llvm-commits at lists.llvm.org
> > Subject: [llvm] r337924 - Revert "dwarfgen: Add support for generating the
> > debug_str_offsets section"
> >
> > Author: labath
> > Date: Wed Jul 25 05:52:30 2018
> > New Revision: 337924
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=337924&view=rev
> > Log:
> > Revert "dwarfgen: Add support for generating the debug_str_offsets
> > section"
> >
> > This reverts commit r337910 as it's generating "ambiguous call to
> > addAttribute" errors on some bots.
> >
> > Will resubmit once I get a chance to look into the problem.
> >
> > Modified:
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.h
> >     llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
> >     llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
> >     llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.h
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=337924&r1=337
> > 923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Jul 25 05:52:30
> > 2018
> > @@ -1506,9 +1506,8 @@ void DwarfDebug::emitAbbreviations() {
> >
> >  void DwarfDebug::emitStringOffsetsTableHeader() {
> >    DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
> > -  Holder.getStringPool().emitStringOffsetsTableHeader(
> > -      *Asm, Asm->getObjFileLowering().getDwarfStrOffSection(),
> > -      Holder.getStringOffsetsStartSym());
> > +  Holder.emitStringOffsetsTableHeader(
> > +      Asm->getObjFileLowering().getDwarfStrOffSection());
> >  }
> >
> >  template <typename AccelTableT>
> > @@ -2293,9 +2292,8 @@ void DwarfDebug::emitDebugLineDWO() {
> >
> >  void DwarfDebug::emitStringOffsetsTableHeaderDWO() {
> >    assert(useSplitDwarf() && "No split dwarf?");
> > -  InfoHolder.getStringPool().emitStringOffsetsTableHeader(
> > -      *Asm, Asm->getObjFileLowering().getDwarfStrOffDWOSection(),
> > -      InfoHolder.getStringOffsetsStartSym());
> > +  InfoHolder.emitStringOffsetsTableHeader(
> > +      Asm->getObjFileLowering().getDwarfStrOffDWOSection());
> >  }
> >
> >  // Emit the .debug_str.dwo section for separated dwarf. This contains the
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp?rev=337924&r1=3379
> > 23&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp Wed Jul 25 05:52:30
> > 2018
> > @@ -28,6 +28,26 @@ void DwarfFile::addUnit(std::unique_ptr<
> >    CUs.push_back(std::move(U));
> >  }
> >
> > +void DwarfFile::emitStringOffsetsTableHeader(MCSection *Section) {
> > +  if (StrPool.empty())
> > +    return;
> > +  Asm->OutStreamer->SwitchSection(Section);
> > +  unsigned EntrySize = 4;
> > +  // FIXME: DWARF64
> > +  // We are emitting the header for a contribution to the string offsets
> > +  // table. The header consists of an entry with the contribution's
> > +  // size (not including the size of the length field), the DWARF version
> > and
> > +  // 2 bytes of padding.
> > +  Asm->emitInt32(StrPool.size() * EntrySize + 4);
> > +  Asm->emitInt16(Asm->getDwarfVersion());
> > +  Asm->emitInt16(0);
> > +  // Define the symbol that marks the start of the contribution. It is
> > +  // referenced by most unit headers via DW_AT_str_offsets_base.
> > +  // Split units do not use the attribute.
> > +  if (StringOffsetsStartSym)
> > +    Asm->OutStreamer->EmitLabel(StringOffsetsStartSym);
> > +}
> > +
> >  // Emit the various dwarf units to the unit section USection with
> >  // the abbreviations going into ASection.
> >  void DwarfFile::emitUnits(bool UseOffsets) {
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h?rev=337924&r1=337923
> > &r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h Wed Jul 25 05:52:30 2018
> > @@ -91,6 +91,9 @@ public:
> >    /// Add a unit to the list of CUs.
> >    void addUnit(std::unique_ptr<DwarfCompileUnit> U);
> >
> > +  /// Emit the string table offsets header.
> > +  void emitStringOffsetsTableHeader(MCSection *Section);
> > +
> >    /// Emit all of the units to the section listed with the given
> >    /// abbreviation section.
> >    void emitUnits(bool UseOffsets);
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp?rev=337924&r
> > 1=337923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp Wed Jul 25
> > 05:52:30 2018
> > @@ -39,28 +39,6 @@ DwarfStringPool::EntryRef DwarfStringPoo
> >    return EntryRef(*I.first);
> >  }
> >
> > -void DwarfStringPool::emitStringOffsetsTableHeader(AsmPrinter &Asm,
> > -                                                   MCSection *Section,
> > -                                                   MCSymbol *StartSym) {
> > -  if (empty())
> > -    return;
> > -  Asm.OutStreamer->SwitchSection(Section);
> > -  unsigned EntrySize = 4;
> > -  // FIXME: DWARF64
> > -  // We are emitting the header for a contribution to the string offsets
> > -  // table. The header consists of an entry with the contribution's
> > -  // size (not including the size of the length field), the DWARF version
> > and
> > -  // 2 bytes of padding.
> > -  Asm.emitInt32(size() * EntrySize + 4);
> > -  Asm.emitInt16(Asm.getDwarfVersion());
> > -  Asm.emitInt16(0);
> > -  // Define the symbol that marks the start of the contribution. It is
> > -  // referenced by most unit headers via DW_AT_str_offsets_base.
> > -  // Split units do not use the attribute.
> > -  if (StartSym)
> > -    Asm.OutStreamer->EmitLabel(StartSym);
> > -}
> > -
> >  void DwarfStringPool::emit(AsmPrinter &Asm, MCSection *StrSection,
> >                             MCSection *OffsetSection, bool
> > UseRelativeOffsets) {
> >    if (Pool.empty())
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.h
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.h?rev=337924&r1=
> > 337923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.h (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.h Wed Jul 25
> > 05:52:30 2018
> > @@ -19,7 +19,6 @@ namespace llvm {
> >
> >  class AsmPrinter;
> >  class MCSection;
> > -class MCSymbol;
> >
> >  // Collection of strings for this unit and assorted symbols.
> >  // A String->Symbol mapping of strings used by indirect
> > @@ -37,9 +36,6 @@ public:
> >
> >    DwarfStringPool(BumpPtrAllocator &A, AsmPrinter &Asm, StringRef
> > Prefix);
> >
> > -  void emitStringOffsetsTableHeader(AsmPrinter &Asm, MCSection
> > *OffsetSection,
> > -                                    MCSymbol *StartSym);
> > -
> >    void emit(AsmPrinter &Asm, MCSection *StrSection,
> >              MCSection *OffsetSection = nullptr,
> >              bool UseRelativeOffsets = false);
> >
> > Modified: llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp?rev=33
> > 7924&r1=337923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp (original)
> > +++ llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp Wed Jul 25
> > 05:52:30 2018
> > @@ -67,23 +67,12 @@ void TestAllForms() {
> >    const uint32_t Dwarf32Values[] = {1, 2, 3, 4, 5, 6, 7, 8};
> >    const char *StringValue = "Hello";
> >    const char *StrpValue = "World";
> > -  const char *StrxValue = "Indexed";
> > -  const char *Strx1Value = "Indexed1";
> > -  const char *Strx2Value = "Indexed2";
> > -  const char *Strx3Value = "Indexed3";
> > -  const char *Strx4Value = "Indexed4";
> >
> >    auto ExpectedDG = dwarfgen::Generator::create(Triple, Version);
> >    ASSERT_THAT_EXPECTED(ExpectedDG, Succeeded());
> >    dwarfgen::Generator *DG = ExpectedDG.get().get();
> >    dwarfgen::CompileUnit &CU = DG->addCompileUnit();
> >    dwarfgen::DIE CUDie = CU.getUnitDIE();
> > -
> > -  if (Version >= 5)
> > -    CUDie.addAttribute(dwarf::DW_AT_str_offsets_base,
> > dwarf::DW_FORM_sec_offset,
> > -                       MCSymbolRefExpr::create(DG-
> > >getStringOffsetsStartSym(),
> > -                                               *DG->getMCContext()));
> > -
> >    uint16_t Attr = DW_AT_lo_user;
> >
> >    //---------------------------------------------------------------------
> > -
> > @@ -133,19 +122,6 @@ void TestAllForms() {
> >    const auto Attr_DW_FORM_string = static_cast<dwarf::Attribute>(Attr++);
> >    CUDie.addAttribute(Attr_DW_FORM_string, DW_FORM_string, StringValue);
> >
> > -  const auto Attr_DW_FORM_strx = static_cast<dwarf::Attribute>(Attr++);
> > -  const auto Attr_DW_FORM_strx1 = static_cast<dwarf::Attribute>(Attr++);
> > -  const auto Attr_DW_FORM_strx2 = static_cast<dwarf::Attribute>(Attr++);
> > -  const auto Attr_DW_FORM_strx3 = static_cast<dwarf::Attribute>(Attr++);
> > -  const auto Attr_DW_FORM_strx4 = static_cast<dwarf::Attribute>(Attr++);
> > -  if (Version >= 5) {
> > -    CUDie.addAttribute(Attr_DW_FORM_strx, DW_FORM_strx, StrxValue);
> > -    CUDie.addAttribute(Attr_DW_FORM_strx1, DW_FORM_strx1, Strx1Value);
> > -    CUDie.addAttribute(Attr_DW_FORM_strx2, DW_FORM_strx2, Strx2Value);
> > -    CUDie.addAttribute(Attr_DW_FORM_strx3, DW_FORM_strx3, Strx3Value);
> > -    CUDie.addAttribute(Attr_DW_FORM_strx4, DW_FORM_strx4, Strx4Value);
> > -  }
> > -
> >    const auto Attr_DW_FORM_strp = static_cast<dwarf::Attribute>(Attr++);
> >    CUDie.addAttribute(Attr_DW_FORM_strp, DW_FORM_strp, StrpValue);
> >
> > @@ -305,33 +281,11 @@ void TestAllForms() {
> >    //---------------------------------------------------------------------
> > -
> >    auto ExtractedStringValue = toString(DieDG.find(Attr_DW_FORM_string));
> >    EXPECT_TRUE((bool)ExtractedStringValue);
> > -  EXPECT_STREQ(StringValue, *ExtractedStringValue);
> > -
> > -  if (Version >= 5) {
> > -    auto ExtractedStrxValue = toString(DieDG.find(Attr_DW_FORM_strx));
> > -    EXPECT_TRUE((bool)ExtractedStrxValue);
> > -    EXPECT_STREQ(StrxValue, *ExtractedStrxValue);
> > -
> > -    auto ExtractedStrx1Value = toString(DieDG.find(Attr_DW_FORM_strx1));
> > -    EXPECT_TRUE((bool)ExtractedStrx1Value);
> > -    EXPECT_STREQ(Strx1Value, *ExtractedStrx1Value);
> > -
> > -    auto ExtractedStrx2Value = toString(DieDG.find(Attr_DW_FORM_strx2));
> > -    EXPECT_TRUE((bool)ExtractedStrx2Value);
> > -    EXPECT_STREQ(Strx2Value, *ExtractedStrx2Value);
> > -
> > -    auto ExtractedStrx3Value = toString(DieDG.find(Attr_DW_FORM_strx3));
> > -    EXPECT_TRUE((bool)ExtractedStrx3Value);
> > -    EXPECT_STREQ(Strx3Value, *ExtractedStrx3Value);
> > -
> > -    auto ExtractedStrx4Value = toString(DieDG.find(Attr_DW_FORM_strx4));
> > -    EXPECT_TRUE((bool)ExtractedStrx4Value);
> > -    EXPECT_STREQ(Strx4Value, *ExtractedStrx4Value);
> > -  }
> > +  EXPECT_TRUE(strcmp(StringValue, *ExtractedStringValue) == 0);
> >
> >    auto ExtractedStrpValue = toString(DieDG.find(Attr_DW_FORM_strp));
> >    EXPECT_TRUE((bool)ExtractedStrpValue);
> > -  EXPECT_STREQ(StrpValue, *ExtractedStrpValue);
> > +  EXPECT_TRUE(strcmp(StrpValue, *ExtractedStrpValue) == 0);
> >
> >    //---------------------------------------------------------------------
> > -
> >    // Test reference forms
> >
> > Modified: llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.cpp?rev=337924
> > &r1=337923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.cpp (original)
> > +++ llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.cpp Wed Jul 25
> > 05:52:30 2018
> > @@ -54,36 +54,16 @@ void dwarfgen::DIE::addAttribute(uint16_
> >  }
> >
> >  void dwarfgen::DIE::addAttribute(uint16_t A, dwarf::Form Form,
> > -                                 const MCExpr *Expr) {
> > -  auto &DG = CU->getGenerator();
> > -  Die->addValue(DG.getAllocator(), static_cast<dwarf::Attribute>(A),
> > Form,
> > -                DIEExpr(Expr));
> > -}
> > -
> > -void dwarfgen::DIE::addAttribute(uint16_t A, dwarf::Form Form,
> >                                   StringRef String) {
> >    auto &DG = CU->getGenerator();
> > -  switch (Form) {
> > -  case DW_FORM_string:
> > +  if (Form == DW_FORM_string) {
> >      Die->addValue(DG.getAllocator(), static_cast<dwarf::Attribute>(A),
> > Form,
> >                    new (DG.getAllocator())
> >                        DIEInlineString(String, DG.getAllocator()));
> > -    break;
> > -
> > -  case DW_FORM_strp:
> > -  case DW_FORM_GNU_str_index:
> > -  case DW_FORM_strx:
> > -  case DW_FORM_strx1:
> > -  case DW_FORM_strx2:
> > -  case DW_FORM_strx3:
> > -  case DW_FORM_strx4:
> > +  } else {
> >      Die->addValue(
> >          DG.getAllocator(), static_cast<dwarf::Attribute>(A), Form,
> >          DIEString(DG.getStringPool().getEntry(*DG.getAsmPrinter(),
> > String)));
> > -    break;
> > -
> > -  default:
> > -    llvm_unreachable("Unhandled form!");
> >    }
> >  }
> >
> > @@ -447,7 +427,6 @@ llvm::Error dwarfgen::Generator::init(Tr
> >    Asm->setDwarfVersion(Version);
> >
> >    StringPool = llvm::make_unique<DwarfStringPool>(Allocator, *Asm,
> > StringRef());
> > -  StringOffsetsStartSym = Asm->createTempSymbol("str_offsets_base");
> >
> >    return Error::success();
> >  }
> > @@ -469,12 +448,7 @@ StringRef dwarfgen::Generator::generate(
> >      CU->setLength(CUOffset - 4);
> >    }
> >    Abbreviations.Emit(Asm.get(), MOFI->getDwarfAbbrevSection());
> > -
> > -  StringPool->emitStringOffsetsTableHeader(*Asm, MOFI-
> > >getDwarfStrOffSection(),
> > -                                           StringOffsetsStartSym);
> > -  StringPool->emit(*Asm, MOFI->getDwarfStrSection(),
> > -                   MOFI->getDwarfStrOffSection());
> > -
> > +  StringPool->emit(*Asm, MOFI->getDwarfStrSection());
> >    MS->SwitchSection(MOFI->getDwarfInfoSection());
> >    for (auto &CU : CompileUnits) {
> >      uint16_t Version = CU->getVersion();
> >
> > Modified: llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.h
> > URL: http://llvm.org/viewvc/llvm-
> > project/llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.h?rev=337924&r
> > 1=337923&r2=337924&view=diff
> > ==========================================================================
> > ====
> > --- llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.h (original)
> > +++ llvm/trunk/unittests/DebugInfo/DWARF/DwarfGenerator.h Wed Jul 25
> > 05:52:30 2018
> > @@ -89,14 +89,6 @@ public:
> >    /// \param U the unsigned integer to encode.
> >    void addAttribute(uint16_t Attr, dwarf::Form Form, uint64_t U);
> >
> > -  /// Add an attribute value to be encoded as a DIEExpr
> > -  ///
> > -  /// \param Attr a dwarf::Attribute enumeration value or any uint16_t
> > that
> > -  /// represents a user defined DWARF attribute.
> > -  /// \param Form the dwarf::Form to use when encoding the attribute.
> > -  /// \param Expr the MC expression used to compute the value
> > -  void addAttribute(uint16_t Attr, dwarf::Form Form, const MCExpr *Expr);
>
> On my box, the ambiguous overload diagnostic is pointing to
>
>     CUDie.addAttribute(Attr_DW_FORM_flag_false, DW_FORM_flag, false);
>
> which presumably used to be unambiguous, but if 'false' promotes to '0'
> then it could be a null pointer, making this new overload a candidate.
> If you can make the new overload take a reference instead of a pointer
> that should take care of it.
> --paulr
>
> > -
> >    /// Add an attribute value to be encoded as a DIEString or
> > DIEInlinedString.
> >    ///
> >    /// \param Attr a dwarf::Attribute enumeration value or any uint16_t
> > that
> > @@ -250,8 +242,6 @@ class Generator {
> >    std::vector<std::unique_ptr<LineTable>> LineTables;
> >    DIEAbbrevSet Abbreviations;
> >
> > -  MCSymbol *StringOffsetsStartSym;
> > -
> >    SmallString<4096> FileBytes;
> >    /// The stream we use to generate the DWARF into as an ELF file.
> >    std::unique_ptr<raw_svector_ostream> Stream;
> > @@ -303,7 +293,6 @@ public:
> >    MCContext *getMCContext() const { return MC.get(); }
> >    DIEAbbrevSet &getAbbrevSet() { return Abbreviations; }
> >    DwarfStringPool &getStringPool() { return *StringPool; }
> > -  MCSymbol *getStringOffsetsStartSym() const { return
> > StringOffsetsStartSym; }
> >
> >    /// Save the generated DWARF file to disk.
> >    ///
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list