Skip to content

Commit 553231e

Browse files
adrian-prantlaugusto2112
authored andcommitted
[lldb] Adapt lldb to new swift::remote::RemoteAbsolutePointer interface
(cherry picked from commit 4dc8b19)
1 parent 8b8af30 commit 553231e

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
@@ -2034,10 +2034,11 @@ CompilerType SwiftLanguageRuntime::GetDynamicTypeAndAddress_EmbeddedClass(
20342034
if (!pointer)
20352035
return {};
20362036
llvm::StringRef symbol_name;
2037-
if (pointer->isResolved()) {
2037+
if (pointer->getSymbol().empty() || pointer->getOffset()) {
20382038
// Find the symbol name at this address.
20392039
Address address;
2040-
address.SetLoadAddress(pointer->getOffset(), &GetProcess().GetTarget());
2040+
address.SetLoadAddress(pointer->getResolvedAddress().getAddressData(),
2041+
&GetProcess().GetTarget());
20412042
Symbol *symbol = address.CalculateSymbolContextSymbol();
20422043
if (!symbol)
20432044
return {};
@@ -2338,8 +2339,9 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23382339
return false;
23392340

23402341
uint64_t address = 0;
2341-
if (maybe_addr_or_symbol->isResolved()) {
2342-
address = maybe_addr_or_symbol->getOffset();
2342+
if (maybe_addr_or_symbol->getSymbol().empty() &&
2343+
maybe_addr_or_symbol->getOffset() == 0) {
2344+
address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
23432345
} else {
23442346
SymbolContextList sc_list;
23452347
auto &module_list = GetProcess().GetTarget().GetImages();
@@ -2358,7 +2360,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23582360
GetDynamicTypeAndAddress_EmbeddedClass(address, existential_type);
23592361
if (!dynamic_type)
23602362
return false;
2361-
dynamic_address = maybe_addr_or_symbol->getOffset();
2363+
dynamic_address = maybe_addr_or_symbol->getResolvedAddress().getAddressData();
23622364
}
23632365
class_type_or_name.SetCompilerType(dynamic_type);
23642366
address.SetRawAddress(dynamic_address);

0 commit comments

Comments
 (0)