Skip to content

Commit 1677e3b

Browse files
Merge pull request #4135 from adrian-prantl/90718091-5.6
Implement DLQ_GetPtrAuthMask using info from debugserver.
2 parents 5070023 + f70eb62 commit 1677e3b

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

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

+11-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@ namespace lldb_private {
1212
bool LLDBMemoryReader::queryDataLayout(DataLayoutQueryType type, void *inBuffer,
1313
void *outBuffer) {
1414
switch (type) {
15-
// FIXME: add support for case DLQ_GetPtrAuthMask rdar://70729149
16-
case DLQ_GetPtrAuthMask:
17-
return false;
15+
case DLQ_GetPtrAuthMask: {
16+
assert(m_process.GetCodeAddressMask() == m_process.GetDataAddressMask() &&
17+
"not supported");
18+
lldb::addr_t ptrauth_mask = m_process.GetCodeAddressMask();
19+
if (!ptrauth_mask)
20+
return false;
21+
// The mask returned by the process masks out the non-addressable bits.
22+
uint64_t mask_pattern = ~ptrauth_mask;
23+
memcpy(outBuffer, &mask_pattern, sizeof(uint64_t));
24+
return true;
25+
}
1826
case DLQ_GetObjCReservedLowBits: {
1927
auto *result = static_cast<uint8_t *>(outBuffer);
2028
auto &triple = m_process.GetTarget().GetArchitecture().GetTriple();

0 commit comments

Comments
 (0)