Skip to content

Commit 0570498

Browse files
committed
[lldb] Move resolvePointer code to resolvePointerAsSymbol
resolvePointerAsSymbol is executed before any memory read is done, so move the code that does this to it.
1 parent a9a5fb5 commit 0570498

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,25 +119,22 @@ LLDBMemoryReader::getSymbolAddress(const std::string &name) {
119119
return swift::remote::RemoteAddress(load_addr);
120120
}
121121

122-
swift::remote::RemoteAbsolutePointer
123-
LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address,
124-
uint64_t readValue) {
122+
llvm::Optional<swift::remote::RemoteAbsolutePointer>
123+
LLDBMemoryReader::resolvePointerAsSymbol(swift::remote::RemoteAddress address) {
125124
// If an address has a symbol, that symbol provides additional useful data to
126125
// MetadataReader. Without the symbol, MetadataReader can derive the symbol
127126
// by loading other parts of reflection metadata, but that work has a cost.
128127
// For lldb, that data loading can be a significant performance hit. Providing
129128
// a symbol greatly reduces memory read traffic to the process.
130-
auto pointer = swift::remote::RemoteAbsolutePointer("", readValue);
131-
132129
auto &target = m_process.GetTarget();
133130
if (!target.GetSwiftUseReflectionSymbols())
134-
return pointer;
131+
return {};
135132

136133
llvm::Optional<Address> maybeAddr =
137134
resolveRemoteAddress(address.getAddressData());
138135
// This is not an assert, but should never happen.
139136
if (!maybeAddr)
140-
return pointer;
137+
return {};
141138

142139
Address addr;
143140
if (maybeAddr->IsSectionOffset()) {
@@ -146,21 +143,21 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address,
146143
} else {
147144
// `address` is a real load address.
148145
if (!target.ResolveLoadAddress(address.getAddressData(), addr))
149-
return pointer;
146+
return {};
150147
}
151148

152149
if (!addr.GetSection()->CanContainSwiftReflectionData())
153-
return pointer;
150+
return {};
154151

155152
if (auto *symbol = addr.CalculateSymbolContextSymbol()) {
156153
auto mangledName = symbol->GetMangled().GetMangledName().GetStringRef();
157154
// MemoryReader requires this to be a Swift symbol. LLDB can also be
158155
// aware of local symbols, so avoid returning those.
159156
if (swift::Demangle::isSwiftSymbol(mangledName))
160-
return {mangledName, 0};
157+
return {{mangledName, 0}};
161158
}
162159

163-
return pointer;
160+
return {};
164161
}
165162

166163
bool LLDBMemoryReader::readBytes(swift::remote::RemoteAddress address,

lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ class LLDBMemoryReader : public swift::remote::MemoryReader {
2323
swift::remote::RemoteAddress
2424
getSymbolAddress(const std::string &name) override;
2525

26-
swift::remote::RemoteAbsolutePointer
27-
resolvePointer(swift::remote::RemoteAddress address,
28-
uint64_t readValue) override;
26+
llvm::Optional<swift::remote::RemoteAbsolutePointer>
27+
resolvePointerAsSymbol(swift::remote::RemoteAddress address) override;
2928

3029
bool readBytes(swift::remote::RemoteAddress address, uint8_t *dest,
3130
uint64_t size) override;

0 commit comments

Comments
 (0)