aprantl created this revision.
aprantl added reviewers: jasonmolenda, jingham, JDevlieghere.
aprantl requested review of this revision.

The Swift stdlib uses absolute symbols in the dylib to communicate feature 
flags to the process. LLDB's expression evaluator needs to be able to find 
them. This wires up absolute symbols so they show up in the symtab lookup 
command, which is also all that's needed for them to be visible to the 
expression evaluator JIT.

rdar://85093828


https://reviews.llvm.org/D113445

Files:
  lldb/source/Symbol/Symbol.cpp
  lldb/source/Symbol/Symtab.cpp
  lldb/test/Shell/SymbolFile/absolute-symbol.s


Index: lldb/test/Shell/SymbolFile/absolute-symbol.s
===================================================================
--- /dev/null
+++ lldb/test/Shell/SymbolFile/absolute-symbol.s
@@ -0,0 +1,7 @@
+# RUN: %clang %s -g -c -o %t.o
+# RUN: %lldb -b -o 'target modules lookup -s absolute_symbol' %t.o | FileCheck 
%s
+# CHECK: 1 symbols match 'absolute_symbol'
+# CHECK:   Address: 0x0000000012345678 (0x0000000012345678)
+# CHECK:   Summary: 0x0000000012345678
+.globl absolute_symbol
+absolute_symbol = 0x12345678
Index: lldb/source/Symbol/Symtab.cpp
===================================================================
--- lldb/source/Symbol/Symtab.cpp
+++ lldb/source/Symbol/Symtab.cpp
@@ -1100,6 +1100,7 @@
           case eSymbolTypeCode:
           case eSymbolTypeResolver:
           case eSymbolTypeReExported:
+          case eSymbolTypeAbsolute:
             symbol_indexes.push_back(temp_symbol_indexes[i]);
             break;
           default:
Index: lldb/source/Symbol/Symbol.cpp
===================================================================
--- lldb/source/Symbol/Symbol.cpp
+++ lldb/source/Symbol/Symbol.cpp
@@ -115,7 +115,8 @@
 }
 
 bool Symbol::ValueIsAddress() const {
-  return m_addr_range.GetBaseAddress().GetSection().get() != nullptr;
+  return m_addr_range.GetBaseAddress().GetSection().get() != nullptr ||
+         m_type == eSymbolTypeAbsolute;
 }
 
 ConstString Symbol::GetDisplayName() const {


Index: lldb/test/Shell/SymbolFile/absolute-symbol.s
===================================================================
--- /dev/null
+++ lldb/test/Shell/SymbolFile/absolute-symbol.s
@@ -0,0 +1,7 @@
+# RUN: %clang %s -g -c -o %t.o
+# RUN: %lldb -b -o 'target modules lookup -s absolute_symbol' %t.o | FileCheck %s
+# CHECK: 1 symbols match 'absolute_symbol'
+# CHECK:   Address: 0x0000000012345678 (0x0000000012345678)
+# CHECK:   Summary: 0x0000000012345678
+.globl absolute_symbol
+absolute_symbol = 0x12345678
Index: lldb/source/Symbol/Symtab.cpp
===================================================================
--- lldb/source/Symbol/Symtab.cpp
+++ lldb/source/Symbol/Symtab.cpp
@@ -1100,6 +1100,7 @@
           case eSymbolTypeCode:
           case eSymbolTypeResolver:
           case eSymbolTypeReExported:
+          case eSymbolTypeAbsolute:
             symbol_indexes.push_back(temp_symbol_indexes[i]);
             break;
           default:
Index: lldb/source/Symbol/Symbol.cpp
===================================================================
--- lldb/source/Symbol/Symbol.cpp
+++ lldb/source/Symbol/Symbol.cpp
@@ -115,7 +115,8 @@
 }
 
 bool Symbol::ValueIsAddress() const {
-  return m_addr_range.GetBaseAddress().GetSection().get() != nullptr;
+  return m_addr_range.GetBaseAddress().GetSection().get() != nullptr ||
+         m_type == eSymbolTypeAbsolute;
 }
 
 ConstString Symbol::GetDisplayName() const {
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
  • [Lldb-commits] [PATCH] ... Adrian Prantl via Phabricator via lldb-commits

Reply via email to