diff --git a/src/google_breakpad/common/minidump_exception_mac.h b/src/google_breakpad/common/minidump_exception_mac.h
--- a/src/google_breakpad/common/minidump_exception_mac.h
+++ b/src/google_breakpad/common/minidump_exception_mac.h
@@ -64,16 +64,18 @@ typedef enum {
   MD_EXCEPTION_MAC_SYSCALL         = 7,
       /* EXC_SYSCALL */
   MD_EXCEPTION_MAC_MACH_SYSCALL    = 8,
       /* EXC_MACH_SYSCALL */
   MD_EXCEPTION_MAC_RPC_ALERT       = 9,
       /* EXC_RPC_ALERT */
   MD_EXCEPTION_MAC_RESOURCE        = 11,
       /* EXC_RESOURCE */
+  MD_EXCEPTION_MAC_GUARD           = 12,
+      /* EXC_GUARD */
   MD_EXCEPTION_MAC_SIMULATED       = 0x43507378
       /* Fake exception code used by Crashpad's SimulateCrash ('CPsx'). */
 } MDExceptionMac;
 
 /* For (MDException).exception_flags.  Breakpad minidump extension for Mac OS X
  * support.  Based on Darwin/Mac OS X' mach/ppc/exception.h and
  * mach/i386/exception.h.  This is what Mac OS X calls a "code". */
 typedef enum {
@@ -236,9 +238,77 @@ typedef enum MDMacExcResourceIOFlavor {
   MD_MAC_EXC_RESOURCE_FLAVOR_IO_PHYSICAL_WRITES = 1,
   MD_MAC_EXC_RESOURCE_FLAVOR_IO_LOGICAL_WRITES = 2,
 } MDMacExcResourceIOFlavor;
 
 typedef enum MDMacExcResourceThreadsFlavor {
   MD_MAC_EXC_RESOURCE_FLAVOR_THREADS_HIGH_WATERMARK = 1,
 } MDMacExcResourceThreadsFlavor;
 
+// See https://github.com/apple/darwin-xnu/blob/main/osfmk/kern/exc_guard.h
+
+typedef enum MDMacExcGuardType {
+  MD_MAC_EXC_GUARD_TYPE_NONE        = 0x0,
+  MD_MAC_EXC_GUARD_TYPE_MACH_PORT   = 0x1,
+  MD_MAC_EXC_GUARD_TYPE_FD          = 0x2,
+  MD_MAC_EXC_GUARD_TYPE_USER        = 0x3,
+  MD_MAC_EXC_GUARD_TYPE_VN          = 0x4,
+  MD_MAC_EXC_GUARD_TYPE_VIRT_MEMORY = 0x5
+} MDMacExcGuardType;
+
+// See https://github.com/apple/darwin-xnu/osfmk/mach/port.h
+
+typedef enum MDMacExcGuardMachPortFlavor {
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_DESTROY              = 1u << 0,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MOD_REFS             = 1u << 1,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SET_CONTEXT          = 1u << 2,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_UNGUARDED            = 1u << 3,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INCORRECT_GUARD      = 1u << 4,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_IMMOVABLE            = 1u << 5,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_STRICT_REPLY         = 1u << 6,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MSG_FILTERED         = 1u << 7,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_RIGHT        = 1u << 8,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_NAME         = 1u << 9,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_VALUE        = 1u << 10,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_ARGUMENT     = 1u << 11,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RIGHT_EXISTS         = 1u << 12,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_NO_SPACE        = 1u << 13,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_FAILURE         = 1u << 14,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_RESOURCE        = 1u << 15,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_REPLY   = 1u << 16,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_VOUCHER = 1u << 17,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_RIGHT   = 1u << 18,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RCV_INVALID_NAME     = 1u << 19,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RCV_GUARDED_DESC     = 1u << 20,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MOD_REFS_NON_FATAL   = 1u << 21,
+  MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_IMMOVABLE_NON_FATAL  = 1u << 22,
+} MDMacExcGuardMachPortFlavor;
+
+// See https://github.com/apple/darwin-xnu/blob/main/bsd/sys/guarded.h
+
+typedef enum MDMacExcGuardFDFlavor {
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_CLOSE      = 1u << 0,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_DUP        = 1u << 1,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_NOCLOEXEC  = 1u << 2,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_SOCKET_IPC = 1u << 3,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_FILEPORT   = 1u << 4,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_MISMATCH   = 1u << 5,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_WRITE      = 1u << 6
+} MDMacExcGuardFDFlavor;
+
+
+typedef enum MDMacExcGuardVNFlavor {
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_RENAME_TO   = 1u << 0,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_RENAME_FROM = 1u << 1,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_UNLINK      = 1u << 2,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_WRITE_OTHER = 1u << 3,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_TRUNC_OTHER = 1u << 4,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_LINK        = 1u << 5,
+  MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_EXCHDATA    = 1u << 6,
+} MDMacExcGuardVNFlavor;
+
+// See https://github.com/apple/darwin-xnu/osfmk/mach/vm_statistics.h
+
+typedef enum MDMacExcGuardVirtMemoryFlavor {
+  MD_MAC_EXC_GUARD_VIRT_MEMORY_FLAVOR_GUARD_EXC_DEALLOC_GAP = 1u << 0
+} MDMacExcGuardVirtMemoryFlavor;
+
 #endif  /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_MAC_OSX_H__ */
diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
--- a/src/processor/minidump_processor.cc
+++ b/src/processor/minidump_processor.cc
@@ -1213,16 +1213,245 @@ string MinidumpProcessor::GetCrashReason
                 }
                 break;
               default:
                 reason.append(flags_string);
                 break;
             }
           }
           break;
+        case MD_EXCEPTION_MAC_GUARD:
+          reason = "EXC_GUARD / ";
+          {
+            uint32_t type = (exception_flags >> 29) & 0x7ULL;
+            uint32_t flavor = exception_flags & 0x1FFFFFFFULL;
+            switch (type) {
+              case MD_MAC_EXC_GUARD_TYPE_NONE:
+                reason.append("GUARD_TYPE_NONE");
+                break;
+              case MD_MAC_EXC_GUARD_TYPE_MACH_PORT:
+                reason.append("GUARD_TYPE_MACH_PORT");
+
+                if (flavor) {
+                  std::vector<std::string> flavors;
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_DESTROY) {
+                    flavors.push_back("GUARD_EXC_DESTROY");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MOD_REFS) {
+                    flavors.push_back("GUARD_EXC_MOD_REFS");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SET_CONTEXT) {
+                    flavors.push_back("GUARD_EXC_SET_CONTEXT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SET_CONTEXT) {
+                    flavors.push_back("GUARD_EXC_SET_CONTEXT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_UNGUARDED) {
+                    flavors.push_back("GUARD_EXC_UNGUARDED");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INCORRECT_GUARD) {
+                    flavors.push_back("GUARD_EXC_INCORRECT_GUARD");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_IMMOVABLE) {
+                    flavors.push_back("GUARD_EXC_IMMOVABLE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_STRICT_REPLY) {
+                    flavors.push_back("GUARD_EXC_STRICT_REPLY");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MSG_FILTERED) {
+                    flavors.push_back("GUARD_EXC_MSG_FILTERED");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_RIGHT) {
+                    flavors.push_back("GUARD_EXC_INVALID_RIGHT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_NAME) {
+                    flavors.push_back("GUARD_EXC_INVALID_NAME");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_VALUE) {
+                    flavors.push_back("GUARD_EXC_INVALID_VALUE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_INVALID_ARGUMENT) {
+                    flavors.push_back("GUARD_EXC_INVALID_ARGUMENT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RIGHT_EXISTS) {
+                    flavors.push_back("GUARD_EXC_RIGHT_EXISTS");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_NO_SPACE) {
+                    flavors.push_back("GUARD_EXC_KERN_NO_SPACE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_FAILURE) {
+                    flavors.push_back("GUARD_EXC_KERN_FAILURE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_KERN_RESOURCE) {
+                    flavors.push_back("GUARD_EXC_KERN_RESOURCE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_REPLY) {
+                    flavors.push_back("GUARD_EXC_SEND_INVALID_REPLY");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_VOUCHER) {
+                    flavors.push_back("GUARD_EXC_SEND_INVALID_VOUCHER");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_SEND_INVALID_RIGHT) {
+                    flavors.push_back("GUARD_EXC_SEND_INVALID_RIGHT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RCV_INVALID_NAME) {
+                    flavors.push_back("GUARD_EXC_RCV_INVALID_NAME");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_RCV_GUARDED_DESC) {
+                    flavors.push_back("GUARD_EXC_RCV_GUARDED_DESC");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_MOD_REFS_NON_FATAL) {
+                    flavors.push_back("GUARD_EXC_MOD_REFS_NON_FATAL");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_MACH_PORT_FLAVOR_GUARD_EXC_IMMOVABLE_NON_FATAL) {
+                    flavors.push_back("GUARD_EXC_IMMOVABLE_NON_FATAL");
+                  }
+
+                  reason.append(" / ");
+                  for (size_t i = 0; i < flavors.size(); i++) {
+                    if (i > 0) {
+                      reason.append(" | ");
+                    }
+
+                    reason.append(flavors[i]);
+                  }
+                }
+
+                break;
+              case MD_MAC_EXC_GUARD_TYPE_FD:
+                reason.append("GUARD_TYPE_FD");
+
+                if (flavor) {
+                  std::vector<std::string> flavors;
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_CLOSE) {
+                    flavors.push_back("GUARD_EXC_CLOSE");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_DUP) {
+                    flavors.push_back("GUARD_EXC_DUP");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_NOCLOEXEC) {
+                    flavors.push_back("GUARD_EXC_NOCLOEXEC");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_SOCKET_IPC) {
+                    flavors.push_back("GUARD_EXC_SOCKET_IPC");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_FILEPORT) {
+                    flavors.push_back("GUARD_EXC_FILEPORT");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_MISMATCH) {
+                    flavors.push_back("GUARD_EXC_MISMATCH");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_WRITE) {
+                    flavors.push_back("GUARD_EXC_WRITE");
+                  }
+
+                  reason.append(" / ");
+                  for (size_t i = 0; i < flavors.size(); i++) {
+                    if (i > 0) {
+                      reason.append(" | ");
+                    }
+
+                    reason.append(flavors[i]);
+                  }
+                }
+
+                break;
+              case MD_MAC_EXC_GUARD_TYPE_USER:
+                reason.append("GUARD_TYPE_USER");
+                break;
+              case MD_MAC_EXC_GUARD_TYPE_VN:
+                reason.append("GUARD_TYPE_VN");
+
+                if (flavor) {
+                  std::vector<std::string> flavors;
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_RENAME_TO) {
+                    flavors.push_back("GUARD_EXC_RENAME_TO");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_RENAME_FROM) {
+                    flavors.push_back("GUARD_EXC_RENAME_FROM");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_UNLINK) {
+                    flavors.push_back("GUARD_EXC_UNLINK");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_WRITE_OTHER) {
+                    flavors.push_back("GUARD_EXC_WRITE_OTHER");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_TRUNC_OTHER) {
+                    flavors.push_back("GUARD_EXC_TRUNC_OTHER");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_LINK) {
+                    flavors.push_back("GUARD_EXC_LINK");
+                  }
+
+                  if (flavor & MD_MAC_EXC_GUARD_FD_FLAVOR_GUARD_EXC_EXCHDATA) {
+                    flavors.push_back("GUARD_EXC_EXCHDATA");
+                  }
+
+                  reason.append(" / ");
+                  for (size_t i = 0; i < flavors.size(); i++) {
+                    if (i > 0) {
+                      reason.append(" | ");
+                    }
+
+                    reason.append(flavors[i]);
+                  }
+                }
+
+                break;
+              case MD_MAC_EXC_GUARD_TYPE_VIRT_MEMORY:
+                reason.append("GUARD_TYPE_VIRT_MEMORY");
+
+                if (flavor & MD_MAC_EXC_GUARD_VIRT_MEMORY_FLAVOR_GUARD_EXC_DEALLOC_GAP) {
+                  reason.append(" / GUARD_EXC_DEALLOC_GAP");
+                }
+
+                break;
+              default:
+                reason.append(flags_string);
+                break;
+            }
+          }
+          break;
         case MD_EXCEPTION_MAC_SIMULATED:
           reason = "Simulated Exception";
           break;
       }
       break;
     }
 
     case MD_OS_WIN32_NT:
