From b9e787ce80c78c0500ec78e285c01ec43f87ff92 Mon Sep 17 00:00:00 2001 From: Xing GUO Date: Thu, 13 Aug 2020 18:37:58 +0800 Subject: [PATCH] [DWARFYAML] Replace InitialLength with Format and Length. NFC. This change replaces the InitialLength of pub-tables with Format and Length. All the InitialLength fields have been removed. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D85880 --- include/llvm/ObjectYAML/DWARFYAML.h | 27 ++----------------- lib/ObjectYAML/DWARFEmitter.cpp | 9 +------ lib/ObjectYAML/DWARFYAML.cpp | 8 +----- test/ObjectYAML/MachO/DWARF-debug_line.yaml | 6 ++--- test/ObjectYAML/MachO/DWARF-pubsections.yaml | 12 +++------ .../ARM_AArch64/fat-macho-dwarf.yaml | 12 +++------ test/tools/llvm-gsymutil/X86/mach-dwarf.yaml | 6 ++--- .../ELF/DWARF/debug-gnu-pubnames.yaml | 17 +++++------- .../ELF/DWARF/debug-gnu-pubtypes.yaml | 17 +++++------- .../yaml2obj/ELF/DWARF/debug-pubnames.yaml | 12 +++------ .../yaml2obj/ELF/DWARF/debug-pubtypes.yaml | 13 ++++----- tools/obj2yaml/dwarf2yaml.cpp | 18 ++++++------- unittests/ObjectYAML/DWARFYAMLTest.cpp | 18 +++++-------- 13 files changed, 52 insertions(+), 123 deletions(-) diff --git a/include/llvm/ObjectYAML/DWARFYAML.h b/include/llvm/ObjectYAML/DWARFYAML.h index e548f2a236f..88a0543b1c9 100644 --- a/include/llvm/ObjectYAML/DWARFYAML.h +++ b/include/llvm/ObjectYAML/DWARFYAML.h @@ -26,26 +26,6 @@ namespace llvm { namespace DWARFYAML { -struct InitialLength { - uint32_t TotalLength; - uint64_t TotalLength64; - - bool isDWARF64() const { return TotalLength == UINT32_MAX; } - - uint64_t getLength() const { - return isDWARF64() ? TotalLength64 : TotalLength; - } - - void setLength(uint64_t Len) { - if (Len >= (uint64_t)UINT32_MAX) { - TotalLength64 = Len; - TotalLength = UINT32_MAX; - } else { - TotalLength = Len; - } - } -}; - struct AttributeAbbrev { llvm::dwarf::Attribute Attribute; llvm::dwarf::Form Form; @@ -95,7 +75,8 @@ struct PubEntry { }; struct PubSection { - InitialLength Length; + dwarf::DwarfFormat Format; + yaml::Hex64 Length; uint16_t Version; uint32_t UnitOffset; uint32_t UnitSize; @@ -375,10 +356,6 @@ template <> struct MappingTraits { static void mapping(IO &IO, DWARFYAML::StringOffsetsTable &StrOffsetsTable); }; -template <> struct MappingTraits { - static void mapping(IO &IO, DWARFYAML::InitialLength &DWARF); -}; - template <> struct ScalarEnumerationTraits { static void enumeration(IO &IO, dwarf::DwarfFormat &Format) { IO.enumCase(Format, "DWARF32", dwarf::DWARF32); diff --git a/lib/ObjectYAML/DWARFEmitter.cpp b/lib/ObjectYAML/DWARFEmitter.cpp index a20322cc766..b0d2a8b42b9 100644 --- a/lib/ObjectYAML/DWARFEmitter.cpp +++ b/lib/ObjectYAML/DWARFEmitter.cpp @@ -68,13 +68,6 @@ static void ZeroFillBytes(raw_ostream &OS, size_t Size) { OS.write(reinterpret_cast(FillData.data()), Size); } -static void writeInitialLength(const DWARFYAML::InitialLength &Length, - raw_ostream &OS, bool IsLittleEndian) { - writeInteger((uint32_t)Length.TotalLength, OS, IsLittleEndian); - if (Length.isDWARF64()) - writeInteger((uint64_t)Length.TotalLength64, OS, IsLittleEndian); -} - static void writeInitialLength(const dwarf::DwarfFormat Format, const uint64_t Length, raw_ostream &OS, bool IsLittleEndian) { @@ -213,7 +206,7 @@ Error DWARFYAML::emitDebugRanges(raw_ostream &OS, const DWARFYAML::Data &DI) { static Error emitPubSection(raw_ostream &OS, const DWARFYAML::PubSection &Sect, bool IsLittleEndian, bool IsGNUPubSec = false) { - writeInitialLength(Sect.Length, OS, IsLittleEndian); + writeInitialLength(Sect.Format, Sect.Length, OS, IsLittleEndian); writeInteger((uint16_t)Sect.Version, OS, IsLittleEndian); writeInteger((uint32_t)Sect.UnitOffset, OS, IsLittleEndian); writeInteger((uint32_t)Sect.UnitSize, OS, IsLittleEndian); diff --git a/lib/ObjectYAML/DWARFYAML.cpp b/lib/ObjectYAML/DWARFYAML.cpp index 01a5d75c50b..1cd2b8bd54a 100644 --- a/lib/ObjectYAML/DWARFYAML.cpp +++ b/lib/ObjectYAML/DWARFYAML.cpp @@ -136,6 +136,7 @@ void MappingTraits::mapping(IO &IO, void MappingTraits::mapping( IO &IO, DWARFYAML::PubSection &Section) { + IO.mapOptional("Format", Section.Format, dwarf::DWARF32); IO.mapRequired("Length", Section.Length); IO.mapRequired("Version", Section.Version); IO.mapRequired("UnitOffset", Section.UnitOffset); @@ -286,13 +287,6 @@ void MappingTraits>::mapping( IO.mapOptional("Lists", ListTable.Lists); } -void MappingTraits::mapping( - IO &IO, DWARFYAML::InitialLength &InitialLength) { - IO.mapRequired("TotalLength", InitialLength.TotalLength); - if (InitialLength.isDWARF64()) - IO.mapRequired("TotalLength64", InitialLength.TotalLength64); -} - } // end namespace yaml } // end namespace llvm diff --git a/test/ObjectYAML/MachO/DWARF-debug_line.yaml b/test/ObjectYAML/MachO/DWARF-debug_line.yaml index 5acca5ccb7f..0b21ce77f8f 100644 --- a/test/ObjectYAML/MachO/DWARF-debug_line.yaml +++ b/test/ObjectYAML/MachO/DWARF-debug_line.yaml @@ -403,8 +403,7 @@ DWARF: - Address: 0x0000000100000F50 Length: 52 debug_pubnames: - Length: - TotalLength: 23 + Length: 23 Version: 2 UnitOffset: 0 UnitSize: 121 @@ -412,8 +411,7 @@ DWARF: - DieOffset: 0x0000002A Name: main debug_pubtypes: - Length: - TotalLength: 31 + Length: 31 Version: 2 UnitOffset: 0 UnitSize: 121 diff --git a/test/ObjectYAML/MachO/DWARF-pubsections.yaml b/test/ObjectYAML/MachO/DWARF-pubsections.yaml index 05c4f666031..4350fcc6cad 100644 --- a/test/ObjectYAML/MachO/DWARF-pubsections.yaml +++ b/test/ObjectYAML/MachO/DWARF-pubsections.yaml @@ -308,8 +308,7 @@ DWARF: - int - char debug_pubnames: - Length: - TotalLength: 23 + Length: 23 Version: 2 UnitOffset: 0 UnitSize: 121 @@ -317,8 +316,7 @@ DWARF: - DieOffset: 0x0000002A Name: main debug_pubtypes: - Length: - TotalLength: 31 + Length: 31 Version: 2 UnitOffset: 0 UnitSize: 121 @@ -331,8 +329,7 @@ DWARF: #CHECK: DWARF: #CHECK: debug_pubnames: -#CHECK: Length: -#CHECK: TotalLength: 23 +#CHECK: Length: 0x0000000000000017 #CHECK: Version: 2 #CHECK: UnitOffset: 0 #CHECK: UnitSize: 121 @@ -340,8 +337,7 @@ DWARF: #CHECK: - DieOffset: 0x0000002A #CHECK: Name: main #CHECK: debug_pubtypes: -#CHECK: Length: -#CHECK: TotalLength: 31 +#CHECK: Length: 0x000000000000001F #CHECK: Version: 2 #CHECK: UnitOffset: 0 #CHECK: UnitSize: 121 diff --git a/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml b/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml index ebb82b5492e..34f0285a169 100644 --- a/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml +++ b/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml @@ -387,8 +387,7 @@ Slices: - Address: 0x000000000000BFF0 Length: 16 debug_pubnames: - Length: - TotalLength: 23 + Length: 23 Version: 2 UnitOffset: 0 UnitSize: 119 @@ -396,8 +395,7 @@ Slices: - DieOffset: 0x00000026 Name: main debug_pubtypes: - Length: - TotalLength: 31 + Length: 31 Version: 2 UnitOffset: 0 UnitSize: 119 @@ -865,8 +863,7 @@ Slices: - Address: 0x0000000100007F9C Length: 28 debug_pubnames: - Length: - TotalLength: 23 + Length: 23 Version: 2 UnitOffset: 0 UnitSize: 126 @@ -874,8 +871,7 @@ Slices: - DieOffset: 0x0000002A Name: main debug_pubtypes: - Length: - TotalLength: 31 + Length: 31 Version: 2 UnitOffset: 0 UnitSize: 126 diff --git a/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml b/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml index fa642d11206..f32bcc8566e 100644 --- a/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml +++ b/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml @@ -550,8 +550,7 @@ DWARF: - Address: 0x0000000100000F90 Length: 37 debug_pubnames: - Length: - TotalLength: 43 + Length: 43 Version: 2 UnitOffset: 0 UnitSize: 224 @@ -563,8 +562,7 @@ DWARF: - DieOffset: 0x00000069 Name: main debug_pubtypes: - Length: - TotalLength: 31 + Length: 31 Version: 2 UnitOffset: 0 UnitSize: 224 diff --git a/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubnames.yaml b/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubnames.yaml index 71c79811175..d5db4b4bd61 100644 --- a/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubnames.yaml +++ b/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubnames.yaml @@ -44,8 +44,7 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -140,8 +139,7 @@ Sections: Size: 0x10 DWARF: debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -164,8 +162,7 @@ Sections: Content: "00" DWARF: debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -227,8 +224,7 @@ Sections: Type: SHT_STRTAB DWARF: debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -238,7 +234,7 @@ DWARF: # RUN: not yaml2obj --docnum=8 %s -o %t8.o 2>&1 | FileCheck %s --check-prefix=MISSING-KEY --ignore-case -# MISSING-KEY: YAML:260:9: error: missing required key 'Descriptor' +# MISSING-KEY: YAML:{{.*}}:9: error: missing required key 'Descriptor' # MISSING-KEY-NEXT: - DieOffset: 0x12345678 # MISSING-KEY-NEXT: ^ # MISSING-KEY-NEXT: yaml2obj: error: failed to parse YAML input: Invalid argument @@ -251,8 +247,7 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 diff --git a/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubtypes.yaml b/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubtypes.yaml index b88d21b5fc7..18eca47fb24 100644 --- a/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubtypes.yaml +++ b/test/tools/yaml2obj/ELF/DWARF/debug-gnu-pubtypes.yaml @@ -44,8 +44,7 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -140,8 +139,7 @@ Sections: Size: 0x10 DWARF: debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -164,8 +162,7 @@ Sections: Content: "00" DWARF: debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -227,8 +224,7 @@ Sections: Type: SHT_STRTAB DWARF: debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -238,7 +234,7 @@ DWARF: # RUN: not yaml2obj --docnum=8 %s -o %t8.o 2>&1 | FileCheck %s --check-prefix=MISSING-KEY --ignore-case -# MISSING-KEY: YAML:260:9: error: missing required key 'Descriptor' +# MISSING-KEY: YAML:{{.*}}:9: error: missing required key 'Descriptor' # MISSING-KEY-NEXT: - DieOffset: 0x12345678 # MISSING-KEY-NEXT: ^ # MISSING-KEY-NEXT: yaml2obj: error: failed to parse YAML input: Invalid argument @@ -251,8 +247,7 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 diff --git a/test/tools/yaml2obj/ELF/DWARF/debug-pubnames.yaml b/test/tools/yaml2obj/ELF/DWARF/debug-pubnames.yaml index 2dce4b69f57..f62da793ff8 100644 --- a/test/tools/yaml2obj/ELF/DWARF/debug-pubnames.yaml +++ b/test/tools/yaml2obj/ELF/DWARF/debug-pubnames.yaml @@ -43,8 +43,7 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -136,8 +135,7 @@ Sections: Size: 0x10 DWARF: debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -160,8 +158,7 @@ Sections: Content: "00" DWARF: debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -223,8 +220,7 @@ Sections: Type: SHT_STRTAB DWARF: debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 diff --git a/test/tools/yaml2obj/ELF/DWARF/debug-pubtypes.yaml b/test/tools/yaml2obj/ELF/DWARF/debug-pubtypes.yaml index 71e8193eb1d..d286f27f8fd 100644 --- a/test/tools/yaml2obj/ELF/DWARF/debug-pubtypes.yaml +++ b/test/tools/yaml2obj/ELF/DWARF/debug-pubtypes.yaml @@ -43,8 +43,8 @@ FileHeader: Machine: EM_X86_64 DWARF: debug_pubtypes: - Length: - TotalLength: 0x1234 + Format: [[FORMAT=DWARF32]] + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -136,8 +136,7 @@ Sections: Size: 0x10 DWARF: debug_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -160,8 +159,7 @@ Sections: Content: "00" DWARF: debug_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 @@ -223,8 +221,7 @@ Sections: Type: SHT_STRTAB DWARF: debug_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x1234 UnitSize: 0x4321 diff --git a/tools/obj2yaml/dwarf2yaml.cpp b/tools/obj2yaml/dwarf2yaml.cpp index 65315ca01fa..6ae94bf340f 100644 --- a/tools/obj2yaml/dwarf2yaml.cpp +++ b/tools/obj2yaml/dwarf2yaml.cpp @@ -19,13 +19,6 @@ using namespace llvm; -void dumpInitialLength(DataExtractor &Data, uint64_t &Offset, - DWARFYAML::InitialLength &InitialLength) { - InitialLength.TotalLength = Data.getU32(&Offset); - if (InitialLength.isDWARF64()) - InitialLength.TotalLength64 = Data.getU64(&Offset); -} - void dumpDebugAbbrev(DWARFContext &DCtx, DWARFYAML::Data &Y) { auto AbbrevSetPtr = DCtx.getDebugAbbrev(); if (AbbrevSetPtr) { @@ -132,11 +125,18 @@ static DWARFYAML::PubSection dumpPubSection(const DWARFContext &DCtx, DCtx.isLittleEndian(), 0); DWARFYAML::PubSection Y; uint64_t Offset = 0; - dumpInitialLength(PubSectionData, Offset, Y.Length); + uint64_t Length = PubSectionData.getU32(&Offset); + if (Length == dwarf::DW_LENGTH_DWARF64) { + Y.Format = dwarf::DWARF64; + Y.Length = PubSectionData.getU64(&Offset); + } else { + Y.Format = dwarf::DWARF32; + Y.Length = Length; + } Y.Version = PubSectionData.getU16(&Offset); Y.UnitOffset = PubSectionData.getU32(&Offset); Y.UnitSize = PubSectionData.getU32(&Offset); - while (Offset < Y.Length.getLength()) { + while (Offset < Y.Length) { DWARFYAML::PubEntry NewEntry; NewEntry.DieOffset = PubSectionData.getU32(&Offset); if (IsGNUStyle) diff --git a/unittests/ObjectYAML/DWARFYAMLTest.cpp b/unittests/ObjectYAML/DWARFYAMLTest.cpp index a2addc8f2fa..91febffdfcc 100644 --- a/unittests/ObjectYAML/DWARFYAMLTest.cpp +++ b/unittests/ObjectYAML/DWARFYAMLTest.cpp @@ -68,8 +68,7 @@ Blah: unexpected TEST(DebugPubSection, TestDebugPubSection) { StringRef Yaml = R"( debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00 @@ -79,8 +78,7 @@ debug_pubnames: - DieOffset: 0x4321 Name: def debug_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00 @@ -115,8 +113,7 @@ debug_pubtypes: TEST(DebugPubSection, TestUnexpectedDescriptor) { StringRef Yaml = R"( debug_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00 @@ -133,8 +130,7 @@ debug_pubnames: TEST(DebugGNUPubSection, TestDebugGNUPubSections) { StringRef Yaml = R"( debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00 @@ -146,8 +142,7 @@ debug_gnu_pubnames: Descriptor: 0x34 Name: def debug_gnu_pubtypes: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00 @@ -188,8 +183,7 @@ debug_gnu_pubtypes: TEST(DebugGNUPubSection, TestMissingDescriptor) { StringRef Yaml = R"( debug_gnu_pubnames: - Length: - TotalLength: 0x1234 + Length: 0x1234 Version: 2 UnitOffset: 0x4321 UnitSize: 0x00