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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits