Skip to content

Commit 2542856

Browse files
committed
[lldb][Target] Refactor Target::FindLoadAddr
`Target::FindLoadAddrForNameInSymbolsAndPersistentVariables` has been split into `Target::FindLoadAddrForNameInSymbols` and `Target::FindLoadAddrForNameInPersistentVariables`. Instead of performing both searches in one function, `Target::FindLoadAddrForNameInSymbolsAndPersistentVariables` will call its constituent functions. This allows `SwiftLanguageRuntime::FindSymbolForSwiftObject` to look for symbols with `Target::FindLoadAddrForNameInSymbols` instead of performing this search on its own. rdar://32228544
1 parent 2037e2a commit 2542856

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed

lldb/include/lldb/Target/Target.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,6 +1355,12 @@ class Target : public std::enable_shared_from_this<Target>,
13551355
const EvaluateExpressionOptions &options = EvaluateExpressionOptions(),
13561356
std::string *fixed_expression = nullptr, ValueObject *ctx_obj = nullptr);
13571357

1358+
lldb::addr_t FindLoadAddrForNameInSymbols(
1359+
ConstString name_const_str, lldb::SymbolType symbol_type);
1360+
1361+
lldb::addr_t FindLoadAddrForNameInPersistentVariables(
1362+
ConstString name_const_str, lldb::SymbolType symbol_type);
1363+
13581364
// Look up a symbol by name and type in both the target's symbols and the
13591365
// persistent symbols from the
13601366
// expression parser. The symbol_type is ignored in that case, for now we

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -180,19 +180,9 @@ FindSymbolForSwiftObject(Process &process, RuntimeKind runtime_kind,
180180
return {};
181181
}
182182

183-
SymbolContextList sc_list;
184-
image->FindSymbolsWithNameAndType(ConstString(object), sym_type, sc_list);
185-
if (sc_list.GetSize() != 1)
186-
return {};
187-
188-
SymbolContext SwiftObject_Class;
189-
if (!sc_list.GetContextAtIndex(0, SwiftObject_Class))
190-
return {};
191-
if (!SwiftObject_Class.symbol)
192-
return {};
193183
lldb::addr_t addr =
194-
SwiftObject_Class.symbol->GetAddress().GetLoadAddress(&target);
195-
if (addr && addr != LLDB_INVALID_ADDRESS)
184+
target.FindLoadAddrForNameInSymbols(ConstString(object), sym_type);
185+
if (addr != LLDB_INVALID_ADDRESS)
196186
return addr;
197187

198188
return {};

lldb/source/Target/Target.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3693,8 +3693,8 @@ bool Target::SetSectionUnloaded(const lldb::SectionSP &section_sp,
36933693

36943694
void Target::ClearAllLoadedSections() { m_section_load_history.Clear(); }
36953695

3696-
lldb::addr_t Target::FindLoadAddrForNameInSymbolsAndPersistentVariables(
3697-
ConstString name_const_str, SymbolType symbol_type) {
3696+
lldb::addr_t Target::FindLoadAddrForNameInSymbols(ConstString name_const_str,
3697+
SymbolType symbol_type) {
36983698
lldb::addr_t symbol_addr = LLDB_INVALID_ADDRESS;
36993699
SymbolContextList sc_list;
37003700

@@ -3720,25 +3720,43 @@ lldb::addr_t Target::FindLoadAddrForNameInSymbolsAndPersistentVariables(
37203720
}
37213721
}
37223722
}
3723+
return symbol_addr;
3724+
}
37233725

3724-
if (symbol_addr == LLDB_INVALID_ADDRESS) {
3725-
// If we didn't find it in the symbols, check the ClangPersistentVariables,
3726-
// 'cause we may have
3727-
// made it by hand.
3728-
ConstString mangled_const_str;
3729-
if (name_const_str.GetMangledCounterpart(mangled_const_str))
3730-
symbol_addr = GetPersistentSymbol(mangled_const_str);
3726+
lldb::addr_t
3727+
Target::FindLoadAddrForNameInPersistentVariables(ConstString name_const_str,
3728+
lldb::SymbolType symbol_type) {
3729+
lldb::addr_t symbol_addr = LLDB_INVALID_ADDRESS;
3730+
ConstString mangled_const_str;
3731+
3732+
if (name_const_str.GetMangledCounterpart(mangled_const_str)) {
3733+
symbol_addr = GetPersistentSymbol(mangled_const_str);
37313734
}
37323735

3736+
// Check in persistent variables using the name that was passed in
37333737
if (symbol_addr == LLDB_INVALID_ADDRESS) {
3734-
// Let's try looking for the name passed-in itself, as it might be a mangled
3735-
// name
37363738
symbol_addr = GetPersistentSymbol(name_const_str);
37373739
}
37383740

37393741
return symbol_addr;
37403742
}
37413743

3744+
lldb::addr_t Target::FindLoadAddrForNameInSymbolsAndPersistentVariables(
3745+
ConstString name_const_str, SymbolType symbol_type) {
3746+
lldb::addr_t symbol_addr = LLDB_INVALID_ADDRESS;
3747+
3748+
// Try to find the name in the symbol list
3749+
symbol_addr =
3750+
Target::FindLoadAddrForNameInSymbols(name_const_str, symbol_type);
3751+
3752+
// If that doesn't work, look for it in persistent variables
3753+
if (symbol_addr == LLDB_INVALID_ADDRESS)
3754+
Target::FindLoadAddrForNameInPersistentVariables(name_const_str,
3755+
symbol_type);
3756+
3757+
return symbol_addr;
3758+
}
3759+
37423760
void Target::SaveScriptedLaunchInfo(lldb_private::ProcessInfo &process_info) {
37433761
if (process_info.IsScriptedProcess()) {
37443762
// Only copy scripted process launch options.

0 commit comments

Comments
 (0)