#include <mach-o/compact_unwind_encoding.h>
mach-o/compact_unwind_encoding.h ===----------------------------------------------------------------------===//
7 enums · 6 structs · 5 macros · 1 typedef
The compact unwind encoding is a 32-bit value which encoded in an
architecture specific way, which registers to restore from where, and how
to unwind out of the function.
typedef uint32_t compact_unwind_encoding_t architecture independent bits
underlying type unsigned int
UNWIND_IS_NOT_FUNCTION_START 2147483648 UNWIND_HAS_LSDA 1073741824 UNWIND_PERSONALITY_MASK 805306368
x86
1-bit: start
1-bit: has lsda
2-bit: personality index
4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=DWARF
ebp based:
15-bits (5*3-bits per reg) register permutation
8-bits for stack offset
frameless:
8-bits stack size
3-bits stack adjust
3-bits register count
10-bits register permutation
underlying type unsigned int
UNWIND_X86_MODE_MASK 251658240 UNWIND_X86_MODE_EBP_FRAME 16777216 UNWIND_X86_MODE_STACK_IMMD 33554432 UNWIND_X86_MODE_STACK_IND 50331648 UNWIND_X86_MODE_DWARF 67108864 UNWIND_X86_EBP_FRAME_REGISTERS 32767 UNWIND_X86_EBP_FRAME_OFFSET 16711680 UNWIND_X86_FRAMELESS_STACK_SIZE 16711680 UNWIND_X86_FRAMELESS_STACK_ADJUST 57344 UNWIND_X86_FRAMELESS_STACK_REG_COUNT 7168 UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION 1023 UNWIND_X86_DWARF_SECTION_OFFSET 16777215
underlying type unsigned int
UNWIND_X86_REG_NONE 0 UNWIND_X86_REG_EBX 1 UNWIND_X86_REG_ECX 2 UNWIND_X86_REG_EDX 3 UNWIND_X86_REG_EDI 4 UNWIND_X86_REG_ESI 5 UNWIND_X86_REG_EBP 6
x86_64
1-bit: start
1-bit: has lsda
2-bit: personality index
4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=DWARF
rbp based:
15-bits (5*3-bits per reg) register permutation
8-bits for stack offset
frameless:
8-bits stack size
3-bits stack adjust
3-bits register count
10-bits register permutation
underlying type unsigned int
UNWIND_X86_64_MODE_MASK 251658240 UNWIND_X86_64_MODE_RBP_FRAME 16777216 UNWIND_X86_64_MODE_STACK_IMMD 33554432 UNWIND_X86_64_MODE_STACK_IND 50331648 UNWIND_X86_64_MODE_DWARF 67108864 UNWIND_X86_64_RBP_FRAME_REGISTERS 32767 UNWIND_X86_64_RBP_FRAME_OFFSET 16711680 UNWIND_X86_64_FRAMELESS_STACK_SIZE 16711680 UNWIND_X86_64_FRAMELESS_STACK_ADJUST 57344 UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT 7168 UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION 1023 UNWIND_X86_64_DWARF_SECTION_OFFSET 16777215
underlying type unsigned int
UNWIND_X86_64_REG_NONE 0 UNWIND_X86_64_REG_RBX 1 UNWIND_X86_64_REG_R12 2 UNWIND_X86_64_REG_R13 3 UNWIND_X86_64_REG_R14 4 UNWIND_X86_64_REG_R15 5 UNWIND_X86_64_REG_RBP 6
ARM64
1-bit: start
1-bit: has lsda
2-bit: personality index
4-bits: 4=frame-based, 3=DWARF, 2=frameless
frameless:
12-bits of stack size
frame-based:
4-bits D reg pairs saved
5-bits X reg pairs saved
DWARF:
24-bits offset of DWARF FDE in __eh_frame section
underlying type unsigned int
UNWIND_ARM64_MODE_MASK 251658240 UNWIND_ARM64_MODE_FRAMELESS 33554432 UNWIND_ARM64_MODE_DWARF 50331648 UNWIND_ARM64_MODE_FRAME 67108864 UNWIND_ARM64_FRAME_X19_X20_PAIR 1 UNWIND_ARM64_FRAME_X21_X22_PAIR 2 UNWIND_ARM64_FRAME_X23_X24_PAIR 4 UNWIND_ARM64_FRAME_X25_X26_PAIR 8 UNWIND_ARM64_FRAME_X27_X28_PAIR 16 UNWIND_ARM64_FRAME_D8_D9_PAIR 256 UNWIND_ARM64_FRAME_D10_D11_PAIR 512 UNWIND_ARM64_FRAME_D12_D13_PAIR 1024 UNWIND_ARM64_FRAME_D14_D15_PAIR 2048 UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK 16773120 UNWIND_ARM64_DWARF_SECTION_OFFSET 16777215
armv7k
1-bit: start
1-bit: has lsda
2-bit: personality index
4-bits: 1=frame, 2=frame+dregs, 4=dwarf
underlying type unsigned int
UNWIND_ARM_MODE_MASK 251658240 UNWIND_ARM_MODE_FRAME 16777216 UNWIND_ARM_MODE_FRAME_D 33554432 UNWIND_ARM_MODE_DWARF 67108864 UNWIND_ARM_FRAME_STACK_ADJUST_MASK 12582912 UNWIND_ARM_FRAME_FIRST_PUSH_R4 1 UNWIND_ARM_FRAME_FIRST_PUSH_R5 2 UNWIND_ARM_FRAME_FIRST_PUSH_R6 4 UNWIND_ARM_FRAME_SECOND_PUSH_R8 8 UNWIND_ARM_FRAME_SECOND_PUSH_R9 16 UNWIND_ARM_FRAME_SECOND_PUSH_R10 32 UNWIND_ARM_FRAME_SECOND_PUSH_R11 64 UNWIND_ARM_FRAME_SECOND_PUSH_R12 128 UNWIND_ARM_FRAME_D_REG_COUNT_MASK 1792 UNWIND_ARM_DWARF_SECTION_OFFSET 16777215
#define UNWIND_SECTION_VERSION 1 #define UNWIND_SECOND_LEVEL_REGULAR 2 #define UNWIND_SECOND_LEVEL_COMPRESSED 3 #define UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) (entry & 0x00FFFFFF) #define UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry) ((entry >> 24) & 0xFF) Generated 2026-09-08 from the headers of one specific machine (macOS 26.4.1, SDK 26.4, arm64) — not official documentation. About & caveats