Skip to content

Commit 5f72070

Browse files
adrian-prantlAnthonyLatsis
authored andcommitted
[lldb] Adapt lldb to new swift::remote::RemoteAbsolutePointer interface
(cherry picked from commit 4dc8b19)
1 parent 78fe2cf commit 5f72070

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ LLDBMemoryReader::resolvePointerAsSymbol(swift::remote::RemoteAddress address) {
214214
// aware of local symbols, so avoid returning those.
215215
using namespace swift::Demangle;
216216
if (isSwiftSymbol(mangledName) && !isOldFunctionTypeMangling(mangledName))
217-
return {{mangledName, 0}};
217+
return swift::remote::RemoteAbsolutePointer{mangledName, 0, address};
218218
}
219219

220220
return {};
@@ -228,15 +228,16 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address,
228228
// We may have gotten a pointer to a process address, try to map it back
229229
// to a tagged address so further memory reads originating from it benefit
230230
// from the file-cache optimization.
231-
swift::remote::RemoteAbsolutePointer process_pointer("", readValue);
231+
swift::remote::RemoteAbsolutePointer process_pointer{
232+
swift::remote::RemoteAddress{readValue}};
232233

233234
if (!readMetadataFromFileCacheEnabled())
234235
return process_pointer;
235236

236237
// Try to strip the pointer before checking if we have it mapped.
237238
auto strippedPointer = signedPointerStripper(process_pointer);
238-
if (strippedPointer.isResolved())
239-
readValue = strippedPointer.getOffset();
239+
if (auto resolved = strippedPointer.getResolvedAddress())
240+
readValue = resolved.getAddressData();
240241

241242
auto &target = m_process.GetTarget();
242243
Address addr;
@@ -294,9 +295,12 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address,
294295
return process_pointer;
295296
}
296297

297-
swift::remote::RemoteAbsolutePointer tagged_pointer("", tagged_address);
298-
if (tagged_address !=
299-
(uint64_t)signedPointerStripper(tagged_pointer).getOffset()) {
298+
swift::remote::RemoteAbsolutePointer tagged_pointer{
299+
swift::remote::RemoteAddress{tagged_address}};
300+
301+
if (tagged_address != (uint64_t)signedPointerStripper(tagged_pointer)
302+
.getResolvedAddress()
303+
.getAddressData()) {
300304
lldbassert(false &&
301305
"Tagged pointer runs into pointer authentication mask!");
302306
return process_pointer;
@@ -528,9 +532,11 @@ LLDBMemoryReader::addModuleToAddressMap(ModuleSP module,
528532
auto module_end_address = module_start_address + size;
529533

530534
if (module_end_address !=
531-
(uint64_t)signedPointerStripper(
532-
swift::remote::RemoteAbsolutePointer("", module_end_address))
533-
.getOffset()) {
535+
signedPointerStripper(
536+
swift::remote::RemoteAbsolutePointer{
537+
swift::remote::RemoteAddress{module_end_address}})
538+
.getResolvedAddress()
539+
.getAddressData()) {
534540
LLDB_LOG(GetLog(LLDBLog::Types),
535541
"[MemoryReader] module to address map ran into pointer "
536542
"authentication mask!");

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2077,10 +2077,11 @@ CompilerType SwiftLanguageRuntime::GetDynamicTypeAndAddress_EmbeddedClass(
20772077
if (!pointer)
20782078
return {};
20792079
llvm::StringRef symbol_name;
2080-
if (pointer->isResolved()) {
2080+
if (pointer->getSymbol().empty() || pointer->getOffset()) {
20812081
// Find the symbol name at this address.
20822082
Address address;
2083-
address.SetLoadAddress(pointer->getOffset(), &GetProcess().GetTarget());
2083+
address.SetLoadAddress(pointer->getResolvedAddress().getAddressData(),
2084+
&GetProcess().GetTarget());
20842085
Symbol *symbol = address.CalculateSymbolContextSymbol();
20852086
if (!symbol)
20862087
return {};
@@ -2377,8 +2378,9 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23772378
return false;
23782379

23792380
uint64_t address = 0;
2380-
if (maybe_addr_or_symbol->isResolved()) {
2381-
address = maybe_addr_or_symbol->getOffset();
2381+
if (maybe_addr_or_symbol->getSymbol().empty() &&
2382+
maybe_addr_or_symbol->getOffset() == 0) {
2383+
address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
23822384
} else {
23832385
SymbolContextList sc_list;
23842386
auto &module_list = GetProcess().GetTarget().GetImages();
@@ -2397,7 +2399,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23972399
GetDynamicTypeAndAddress_EmbeddedClass(address, existential_type);
23982400
if (!dynamic_type)
23992401
return false;
2400-
dynamic_address = maybe_addr_or_symbol->getOffset();
2402+
dynamic_address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
24012403
}
24022404
if (use_local_buffer)
24032405
PopLocalBuffer();

0 commit comments

Comments
 (0)