[Lldb-commits] [lldb] [lldb] Fix section offset of synthesized entry point symbol (PR #190348)

Sergei Barannikov via lldb-commits lldb-commits at lists.llvm.org
Sat Apr 4 07:55:04 PDT 2026


https://github.com/s-barannikov updated https://github.com/llvm/llvm-project/pull/190348

>From 1e64368d920ea928e426e00c7c9f04cc0c46eac5 Mon Sep 17 00:00:00 2001
From: Sergei Barannikov <barannikov88 at gmail.com>
Date: Fri, 3 Apr 2026 17:16:23 +0300
Subject: [PATCH 1/2] [lldb] Fix section offset of synthesized entry point
 symbol

The offset was left unset in non-ARM case.
---
 lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 7cc782cf2823e..ffb3f915980ba 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -3333,7 +3333,7 @@ void ObjectFileELF::ParseSymtab(Symtab &lldb_symtab) {
           /*is_trampoline=*/false,
           /*is_artificial=*/true,
           /*section_sp=*/section_sp,
-          /*offset=*/0,
+          /*offset=*/entry_point_addr.GetOffset(),
           /*size=*/0, // FDE can span multiple symbols so don't use its size.
           /*size_is_valid=*/false,
           /*contains_linker_annotations=*/false,
@@ -3344,8 +3344,8 @@ void ObjectFileELF::ParseSymtab(Symtab &lldb_symtab) {
       // address.
       if (arch.GetMachine() == llvm::Triple::arm &&
           (entry_point_file_addr & 1)) {
-        symbol.GetAddressRef().SetOffset(entry_point_addr.GetOffset() ^ 1);
-        m_address_class_map[entry_point_file_addr ^ 1] =
+        symbol.GetAddressRef().Slide(-1);
+        m_address_class_map[entry_point_file_addr - 1] =
             AddressClass::eCodeAlternateISA;
       } else {
         m_address_class_map[entry_point_file_addr] = AddressClass::eCode;

>From 983639687587494adcb5bfe1aed2c490cf0843d2 Mon Sep 17 00:00:00 2001
From: Sergei Barannikov <barannikov88 at gmail.com>
Date: Sat, 4 Apr 2026 17:53:14 +0300
Subject: [PATCH 2/2] Add a test

---
 .../ObjectFile/ELF/TestObjectFileELF.cpp      | 37 +++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
index 21c94c5634109..6da2663ff3ae4 100644
--- a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
+++ b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
@@ -191,6 +191,43 @@ TEST_F(ObjectFileELFTest, GetModuleSpecifications_OffsetSizeWithOffsetFile) {
   EXPECT_EQ(FileSystem::Instance().GetByteSize(FileSpec(SO)), 4640UL);
 }
 
+TEST_F(ObjectFileELFTest, GetSymtab_SynthesizedEntryPointSymbol) {
+  auto ExpectedFile = TestFile::fromYaml(R"(
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS32
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_SPARC
+  Entry:           0x0000000000000042
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x0000000000000020
+    Size:            0x0000000000000040
+...
+)");
+  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());
+
+  auto module_sp = std::make_shared<Module>(ExpectedFile->moduleSpec());
+
+  Symtab *symtab = module_sp->GetSymtab();
+  ASSERT_NE(symtab, nullptr);
+
+  // Check that the entry point symbol was synthesized.
+  Symbol *entry_sym = symtab->FindSymbolAtFileAddress(0x42);
+  ASSERT_TRUE(entry_sym);
+  EXPECT_TRUE(entry_sym->IsSyntheticWithAutoGeneratedName());
+
+  // Check that the symbol has the correct section+offset address.
+  ASSERT_TRUE(entry_sym->ValueIsAddress());
+  Address entry_sym_addr = entry_sym->GetAddress();
+  ASSERT_TRUE(entry_sym_addr.IsSectionOffset());
+  EXPECT_EQ(entry_sym_addr.GetSection()->GetName(), ".text");
+  EXPECT_EQ(entry_sym_addr.GetOffset(), 0x42U - 0x20U);
+}
+
 TEST_F(ObjectFileELFTest, GetSymtab_NoSymEntryPointArmThumbAddressClass) {
   /*
   // nosym-entrypoint-arm-thumb.s



More information about the lldb-commits mailing list