[llvm] [BOLT] Fix failing tests by refactoring access to FileNameEntry to make it DWAFR version agnostic (PR #151401)
Grigory Pastukhov via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 30 14:51:16 PDT 2025
https://github.com/grigorypas created https://github.com/llvm/llvm-project/pull/151401
This PR fixes 3 failing tests on the master branch.
1. FileIndex starts from 1 in DWARF4 and from 0 in DWARF5. getFileNameEntry function abstracts that logic away.
2. perf_test.lds was crashing because the address of the first section was too low.
>From 3d427e60747a5d9f8b24993f0679fc13baf6f55c Mon Sep 17 00:00:00 2001
From: Grigory Pastukhov <gpastukhov at meta.com>
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<DWARFDebugLine::FileNameEntry> &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<const char *> DirName = dwarf::toString(
- LineTable->Prologue
- .IncludeDirectories[FileNames[FileIndex - 1].DirIdx - 1])) {
+ LineTable->Prologue.IncludeDirectories[FileNameEntry.DirIdx - 1])) {
Dir = *DirName;
}
}
StringRef FileName = "";
- if (std::optional<const char *> FName =
- dwarf::toString(FileNames[FileIndex - 1].Name))
+ if (std::optional<const char *> 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<const char *> 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
+}
More information about the llvm-commits
mailing list