From 3d427e60747a5d9f8b24993f0679fc13baf6f55c Mon Sep 17 00:00:00 2001 From: Grigory Pastukhov Date: Wed, 30 Jul 2025 14:44:29 -0700 Subject: [PATCH] Use getFileNameEntry for retrieving FileNameEntry DWARF version agnositc way --- bolt/lib/Core/BinaryContext.cpp | 18 +++++++----------- bolt/test/perf2bolt/Inputs/perf_test.lds | 11 +++++------ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/bolt/lib/Core/BinaryContext.cpp b/bolt/lib/Core/BinaryContext.cpp index 84f1853469709..3f6d27c751556 100644 --- a/bolt/lib/Core/BinaryContext.cpp +++ b/bolt/lib/Core/BinaryContext.cpp @@ -1568,23 +1568,19 @@ unsigned BinaryContext::addDebugFilenameToUnit(const uint32_t DestCUID, DWARFCompileUnit *SrcUnit = DwCtx->getCompileUnitForOffset(SrcCUID); const DWARFDebugLine::LineTable *LineTable = DwCtx->getLineTableForUnit(SrcUnit); - const std::vector &FileNames = - LineTable->Prologue.FileNames; - // Dir indexes start at 1, as DWARF file numbers, and a dir index 0 + const DWARFDebugLine::FileNameEntry &FileNameEntry = + LineTable->Prologue.getFileNameEntry(FileIndex); + // Dir indexes start at 1 and a dir index 0 // means empty dir. - assert(FileIndex > 0 && FileIndex <= FileNames.size() && - "FileIndex out of range for the compilation unit."); StringRef Dir = ""; - if (FileNames[FileIndex - 1].DirIdx != 0) { + if (FileNameEntry.DirIdx != 0) { if (std::optional DirName = dwarf::toString( - LineTable->Prologue - .IncludeDirectories[FileNames[FileIndex - 1].DirIdx - 1])) { + LineTable->Prologue.IncludeDirectories[FileNameEntry.DirIdx - 1])) { Dir = *DirName; } } StringRef FileName = ""; - if (std::optional FName = - dwarf::toString(FileNames[FileIndex - 1].Name)) + if (std::optional FName = dwarf::toString(FileNameEntry.Name)) FileName = *FName; assert(FileName != ""); DWARFCompileUnit *DstUnit = DwCtx->getCompileUnitForOffset(DestCUID); @@ -1925,7 +1921,7 @@ static void printDebugInfo(raw_ostream &OS, const MCInst &Instruction, const DWARFDebugLine::Row &Row = LineTable->Rows[RowRef.RowIndex - 1]; StringRef FileName = ""; if (std::optional FName = - dwarf::toString(LineTable->Prologue.FileNames[Row.File - 1].Name)) + dwarf::toString(LineTable->Prologue.getFileNameEntry(Row.File).Name)) FileName = *FName; OS << " # debug line " << FileName << ":" << Row.Line; if (Row.Column) diff --git a/bolt/test/perf2bolt/Inputs/perf_test.lds b/bolt/test/perf2bolt/Inputs/perf_test.lds index 66d925a05bebc..c2704d73a638c 100644 --- a/bolt/test/perf2bolt/Inputs/perf_test.lds +++ b/bolt/test/perf2bolt/Inputs/perf_test.lds @@ -1,13 +1,12 @@ SECTIONS { - . = SIZEOF_HEADERS; + . = 0x400000 + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } - . = 0x212e8; .dynsym : { *(.dynsym) } - . = 0x31860; + . = 0x801000; .text : { *(.text*) } - . = 0x41c20; + . = 0x803000; .fini_array : { *(.fini_array) } - . = 0x54e18; + . = 0x805000; .data : { *(.data) } -} \ No newline at end of file +}