Skip to content

Commit 98dd82d

Browse files
Merge pull request #10865 from adrian-prantl/153687085-lldb
[lldb] Adapt lldb to new swift::remote::RemoteAbsolutePointer interface
2 parents 5246b24 + 4dc8b19 commit 98dd82d

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;
@@ -293,9 +294,12 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address,
293294
return process_pointer;
294295
}
295296

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

536540
if (module_end_address !=
537-
(uint64_t)signedPointerStripper(
538-
swift::remote::RemoteAbsolutePointer("", module_end_address))
539-
.getOffset()) {
541+
signedPointerStripper(
542+
swift::remote::RemoteAbsolutePointer{
543+
swift::remote::RemoteAddress{module_end_address}})
544+
.getResolvedAddress()
545+
.getAddressData()) {
540546
LLDB_LOG(GetLog(LLDBLog::Types),
541547
"[MemoryReader] module to address map ran into pointer "
542548
"authentication mask!");

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,10 +2033,11 @@ CompilerType SwiftLanguageRuntime::GetDynamicTypeAndAddress_EmbeddedClass(
20332033
if (!pointer)
20342034
return {};
20352035
llvm::StringRef symbol_name;
2036-
if (pointer->isResolved()) {
2036+
if (pointer->getSymbol().empty() || pointer->getOffset()) {
20372037
// Find the symbol name at this address.
20382038
Address address;
2039-
address.SetLoadAddress(pointer->getOffset(), &GetProcess().GetTarget());
2039+
address.SetLoadAddress(pointer->getResolvedAddress().getAddressData(),
2040+
&GetProcess().GetTarget());
20402041
Symbol *symbol = address.CalculateSymbolContextSymbol();
20412042
if (!symbol)
20422043
return {};
@@ -2337,8 +2338,9 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23372338
return false;
23382339

23392340
uint64_t address = 0;
2340-
if (maybe_addr_or_symbol->isResolved()) {
2341-
address = maybe_addr_or_symbol->getOffset();
2341+
if (maybe_addr_or_symbol->getSymbol().empty() &&
2342+
maybe_addr_or_symbol->getOffset() == 0) {
2343+
address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
23422344
} else {
23432345
SymbolContextList sc_list;
23442346
auto &module_list = GetProcess().GetTarget().GetImages();
@@ -2357,7 +2359,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23572359
GetDynamicTypeAndAddress_EmbeddedClass(address, existential_type);
23582360
if (!dynamic_type)
23592361
return false;
2360-
dynamic_address = maybe_addr_or_symbol->getOffset();
2362+
dynamic_address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
23612363
}
23622364
class_type_or_name.SetCompilerType(dynamic_type);
23632365
address.SetRawAddress(dynamic_address);

0 commit comments

Comments
 (0)