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
@@ -834,6 +834,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() &&
@@ -841,6 +866,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"));
+
     // b55 is the highest bit outside TBI (if it's enabled), use
     // it to determine if the high bits are set to 0 or 1.
     const addr_t pac_sign_extension = 0x0080000000000000ULL;
@@ -861,6 +891,11 @@ lldb::addr_t ABISysV_arm64::FixDataAddress(lldb::addr_
         process_sp->GetDataAddressMask() == LLDB_INVALID_ADDRESS_MASK)
       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"));
 
     // b55 is the highest bit outside TBI (if it's enabled), use
     // it to determine if the high bits are set to 0 or 1.
