Index: lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
--- lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp.orig
+++ lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
@@ -811,6 +811,31 @@ static lldb::addr_t ReadLinuxProcessAddressMask(lldb::
   return address_mask;
 }
 
+// Reads code or data address mask for the current OpenBSD process.
+static lldb::addr_t ReadOpenBSDProcessAddressMask(lldb::ProcessSP process_sp,
+						  llvm::StringRef reg_name) {
+  // We set default value of mask such that no bits are masked out.
+  uint64_t address_mask = 0ULL;
+  // If Pointer Authentication feature is enabled then OpenBSD exposes
+  // PAC data and code mask register. Try reading relevant register
+  // below and merge it with default address mask calculated above.
+  lldb::ThreadSP thread_sp = process_sp->GetThreadList().GetSelectedThread();
+  if (thread_sp) {
+    lldb::RegisterContextSP reg_ctx_sp = thread_sp->GetRegisterContext();
+    if (reg_ctx_sp) {
+      const RegisterInfo *reg_info =
+          reg_ctx_sp->GetRegisterInfoByName(reg_name, 0);
+      if (reg_info) {
+        lldb::addr_t mask_reg_val = reg_ctx_sp->ReadRegisterAsUnsigned(
+            reg_info->kinds[eRegisterKindLLDB], LLDB_INVALID_ADDRESS);
+        if (mask_reg_val != LLDB_INVALID_ADDRESS)
+          address_mask |= mask_reg_val;
+      }
+    }
+  }
+  return address_mask;
+}
+
 lldb::addr_t ABISysV_arm64::FixCodeAddress(lldb::addr_t pc) {
   if (lldb::ProcessSP process_sp = GetProcessSP()) {
     if (process_sp->GetTarget().GetArchitecture().GetTriple().isOSLinux() &&
@@ -818,6 +843,11 @@ lldb::addr_t ABISysV_arm64::FixCodeAddress(lldb::addr_
       process_sp->SetCodeAddressMask(
           ReadLinuxProcessAddressMask(process_sp, "code_mask"));
 
+    if (process_sp->GetTarget().GetArchitecture().GetTriple().isOSOpenBSD() &&
+        !process_sp->GetCodeAddressMask())
+      process_sp->SetCodeAddressMask(
+          ReadOpenBSDProcessAddressMask(process_sp, "code_mask"));
+
     return FixAddress(pc, process_sp->GetCodeAddressMask());
   }
   return pc;
@@ -829,6 +859,11 @@ lldb::addr_t ABISysV_arm64::FixDataAddress(lldb::addr_
         !process_sp->GetDataAddressMask())
       process_sp->SetDataAddressMask(
           ReadLinuxProcessAddressMask(process_sp, "data_mask"));
+
+    if (process_sp->GetTarget().GetArchitecture().GetTriple().isOSOpenBSD() &&
+        !process_sp->GetDataAddressMask())
+      process_sp->SetDataAddressMask(
+          ReadOpenBSDProcessAddressMask(process_sp, "data_mask"));
 
     return FixAddress(pc, process_sp->GetDataAddressMask());
   }
