Skip to content

Commit 9797a7e

Browse files
authored
[DWARF] Refactor findDebugNamesOffsets
Address some post-review comments in #82153 and move the function inside llvm::dwarf, used by certain free functions. Pull Request: #88064
1 parent e248f0d commit 9797a7e

File tree

2 files changed

+22
-29
lines changed

2 files changed

+22
-29
lines changed

llvm/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -804,9 +804,11 @@ class DWARFDebugNames : public DWARFAcceleratorTable {
804804

805805
/// Calculates the starting offsets for various sections within the
806806
/// .debug_names section.
807-
void findDebugNamesOffsets(DWARFDebugNames::DWARFDebugNamesOffsets &Offsets,
808-
uint64_t HdrSize, const dwarf::DwarfFormat Format,
809-
const DWARFDebugNames::Header &Hdr);
807+
namespace dwarf {
808+
DWARFDebugNames::DWARFDebugNamesOffsets
809+
findDebugNamesOffsets(uint64_t EndOfHeaderOffset,
810+
const DWARFDebugNames::Header &Hdr);
811+
}
810812

811813
/// If `Name` is the name of a templated function that includes template
812814
/// parameters, returns a substring of `Name` containing no template

llvm/lib/DebugInfo/DWARF/DWARFAcceleratorTable.cpp

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -552,31 +552,22 @@ DWARFDebugNames::NameIndex::extractAbbrev(uint64_t *Offset) {
552552
return Abbrev(Code, dwarf::Tag(Tag), AbbrevOffset, std::move(*AttrEncOr));
553553
}
554554

555-
void llvm::findDebugNamesOffsets(
556-
DWARFDebugNames::DWARFDebugNamesOffsets &Offsets, uint64_t HdrSize,
557-
dwarf::DwarfFormat Format, const DWARFDebugNames::Header &Hdr) {
558-
uint32_t DwarfSize = (Format == llvm::dwarf::DwarfFormat::DWARF64) ? 8 : 4;
559-
uint64_t Offset = HdrSize;
560-
Offsets.CUsBase = Offset;
561-
Offset += Hdr.CompUnitCount * DwarfSize;
562-
Offset += Hdr.LocalTypeUnitCount * DwarfSize;
563-
Offset += Hdr.ForeignTypeUnitCount * 8;
564-
565-
Offsets.BucketsBase = Offset;
566-
Offset += Hdr.BucketCount * 4;
567-
568-
Offsets.HashesBase = Offset;
569-
if (Hdr.BucketCount > 0)
570-
Offset += Hdr.NameCount * 4;
571-
572-
Offsets.StringOffsetsBase = Offset;
573-
Offset += Hdr.NameCount * DwarfSize;
574-
575-
Offsets.EntryOffsetsBase = Offset;
576-
Offset += Hdr.NameCount * DwarfSize;
577-
578-
Offset += Hdr.AbbrevTableSize;
579-
Offsets.EntriesBase = Offset;
555+
DWARFDebugNames::DWARFDebugNamesOffsets
556+
dwarf::findDebugNamesOffsets(uint64_t EndOfHeaderOffset,
557+
const DWARFDebugNames::Header &Hdr) {
558+
uint64_t DwarfSize = getDwarfOffsetByteSize(Hdr.Format);
559+
DWARFDebugNames::DWARFDebugNamesOffsets Ret;
560+
Ret.CUsBase = EndOfHeaderOffset;
561+
Ret.BucketsBase = Ret.CUsBase + Hdr.CompUnitCount * DwarfSize +
562+
Hdr.LocalTypeUnitCount * DwarfSize +
563+
Hdr.ForeignTypeUnitCount * 8;
564+
Ret.HashesBase = Ret.BucketsBase + Hdr.BucketCount * 4;
565+
Ret.StringOffsetsBase =
566+
Ret.HashesBase + (Hdr.BucketCount > 0 ? Hdr.NameCount * 4 : 0);
567+
Ret.EntryOffsetsBase = Ret.StringOffsetsBase + Hdr.NameCount * DwarfSize;
568+
Ret.EntriesBase =
569+
Ret.EntryOffsetsBase + Hdr.NameCount * DwarfSize + Hdr.AbbrevTableSize;
570+
return Ret;
580571
}
581572

582573
Error DWARFDebugNames::NameIndex::extract() {
@@ -586,7 +577,7 @@ Error DWARFDebugNames::NameIndex::extract() {
586577
return E;
587578

588579
const unsigned SectionOffsetSize = dwarf::getDwarfOffsetByteSize(Hdr.Format);
589-
findDebugNamesOffsets(Offsets, hdrSize, Hdr.Format, Hdr);
580+
Offsets = dwarf::findDebugNamesOffsets(hdrSize, Hdr);
590581

591582
uint64_t Offset =
592583
Offsets.EntryOffsetsBase + (Hdr.NameCount * SectionOffsetSize);

0 commit comments

Comments
 (0)