From f70eb6233daf549efeadfbb59ad9778d8caec93f Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Wed, 23 Mar 2022 12:57:00 -0700 Subject: [PATCH] Implement DLQ_GetPtrAuthMask using info from debugserver. rdar://90718091 (cherry picked from commit 352ab19e56f58f251227b51be73fa90d5defb3a6) --- .../LanguageRuntime/Swift/LLDBMemoryReader.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp index 50ce774ba1a1e..51a2a40c3f6a6 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp @@ -12,9 +12,17 @@ namespace lldb_private { bool LLDBMemoryReader::queryDataLayout(DataLayoutQueryType type, void *inBuffer, void *outBuffer) { switch (type) { - // FIXME: add support for case DLQ_GetPtrAuthMask rdar://70729149 - case DLQ_GetPtrAuthMask: - return false; + case DLQ_GetPtrAuthMask: { + assert(m_process.GetCodeAddressMask() == m_process.GetDataAddressMask() && + "not supported"); + lldb::addr_t ptrauth_mask = m_process.GetCodeAddressMask(); + if (!ptrauth_mask) + return false; + // The mask returned by the process masks out the non-addressable bits. + uint64_t mask_pattern = ~ptrauth_mask; + memcpy(outBuffer, &mask_pattern, sizeof(uint64_t)); + return true; + } case DLQ_GetObjCReservedLowBits: { auto *result = static_cast(outBuffer); auto &triple = m_process.GetTarget().GetArchitecture().GetTriple();