aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/ObjectYAML/DWARFYAML.h7
-rw-r--r--llvm/lib/ObjectYAML/DWARFEmitter.cpp27
-rw-r--r--llvm/lib/ObjectYAML/DWARFYAML.cpp29
-rw-r--r--llvm/lib/ObjectYAML/ELFEmitter.cpp2
-rw-r--r--llvm/test/ObjectYAML/MachO/DWARF-debug_abbrev.yaml71
-rw-r--r--llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml227
-rw-r--r--llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml3
-rw-r--r--llvm/test/tools/yaml2obj/ELF/DWARF/debug-abbrev.yaml25
-rw-r--r--llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml114
-rw-r--r--llvm/tools/obj2yaml/dwarf2yaml.cpp10
-rw-r--r--llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp1
11 files changed, 18 insertions, 498 deletions
diff --git a/llvm/include/llvm/ObjectYAML/DWARFYAML.h b/llvm/include/llvm/ObjectYAML/DWARFYAML.h
index 005936d..a37cfd8 100644
--- a/llvm/include/llvm/ObjectYAML/DWARFYAML.h
+++ b/llvm/include/llvm/ObjectYAML/DWARFYAML.h
@@ -21,7 +21,6 @@
#include "llvm/ObjectYAML/YAML.h"
#include "llvm/Support/YAMLTraits.h"
#include <cstdint>
-#include <unordered_map>
#include <vector>
namespace llvm {
@@ -41,7 +40,6 @@ struct Abbrev {
};
struct AbbrevTable {
- Optional<uint64_t> ID;
std::vector<Abbrev> Table;
};
@@ -112,7 +110,6 @@ struct Unit {
uint16_t Version;
Optional<uint8_t> AddrSize;
llvm::dwarf::UnitType Type; // Added in DWARF 5
- Optional<uint64_t> AbbrevTableID;
yaml::Hex64 AbbrOffset;
std::vector<Entry> Entries;
};
@@ -231,10 +228,6 @@ struct Data {
bool isEmpty() const;
SetVector<StringRef> getNonEmptySectionNames() const;
- Expected<uint64_t> getAbbrevTableIndexByID(uint64_t ID) const;
-
-private:
- mutable std::unordered_map<uint64_t, uint64_t> AbbrevTableID2Index;
};
} // end namespace DWARFYAML
diff --git a/llvm/lib/ObjectYAML/DWARFEmitter.cpp b/llvm/lib/ObjectYAML/DWARFEmitter.cpp
index c932337..682969a 100644
--- a/llvm/lib/ObjectYAML/DWARFEmitter.cpp
+++ b/llvm/lib/ObjectYAML/DWARFEmitter.cpp
@@ -246,8 +246,7 @@ Error DWARFYAML::emitDebugGNUPubtypes(raw_ostream &OS, const Data &DI) {
/*IsGNUStyle=*/true);
}
-static Expected<uint64_t> writeDIE(const DWARFYAML::Data &DI, uint64_t CUIndex,
- uint64_t AbbrevTableID,
+static Expected<uint64_t> writeDIE(ArrayRef<DWARFYAML::AbbrevTable> AbbrevTable,
const dwarf::FormParams &Params,
const DWARFYAML::Entry &Entry,
raw_ostream &OS, bool IsLittleEndian) {
@@ -257,15 +256,12 @@ static Expected<uint64_t> writeDIE(const DWARFYAML::Data &DI, uint64_t CUIndex,
if (AbbrCode == 0 || Entry.Values.empty())
return OS.tell() - EntryBegin;
- Expected<uint64_t> AbbrevTableIndexOrErr =
- DI.getAbbrevTableIndexByID(AbbrevTableID);
- if (!AbbrevTableIndexOrErr)
- return createStringError(errc::invalid_argument,
- toString(AbbrevTableIndexOrErr.takeError()) +
- " for compilation unit with index " +
- utostr(CUIndex));
- ArrayRef<DWARFYAML::Abbrev> AbbrevDecls(
- DI.DebugAbbrev[*AbbrevTableIndexOrErr].Table);
+ if (AbbrevTable.empty())
+ return createStringError(
+ errc::invalid_argument,
+ "non-empty compilation unit should have an associated abbrev table");
+
+ ArrayRef<DWARFYAML::Abbrev> AbbrevDecls(AbbrevTable[0].Table);
if (AbbrCode > AbbrevDecls.size())
return createStringError(
@@ -388,8 +384,7 @@ static Expected<uint64_t> writeDIE(const DWARFYAML::Data &DI, uint64_t CUIndex,
}
Error DWARFYAML::emitDebugInfo(raw_ostream &OS, const DWARFYAML::Data &DI) {
- for (uint64_t I = 0; I < DI.CompileUnits.size(); ++I) {
- const DWARFYAML::Unit &Unit = DI.CompileUnits[I];
+ for (const DWARFYAML::Unit &Unit : DI.CompileUnits) {
uint8_t AddrSize;
if (Unit.AddrSize)
AddrSize = *Unit.AddrSize;
@@ -407,11 +402,9 @@ Error DWARFYAML::emitDebugInfo(raw_ostream &OS, const DWARFYAML::Data &DI) {
std::string EntryBuffer;
raw_string_ostream EntryBufferOS(EntryBuffer);
- uint64_t AbbrevTableID = Unit.AbbrevTableID.getValueOr(I);
for (const DWARFYAML::Entry &Entry : Unit.Entries) {
- if (Expected<uint64_t> EntryLength =
- writeDIE(DI, I, AbbrevTableID, Params, Entry, EntryBufferOS,
- DI.IsLittleEndian))
+ if (Expected<uint64_t> EntryLength = writeDIE(
+ DI.DebugAbbrev, Params, Entry, EntryBufferOS, DI.IsLittleEndian))
Length += *EntryLength;
else
return EntryLength.takeError();
diff --git a/llvm/lib/ObjectYAML/DWARFYAML.cpp b/llvm/lib/ObjectYAML/DWARFYAML.cpp
index e1ebdfa..5c4fd53 100644
--- a/llvm/lib/ObjectYAML/DWARFYAML.cpp
+++ b/llvm/lib/ObjectYAML/DWARFYAML.cpp
@@ -13,8 +13,6 @@
#include "llvm/ObjectYAML/DWARFYAML.h"
#include "llvm/BinaryFormat/Dwarf.h"
-#include "llvm/Support/Errc.h"
-#include "llvm/Support/Error.h"
namespace llvm {
@@ -55,31 +53,6 @@ SetVector<StringRef> DWARFYAML::Data::getNonEmptySectionNames() const {
return SecNames;
}
-Expected<uint64_t> DWARFYAML::Data::getAbbrevTableIndexByID(uint64_t ID) const {
- if (AbbrevTableID2Index.empty()) {
- for (auto &AbbrevTable : enumerate(DebugAbbrev)) {
- // If the abbrev table's ID isn't specified, we use the index as its ID.
- uint64_t AbbrevTableID =
- AbbrevTable.value().ID.getValueOr(AbbrevTable.index());
- auto It =
- AbbrevTableID2Index.insert({AbbrevTableID, AbbrevTable.index()});
- if (!It.second)
- return createStringError(
- errc::invalid_argument,
- "the ID (%" PRIu64 ") of abbrev table with index %" PRIu64
- " has been used by abbrev table with index %" PRIu64,
- AbbrevTableID, AbbrevTable.index(), It.first->second);
- }
- }
-
- auto It = AbbrevTableID2Index.find(ID);
- if (It == AbbrevTableID2Index.end())
- return createStringError(errc::invalid_argument,
- "cannot find abbrev table whose ID is %" PRIu64,
- ID);
- return It->second;
-}
-
namespace yaml {
void MappingTraits<DWARFYAML::Data>::mapping(IO &IO, DWARFYAML::Data &DWARF) {
@@ -107,7 +80,6 @@ void MappingTraits<DWARFYAML::Data>::mapping(IO &IO, DWARFYAML::Data &DWARF) {
void MappingTraits<DWARFYAML::AbbrevTable>::mapping(
IO &IO, DWARFYAML::AbbrevTable &AbbrevTable) {
- IO.mapOptional("ID", AbbrevTable.ID);
IO.mapOptional("Table", AbbrevTable.Table);
}
@@ -181,7 +153,6 @@ void MappingTraits<DWARFYAML::Unit>::mapping(IO &IO, DWARFYAML::Unit &Unit) {
IO.mapRequired("Version", Unit.Version);
if (Unit.Version >= 5)
IO.mapRequired("UnitType", Unit.Type);
- IO.mapOptional("AbbrevTableID", Unit.AbbrevTableID);
IO.mapRequired("AbbrOffset", Unit.AbbrOffset);
IO.mapOptional("AddrSize", Unit.AddrSize);
IO.mapOptional("Entries", Unit.Entries);
diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp
index d9774c2..b1adf03 100644
--- a/llvm/lib/ObjectYAML/ELFEmitter.cpp
+++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp
@@ -944,7 +944,7 @@ static bool shouldEmitDWARF(DWARFYAML::Data &DWARF, StringRef Name) {
template <class ELFT>
Expected<uint64_t> emitDWARF(typename ELFT::Shdr &SHeader, StringRef Name,
- DWARFYAML::Data &DWARF,
+ const DWARFYAML::Data &DWARF,
ContiguousBlobAccumulator &CBA) {
// We are unable to predict the size of debug data, so we request to write 0
// bytes. This should always return us an output stream unless CBA is already
diff --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_abbrev.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_abbrev.yaml
index 91af7bdf..607d6eb 100644
--- a/llvm/test/ObjectYAML/MachO/DWARF-debug_abbrev.yaml
+++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_abbrev.yaml
@@ -1,7 +1,4 @@
-## a) Test that yaml2obj is able to emit the __debug_abbrev section and obj2yaml is
-## able to convert it back.
-
-# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s
+# RUN: yaml2obj %s | obj2yaml | FileCheck %s
--- !mach-o
FileHeader:
@@ -423,69 +420,3 @@ DWARF:
#CHECK: Attributes:
#CHECK: - Attribute: DW_AT_type
#CHECK: Form: DW_FORM_ref4
-
-## b) Test that yaml2obj emits an error message when there are non-empty compilation
-## units and multiple abbrev tables are assigned the same ID.
-
-# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=ID-COLLISION
-
-# ID-COLLISION: yaml2obj: error: the ID (1) of abbrev table with index 1 has been used by abbrev table with index 0
-
---- !mach-o
-FileHeader:
- magic: 0xFEEDFACF
- cputype: 0x01000007
- cpusubtype: 0x00000003
- filetype: 0x0000000A
- ncmds: 1
- sizeofcmds: 232
- flags: 0x00000000
- reserved: 0x00000000
-LoadCommands:
- - cmd: LC_SEGMENT_64
- cmdsize: 232
- segname: __DWARF
- vmaddr: 0x00
- vmsize: 0x00
- fileoff: 0x00
- filesize: 0x00
- maxprot: 0
- initprot: 0
- nsects: 2
- flags: 0
- Sections:
- - sectname: __debug_abbrev
- segname: __DWARF
- addr: 0x00
- size: 24
- offset: 528
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_info
- segname: __DWARF
- addr: 0x00
- size: 64
- offset: 1070
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
-DWARF:
- debug_abbrev:
- - ID: 1
- - ID: 1
- debug_info:
- - Version: 4
- AbbrOffset: 0x00
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x1234
diff --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
index 7683da7..46bf522 100644
--- a/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
+++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
@@ -514,7 +514,6 @@ DWARF:
# DWARF32: debug_info:
# DWARF32-NEXT: - Length: 0x0000000000000075
# DWARF32-NEXT: Version: 4
-# DWARF32-NEXT: AbbrevTableID: 0
# DWARF32-NEXT: AbbrOffset: 0
# DWARF32-NEXT: AddrSize: 8
# DWARF32-NEXT: Entries:
@@ -584,7 +583,6 @@ DWARF:
# DWARF32-YAML: debug_info:
# DWARF32-YAML-NEXT: - Length: 0x000000000000000C
# DWARF32-YAML-NEXT: Version: 4
-# DWARF32-YAML-NEXT: AbbrevTableID: 0
# DWARF32-YAML-NEXT: AbbrOffset: 0
# DWARF32-YAML-NEXT: AddrSize: 8
# DWARF32-YAML-NEXT: Entries:
@@ -668,234 +666,9 @@ DWARF:
# DWARF64-YAML-NEXT: - Format: DWARF64
# DWARF64-YAML-NEXT: Length: 0x000000000000000C
# DWARF64-YAML-NEXT: Version: 4
-# DWARF64-YAML-NEXT: AbbrevTableID: 0
# DWARF64-YAML-NEXT: AbbrOffset: 0
# DWARF64-YAML-NEXT: AddrSize: 8
# DWARF64-YAML-NEXT: Entries:
# DWARF64-YAML-NEXT: - AbbrCode: 0x00000001
# DWARF64-YAML-NEXT: Values:
# DWARF64-YAML-NEXT: - Value: 0x0000000000001234
-
-## c) Test that yaml2obj is able to generate compilation units according to the
-## associated abbrev table that is referenced by the 'AbbrevTableID' and obj2yaml
-## is able to convert it back.
-
-# RUN: yaml2obj --docnum=3 %s | obj2yaml | FileCheck %s --check-prefix=MULTI-TABLES
-
-# MULTI-TABLES: DWARF:
-# MULTI-TABLES-NEXT: debug_abbrev:
-# MULTI-TABLES-NEXT: - ID: 0
-# MULTI-TABLES-NEXT: Table:
-# MULTI-TABLES-NEXT: - Code: 0x0000000000000001
-# MULTI-TABLES-NEXT: Tag: DW_TAG_compile_unit
-# MULTI-TABLES-NEXT: Children: DW_CHILDREN_no
-# MULTI-TABLES-NEXT: Attributes:
-# MULTI-TABLES-NEXT: - Attribute: DW_AT_low_pc
-# MULTI-TABLES-NEXT: Form: DW_FORM_addr
-# MULTI-TABLES-NEXT: - ID: 1
-# MULTI-TABLES-NEXT: Table:
-# MULTI-TABLES-NEXT: - Code: 0x0000000000000001
-# MULTI-TABLES-NEXT: Tag: DW_TAG_compile_unit
-# MULTI-TABLES-NEXT: Children: DW_CHILDREN_no
-# MULTI-TABLES-NEXT: Attributes:
-# MULTI-TABLES-NEXT: - Attribute: DW_AT_low_pc
-# MULTI-TABLES-NEXT: Form: DW_FORM_data4
-# MULTI-TABLES-NEXT: - ID: 2
-# MULTI-TABLES-NEXT: Table:
-# MULTI-TABLES-NEXT: - Code: 0x0000000000000001
-# MULTI-TABLES-NEXT: Tag: DW_TAG_compile_unit
-# MULTI-TABLES-NEXT: Children: DW_CHILDREN_no
-# MULTI-TABLES-NEXT: Attributes:
-# MULTI-TABLES-NEXT: - Attribute: DW_AT_low_pc
-# MULTI-TABLES-NEXT: Form: DW_FORM_udata
-# MULTI-TABLES-NEXT: debug_info:
-# MULTI-TABLES-NEXT: - Length: 0x000000000000000C
-# MULTI-TABLES-NEXT: Version: 4
-# MULTI-TABLES-NEXT: AbbrevTableID: 1
-# MULTI-TABLES-NEXT: AbbrOffset: 0x0000000000000008
-# MULTI-TABLES-NEXT: AddrSize: 8
-# MULTI-TABLES-NEXT: Entries:
-# MULTI-TABLES-NEXT: - AbbrCode: 0x00000001
-# MULTI-TABLES-NEXT: Values:
-# MULTI-TABLES-NEXT: - Value: 0x0000000000001234
-# MULTI-TABLES-NEXT: - Length: 0x000000000000000C
-# MULTI-TABLES-NEXT: Version: 4
-# MULTI-TABLES-NEXT: AbbrevTableID: 1
-# MULTI-TABLES-NEXT: AbbrOffset: 0x0000000000000008
-# MULTI-TABLES-NEXT: AddrSize: 8
-# MULTI-TABLES-NEXT: Entries:
-# MULTI-TABLES-NEXT: - AbbrCode: 0x00000001
-# MULTI-TABLES-NEXT: Values:
-# MULTI-TABLES-NEXT: - Value: 0x0000000000004321
-# MULTI-TABLES-NEXT: - Length: 0x0000000000000010
-# MULTI-TABLES-NEXT: Version: 4
-# MULTI-TABLES-NEXT: AbbrevTableID: 0
-# MULTI-TABLES-NEXT: AbbrOffset: 0x0000000000000000
-# MULTI-TABLES-NEXT: AddrSize: 8
-# MULTI-TABLES-NEXT: Entries:
-# MULTI-TABLES-NEXT: - AbbrCode: 0x00000001
-# MULTI-TABLES-NEXT: Values:
-# MULTI-TABLES-NEXT: - Value: 0x0000000000005678
-# MULTI-TABLES-NEXT: - Length: 0x000000000000000B
-# MULTI-TABLES-NEXT: Version: 4
-# MULTI-TABLES-NEXT: AbbrevTableID: 2
-# MULTI-TABLES-NEXT: AbbrOffset: 0x0000000000000010
-# MULTI-TABLES-NEXT: AddrSize: 8
-# MULTI-TABLES-NEXT: Entries:
-# MULTI-TABLES-NEXT: - AbbrCode: 0x00000001
-# MULTI-TABLES-NEXT: Values:
-# MULTI-TABLES-NEXT: - Value: 0x0000000000008765
-# MULTI-TABLES-NEXT: ...
-
---- !mach-o
-FileHeader:
- magic: 0xFEEDFACF
- cputype: 0x01000007
- cpusubtype: 0x00000003
- filetype: 0x0000000A
- ncmds: 1
- sizeofcmds: 232
- flags: 0x00000000
- reserved: 0x00000000
-LoadCommands:
- - cmd: LC_SEGMENT_64
- cmdsize: 232
- segname: __DWARF
- vmaddr: 0x00
- vmsize: 0x00
- fileoff: 0x00
- filesize: 0x00
- maxprot: 0
- initprot: 0
- nsects: 2
- flags: 0
- Sections:
- - sectname: __debug_abbrev
- segname: __DWARF
- addr: 0x00
- size: 24
- offset: 528
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_info
- segname: __DWARF
- addr: 0x00
- size: 67
- offset: 1070
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
-DWARF:
- debug_abbrev:
- - Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_addr
- - ID: 2
- Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_data4
- - ID: 1
- Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_udata
- debug_info:
- - Version: 4
- AbbrevTableID: 2
- AbbrOffset: 8
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x1234
- - Version: 4
- AbbrevTableID: 2
- AbbrOffset: 8
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x4321
- - Version: 4
- AbbrevTableID: 0
- AbbrOffset: 0
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x5678
- - Version: 4
- AbbrevTableID: 1
- AbbrOffset: 16
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x8765
-
-## d) Test that yaml2obj emits an error message when a compilation unit doesn't have
-## an associated abbrev table.
-
-# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=MISSING-ABBREV
-
-# MISSING-ABBREV: yaml2obj: error: cannot find abbrev table whose ID is 0
-
---- !mach-o
-FileHeader:
- magic: 0xFEEDFACF
- cputype: 0x01000007
- cpusubtype: 0x00000003
- filetype: 0x0000000A
- ncmds: 1
- sizeofcmds: 232
- flags: 0x00000000
- reserved: 0x00000000
-LoadCommands:
- - cmd: LC_SEGMENT_64
- cmdsize: 152
- segname: __DWARF
- vmaddr: 0x00
- vmsize: 0x00
- fileoff: 0x00
- filesize: 0x00
- maxprot: 0
- initprot: 0
- nsects: 2
- flags: 0
- Sections:
- - sectname: __debug_info
- segname: __DWARF
- addr: 0x00
- size: 64
- offset: 1070
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
-DWARF:
- debug_info:
- - Version: 4
- AbbrOffset: 0x00
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x1234
diff --git a/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml b/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
index d016b8c..d63be60 100644
--- a/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
+++ b/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
@@ -515,7 +515,6 @@ DWARF:
# DWARF32-NEXT: - Length: 0x0000000000000076
# DWARF32-NEXT: Version: 5
# DWARF32-NEXT: UnitType: DW_UT_compile
-# DWARF32-NEXT: AbbrevTableID: 0
# DWARF32-NEXT: AbbrOffset: 0
# DWARF32-NEXT: AddrSize: 8
# DWARF32-NEXT: Entries:
@@ -586,7 +585,6 @@ DWARF:
# DWARF32-YAML-NEXT: - Length: 0x000000000000000C
# DWARF32-YAML-NEXT: Version: 5
# DWARF32-YAML-NEXT: UnitType: DW_UT_compile
-# DWARF32-YAML-NEXT: AbbrevTableID: 0
# DWARF32-YAML-NEXT: AbbrOffset: 0x0000000000000000
# DWARF32-YAML-NEXT: AddrSize: 8
# DWARF32-YAML-NEXT: Entries:
@@ -672,7 +670,6 @@ DWARF:
# DWARF64-YAML-NEXT: Length: 0x0000000000000014
# DWARF64-YAML-NEXT: Version: 5
# DWARF64-YAML-NEXT: UnitType: DW_UT_compile
-# DWARF64-YAML-NEXT: AbbrevTableID: 0
# DWARF64-YAML-NEXT: AbbrOffset: 0x0000000000000000
# DWARF64-YAML-NEXT: AddrSize: 8
# DWARF64-YAML-NEXT: Entries:
diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-abbrev.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-abbrev.yaml
index d199ac2..82786db 100644
--- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-abbrev.yaml
+++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-abbrev.yaml
@@ -306,28 +306,3 @@ DWARF:
- Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []
-
-## i) Test that yaml2obj emits an error message when there are non-empty compilation units
-## and multiple abbrev tables are assigned the same ID.
-
-## RUN: not yaml2obj --docnum=9 %s 2>&1 | FileCheck %s --check-prefix=ID-COLLISION
-
-# ID-COLLISION: yaml2obj: error: the ID (1) of abbrev table with index 1 has been used by abbrev table with index 0
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
-DWARF:
- debug_abbrev:
- - ID: 1
- - ID: 1
- debug_info:
- - Version: 4
- AbbrOffset: 0x00
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x1234
diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
index 80bb064..d3698f1 100644
--- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
+++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
@@ -206,12 +206,11 @@ DWARF:
- Attribute: 0x01
Form: DW_FORM_addrx4 ## 0x2c
debug_info:
- - Length: 0x1234
- Version: 5
- UnitType: DW_UT_type
- AbbrevTableID: 0
- AbbrOffset: 0x1234
- AddrSize: 4
+ - Length: 0x1234
+ Version: 5
+ UnitType: DW_UT_type
+ AbbrOffset: 0x1234
+ AddrSize: 4
Entries:
- AbbrCode: 1
Values:
@@ -272,7 +271,6 @@ DWARF:
Version: 5
## Test another unit type.
UnitType: DW_UT_compile
- AbbrevTableID: 0
AbbrOffset: 0x1234
AddrSize: 4
Entries:
@@ -281,7 +279,6 @@ DWARF:
- Length: 0x5678
## Test DWARFv4
Version: 4
- AbbrevTableID: 0
AbbrOffset: 0x5678
AddrSize: 4
Entries:
@@ -889,7 +886,7 @@ DWARF:
## RUN: not yaml2obj --docnum=16 %s 2>&1 | FileCheck %s --check-prefix=NO-ABBREV
-# NO-ABBREV: yaml2obj: error: cannot find abbrev table whose ID is 0 for compilation unit with index 0
+# NO-ABBREV: yaml2obj: error: non-empty compilation unit should have an associated abbrev table
--- !ELF
FileHeader:
@@ -905,102 +902,3 @@ DWARF:
- AbbrCode: 1
Values:
- Value: 0x1234
-
-## o) Test that yaml2obj is able to generate compilation units according to the
-## associated abbrev table that is referenced by the 'AbbrevTableID'.
-
-# RUN: yaml2obj --docnum=17 %s -o %t17.o
-# RUN: llvm-readelf --hex-dump=.debug_info %t17.o | FileCheck %s --check-prefix=MULTI-TABLES
-
-# MULTI-TABLES: Hex dump of section '.debug_info':
-# MULTI-TABLES-NEXT: 0x00000000 0c000000 04000800 00000801 34120000 ............4...
-## ^------- unit_length (4-byte)
-## ^--- version (2-byte)
-## ^-------- debug_abbrev_offset (4-byte)
-## ^- address_size (1-byte)
-## ^- abbrev_code (ULEB128) 0x01
-## ^------- Form: DW_FORM_data4 (4-byte) 0x1234
-# MULTI-TABLES-NEXT: 0x00000010 0c000000 04000800 00000801 21430000 ............!C..
-## ^------- unit_length (4-byte)
-## ^--- version (2-byte)
-## ^-------- debug_abbrev_offset (4-byte)
-## ^- address_size (1-byte)
-## ^- abbrev_code (ULEB128) 0x01
-## ^------- Form: DW_FORM_data4 (4-byte) 0x4321
-# MULTI-TABLES-NEXT: 0x00000020 10000000 04000000 00000801 78560000 ............xV..
-## ^------- unit_length (4-byte)
-## ^--- version (2-byte)
-## ^-------- debug_abbrev_offset (4-byte)
-## ^- address_size (1-byte)
-## ^- abbrev_code (ULEB128) 0x01
-## ^------- Form: DW_FORM_addr (8-byte) 0x5678
-# MULTI-TABLES-NEXT: 0x00000030 00000000 0b000000 04001000 00000801 ................
-## --------
-## ^------- unit_length (4-byte)
-## ^--- version (2-byte)
-## ^-------- debug_abbrev_offset (4-byte)
-## ^- address_size (1-byte)
-## ^- abbrev_code (ULEB128) 0x01
-# MULTI-TABLES-NEXT: 0x00000040 e58e02 ...
-## ^----- Form: DW_FORM_udata (ULEB128) 0x8765
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
-DWARF:
- debug_abbrev:
- - Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_addr
- - ID: 2
- Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_data4
- - ID: 1
- Table:
- - Code: 1
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_udata
- debug_info:
- - Version: 4
- AbbrevTableID: 2
- AbbrOffset: 8
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x1234
- - Version: 4
- AbbrevTableID: 2
- AbbrOffset: 8
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x4321
- - Version: 4
- AbbrevTableID: 0
- AbbrOffset: 0
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x5678
- - Version: 4
- AbbrevTableID: 1
- AbbrOffset: 16
- Entries:
- - AbbrCode: 1
- Values:
- - Value: 0x8765
diff --git a/llvm/tools/obj2yaml/dwarf2yaml.cpp b/llvm/tools/obj2yaml/dwarf2yaml.cpp
index 0f9794f..6acce09 100644
--- a/llvm/tools/obj2yaml/dwarf2yaml.cpp
+++ b/llvm/tools/obj2yaml/dwarf2yaml.cpp
@@ -23,7 +23,6 @@ using namespace llvm;
void dumpDebugAbbrev(DWARFContext &DCtx, DWARFYAML::Data &Y) {
auto AbbrevSetPtr = DCtx.getDebugAbbrev();
if (AbbrevSetPtr) {
- uint64_t AbbrevTableID = 0;
for (auto AbbrvDeclSet : *AbbrevSetPtr) {
Y.DebugAbbrev.emplace_back();
for (auto AbbrvDecl : AbbrvDeclSet.second) {
@@ -40,7 +39,6 @@ void dumpDebugAbbrev(DWARFContext &DCtx, DWARFYAML::Data &Y) {
AttAbrv.Value = Attribute.getImplicitConstValue();
Abbrv.Attributes.push_back(AttAbrv);
}
- Y.DebugAbbrev.back().ID = AbbrevTableID++;
Y.DebugAbbrev.back().Table.push_back(Abbrv);
}
}
@@ -174,14 +172,6 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {
NewUnit.Version = CU->getVersion();
if (NewUnit.Version >= 5)
NewUnit.Type = (dwarf::UnitType)CU->getUnitType();
- const DWARFDebugAbbrev *DebugAbbrev = DCtx.getDebugAbbrev();
- NewUnit.AbbrevTableID = std::distance(
- DebugAbbrev->begin(),
- std::find_if(
- DebugAbbrev->begin(), DebugAbbrev->end(),
- [&](const std::pair<uint64_t, DWARFAbbreviationDeclarationSet> &P) {
- return P.first == CU->getAbbreviations()->getOffset();
- }));
NewUnit.AbbrOffset = CU->getAbbreviations()->getOffset();
NewUnit.AddrSize = CU->getAddressByteSize();
for (auto DIE : CU->dies()) {
diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
index c08a0e1..f59b18f 100644
--- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
+++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
@@ -2487,7 +2487,6 @@ TEST(DWARFDebugInfo, TestDwarfVerifyCUDontShareLineTable) {
- Value: 0x0000000000000000
- Length: 16
Version: 4
- AbbrevTableID: 0
AbbrOffset: 0
AddrSize: 8
Entries: