https://github.com/barsolo2000 updated 
https://github.com/llvm/llvm-project/pull/154809

>From f378e6a09487eca27d4741bc527c578b8fb8d161 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Wed, 20 Aug 2025 14:54:52 -0700
Subject: [PATCH 1/6] added helper function

---
 .../source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp 
b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index f69358de6a288..37983cfef0a2e 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2037,6 +2037,19 @@ static char FindArmAarch64MappingSymbol(const char 
*symbol_name) {
   return '\0';
 }
 
+static char FindRISCVMappingSymbol(const char *symbol_name) {
+  if (!symbol_name)
+    return '\0';
+
+  if (symbol_name.size() == 2 && symbol_name[0] == '$'){
+    char c = symbol_name[1];
+    if (c == 'd' || c == 'x'){
+      return c;
+    }
+  return '\0';
+  }
+}
+
 #define STO_MIPS_ISA (3 << 6)
 #define STO_MICROMIPS (2 << 6)
 #define IS_MICROMIPS(ST_OTHER) (((ST_OTHER)&STO_MIPS_ISA) == STO_MICROMIPS)

>From b88812ae8e4a7647258360985721fa6b1ada0614 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Thu, 21 Aug 2025 10:51:17 -0700
Subject: [PATCH 2/6] fixed format

---
 .../Plugins/ObjectFile/ELF/ObjectFileELF.cpp  | 44 ++++++++++++++-----
 1 file changed, 33 insertions(+), 11 deletions(-)

diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp 
b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 37983cfef0a2e..99744b25ea66f 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2041,13 +2041,12 @@ static char FindRISCVMappingSymbol(const char 
*symbol_name) {
   if (!symbol_name)
     return '\0';
 
-  if (symbol_name.size() == 2 && symbol_name[0] == '$'){
-    char c = symbol_name[1];
-    if (c == 'd' || c == 'x'){
-      return c;
-    }
-  return '\0';
+  if (symbol_name[0] == '$' &&
+      (symbol_name[1] == 'd' || symbol_name[1] == 'x') &&
+      symbol_name[2] == '\0') {
+    return symbol_name[1];
   }
+  return '\0';
 }
 
 #define STO_MIPS_ISA (3 << 6)
@@ -2115,11 +2114,13 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
     if (!symbol_name)
       symbol_name = "";
 
+    if (symbol_name[0] == '.' && symbol_name[1] == 'L')
+      continue;
     // No need to add non-section symbols that have no names
     if (symbol.getType() != STT_SECTION &&
         (symbol_name == nullptr || symbol_name[0] == '\0'))
       continue;
-
+    
     // Skipping oatdata and oatexec sections if it is requested. See details
     // above the definition of skip_oatdata_oatexec for the reasons.
     if (skip_oatdata_oatexec && (::strcmp(symbol_name, "oatdata") == 0 ||
@@ -2203,9 +2204,9 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
 
     int64_t symbol_value_offset = 0;
     uint32_t additional_flags = 0;
-
+    llvm::Triple::ArchType arch_machine = arch.GetMachine();
     if (arch.IsValid()) {
-      if (arch.GetMachine() == llvm::Triple::arm) {
+      if (arch_machine == llvm::Triple::arm) {
         if (symbol.getBinding() == STB_LOCAL) {
           char mapping_symbol = FindArmAarch64MappingSymbol(symbol_name);
           if (symbol_type == eSymbolTypeCode) {
@@ -2230,7 +2231,7 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
           if (mapping_symbol)
             continue;
         }
-      } else if (arch.GetMachine() == llvm::Triple::aarch64) {
+      } else if (arch_machine == llvm::Triple::aarch64) {
         if (symbol.getBinding() == STB_LOCAL) {
           char mapping_symbol = FindArmAarch64MappingSymbol(symbol_name);
           if (symbol_type == eSymbolTypeCode) {
@@ -2248,9 +2249,30 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
           if (mapping_symbol)
             continue;
         }
+      } else if (arch_machine == llvm::Triple::riscv32 ||
+                 arch_machine == llvm::Triple::riscv64 ||
+                 arch_machine == llvm::Triple::riscv32be ||
+                 arch_machine == llvm::Triple::riscv64be) {
+        if (symbol.getBinding() == STB_LOCAL) {
+          char mapping_symbol = FindRISCVMappingSymbol(symbol_name);
+          if (symbol_type == eSymbolTypeCode) {
+            switch (mapping_symbol) {
+            case 'x':
+              // $x - marks a RISCV instruction sequence
+              address_class_map[symbol.st_value] = AddressClass::eCode;
+              break;
+            case 'd':
+              // $d - marks a RISCV data item sequence
+              address_class_map[symbol.st_value] = AddressClass::eData;
+              break;
+            }
+          }
+          if (mapping_symbol)
+            continue;
+        }
       }
 
-      if (arch.GetMachine() == llvm::Triple::arm) {
+      if (arch_machine == llvm::Triple::arm) {
         if (symbol_type == eSymbolTypeCode) {
           if (symbol.st_value & 1) {
             // Subtracting 1 from the address effectively unsets the low order

>From 9262c0fe32449981dc9de5693a1ec8eed835da84 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Thu, 21 Aug 2025 11:05:14 -0700
Subject: [PATCH 3/6] format

---
 lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp 
b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 99744b25ea66f..40e38e46870bf 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2120,7 +2120,6 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
     if (symbol.getType() != STT_SECTION &&
         (symbol_name == nullptr || symbol_name[0] == '\0'))
       continue;
-    
     // Skipping oatdata and oatexec sections if it is requested. See details
     // above the definition of skip_oatdata_oatexec for the reasons.
     if (skip_oatdata_oatexec && (::strcmp(symbol_name, "oatdata") == 0 ||

>From d06d40853dd38d89eb5d058da292f3174b24bce7 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Thu, 21 Aug 2025 11:06:00 -0700
Subject: [PATCH 4/6] format

---
 lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp 
b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 40e38e46870bf..cfa446d185b14 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2120,6 +2120,7 @@ ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t 
start_id,
     if (symbol.getType() != STT_SECTION &&
         (symbol_name == nullptr || symbol_name[0] == '\0'))
       continue;
+
     // Skipping oatdata and oatexec sections if it is requested. See details
     // above the definition of skip_oatdata_oatexec for the reasons.
     if (skip_oatdata_oatexec && (::strcmp(symbol_name, "oatdata") == 0 ||

>From e6bf2f1d2809881a4d10b55f69df7969c449a3d8 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Thu, 21 Aug 2025 14:43:45 -0700
Subject: [PATCH 5/6] added test

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

diff --git a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp 
b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
index 80abc5b80f84d..65b324363b2ef 100644
--- a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
+++ b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
@@ -308,3 +308,78 @@ TEST_F(ObjectFileELFTest, 
GetSymtab_NoSymEntryPointArmAddressClass) {
   auto entry_point_addr = module_sp->GetObjectFile()->GetEntryPointAddress();
   ASSERT_EQ(entry_point_addr.GetAddressClass(), AddressClass::eCode);
 }
+
+TEST_F(ObjectFileELFTest, SkipsLocalMappingAndDotLSymbols) {
+  auto ExpectedFile = TestFile::fromYaml(R"(
+--- !ELF
+  FileHeader:
+    Class:           ELFCLASS64
+    Data:            ELFDATA2LSB
+    Type:            ET_EXEC
+    Machine:         EM_RISCV
+    Flags:           [ EF_RISCV_RVC, EF_RISCV_FLOAT_ABI_SINGLE ]
+    Entry:           0xC0A1B010
+  Sections:
+    - Name:            .text
+      Type:            SHT_PROGBITS
+      Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+      Address:         0x0000000000400180
+      AddressAlign:    0x0000000000000010
+      Content:         554889E5
+    - Name:            .data
+      Type:            SHT_PROGBITS
+      Flags:           [ SHF_WRITE, SHF_ALLOC ]
+      Address:         0x0000000000601000
+      AddressAlign:    0x0000000000000004
+      Content:         2F000000
+  Symbols:
+    - Name:            $d
+      Type:            STT_FUNC
+      Section:         .text
+      Value:           0x0000000000400180
+      Size:            0x10
+      Binding:         STB_LOCAL
+    - Name:            $x
+      Type:            STT_FUNC
+      Section:         .text
+      Value:           0xC0A1B010
+      Size:            0x10
+      Binding:         STB_LOCAL
+    - Name:            .Lfoo
+      Type:            STT_OBJECT
+      Section:         .data
+      Value:           0x0000000000601000
+      Size:            0x4
+      Binding:         STB_LOCAL
+    - Name:            global_func
+      Type:            STT_FUNC
+      Section:         .text
+      Value:           0x00000000004001A0
+      Size:            0x10
+      Binding:         STB_GLOBAL
+    - Name:            global_obj
+      Type:            STT_OBJECT
+      Section:         .data
+      Value:           0x0000000000601004
+      Size:            0x4
+      Binding:         STB_GLOBAL
+...
+  )");
+  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());
+  auto module_sp = std::make_shared<Module>(ExpectedFile->moduleSpec());
+  auto *symtab = module_sp->GetSymtab();
+  ASSERT_NE(nullptr, symtab);
+  EXPECT_EQ(nullptr, module_sp->FindFirstSymbolWithNameAndType(
+                         ConstString("$d"), eSymbolTypeAny));
+  EXPECT_EQ(nullptr, module_sp->FindFirstSymbolWithNameAndType(
+                         ConstString("$x"), eSymbolTypeAny));
+  EXPECT_EQ(nullptr, module_sp->FindFirstSymbolWithNameAndType(
+                         ConstString(".Lfoo"), eSymbolTypeAny));
+  // assert that other symbols are present
+  const Symbol *global_func = module_sp->FindFirstSymbolWithNameAndType(
+      ConstString("global_func"), eSymbolTypeAny);
+  ASSERT_NE(nullptr, global_func);
+  const Symbol *global_obj = module_sp->FindFirstSymbolWithNameAndType(
+      ConstString("global_obj"), eSymbolTypeAny);
+  ASSERT_NE(nullptr, global_obj);
+}
\ No newline at end of file

>From 06278827aa0ed44fb6f3f90eeabc76628e7ec587 Mon Sep 17 00:00:00 2001
From: Bar Soloveychik <bars...@fb.com>
Date: Thu, 21 Aug 2025 14:47:42 -0700
Subject: [PATCH 6/6] format

---
 lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp 
b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
index 65b324363b2ef..9af0aeb9bab50 100644
--- a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
+++ b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
@@ -382,4 +382,4 @@ TEST_F(ObjectFileELFTest, SkipsLocalMappingAndDotLSymbols) {
   const Symbol *global_obj = module_sp->FindFirstSymbolWithNameAndType(
       ConstString("global_obj"), eSymbolTypeAny);
   ASSERT_NE(nullptr, global_obj);
-}
\ No newline at end of file
+}

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to