#include <mach-o/compact_unwind_encoding.h>

mach-o/compact_unwind_encoding.h

===----------------------------------------------------------------------===//
includes: stdint.h
7 enums · 6 structs · 5 macros · 1 typedef

typedefcompact_unwind_encoding_t

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

enum(anonymous)

architecture independent bits
underlying type unsigned int
UNWIND_IS_NOT_FUNCTION_START2147483648
UNWIND_HAS_LSDA1073741824
UNWIND_PERSONALITY_MASK805306368

enum(anonymous)

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_MASK251658240
UNWIND_X86_MODE_EBP_FRAME16777216
UNWIND_X86_MODE_STACK_IMMD33554432
UNWIND_X86_MODE_STACK_IND50331648
UNWIND_X86_MODE_DWARF67108864
UNWIND_X86_EBP_FRAME_REGISTERS32767
UNWIND_X86_EBP_FRAME_OFFSET16711680
UNWIND_X86_FRAMELESS_STACK_SIZE16711680
UNWIND_X86_FRAMELESS_STACK_ADJUST57344
UNWIND_X86_FRAMELESS_STACK_REG_COUNT7168
UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION1023
UNWIND_X86_DWARF_SECTION_OFFSET16777215

enum(anonymous)

underlying type unsigned int
UNWIND_X86_REG_NONE0
UNWIND_X86_REG_EBX1
UNWIND_X86_REG_ECX2
UNWIND_X86_REG_EDX3
UNWIND_X86_REG_EDI4
UNWIND_X86_REG_ESI5
UNWIND_X86_REG_EBP6

enum(anonymous)

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_MASK251658240
UNWIND_X86_64_MODE_RBP_FRAME16777216
UNWIND_X86_64_MODE_STACK_IMMD33554432
UNWIND_X86_64_MODE_STACK_IND50331648
UNWIND_X86_64_MODE_DWARF67108864
UNWIND_X86_64_RBP_FRAME_REGISTERS32767
UNWIND_X86_64_RBP_FRAME_OFFSET16711680
UNWIND_X86_64_FRAMELESS_STACK_SIZE16711680
UNWIND_X86_64_FRAMELESS_STACK_ADJUST57344
UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT7168
UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION1023
UNWIND_X86_64_DWARF_SECTION_OFFSET16777215

enum(anonymous)

underlying type unsigned int
UNWIND_X86_64_REG_NONE0
UNWIND_X86_64_REG_RBX1
UNWIND_X86_64_REG_R122
UNWIND_X86_64_REG_R133
UNWIND_X86_64_REG_R144
UNWIND_X86_64_REG_R155
UNWIND_X86_64_REG_RBP6

enum(anonymous)

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_MASK251658240
UNWIND_ARM64_MODE_FRAMELESS33554432
UNWIND_ARM64_MODE_DWARF50331648
UNWIND_ARM64_MODE_FRAME67108864
UNWIND_ARM64_FRAME_X19_X20_PAIR1
UNWIND_ARM64_FRAME_X21_X22_PAIR2
UNWIND_ARM64_FRAME_X23_X24_PAIR4
UNWIND_ARM64_FRAME_X25_X26_PAIR8
UNWIND_ARM64_FRAME_X27_X28_PAIR16
UNWIND_ARM64_FRAME_D8_D9_PAIR256
UNWIND_ARM64_FRAME_D10_D11_PAIR512
UNWIND_ARM64_FRAME_D12_D13_PAIR1024
UNWIND_ARM64_FRAME_D14_D15_PAIR2048
UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK16773120
UNWIND_ARM64_DWARF_SECTION_OFFSET16777215

enum(anonymous)

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_MASK251658240
UNWIND_ARM_MODE_FRAME16777216
UNWIND_ARM_MODE_FRAME_D33554432
UNWIND_ARM_MODE_DWARF67108864
UNWIND_ARM_FRAME_STACK_ADJUST_MASK12582912
UNWIND_ARM_FRAME_FIRST_PUSH_R41
UNWIND_ARM_FRAME_FIRST_PUSH_R52
UNWIND_ARM_FRAME_FIRST_PUSH_R64
UNWIND_ARM_FRAME_SECOND_PUSH_R88
UNWIND_ARM_FRAME_SECOND_PUSH_R916
UNWIND_ARM_FRAME_SECOND_PUSH_R1032
UNWIND_ARM_FRAME_SECOND_PUSH_R1164
UNWIND_ARM_FRAME_SECOND_PUSH_R12128
UNWIND_ARM_FRAME_D_REG_COUNT_MASK1792
UNWIND_ARM_DWARF_SECTION_OFFSET16777215

macroUNWIND_SECTION_VERSION

#define UNWIND_SECTION_VERSION 1

structunwind_info_section_header

size 28, align 4
uint32_tversionUNWIND_SECTION_VERSION
uint32_tcommonEncodingsArraySectionOffset
uint32_tcommonEncodingsArrayCount
uint32_tpersonalityArraySectionOffset
uint32_tpersonalityArrayCount
uint32_tindexSectionOffset
uint32_tindexCount

structunwind_info_section_header_index_entry

size 12, align 4
uint32_tfunctionOffset
uint32_tsecondLevelPagesSectionOffsetsection offset to start of regular or compress page
uint32_tlsdaIndexArraySectionOffsetsection offset to start of lsda_index array for this range

structunwind_info_section_header_lsda_index_entry

size 8, align 4
uint32_tfunctionOffset
uint32_tlsdaOffset

structunwind_info_regular_second_level_entry

size 8, align 4
uint32_tfunctionOffset
compact_unwind_encoding_tencoding

macroUNWIND_SECOND_LEVEL_REGULAR

#define UNWIND_SECOND_LEVEL_REGULAR 2

structunwind_info_regular_second_level_page_header

size 8, align 4
uint32_tkindUNWIND_SECOND_LEVEL_REGULAR
uint16_tentryPageOffset
uint16_tentryCount

macroUNWIND_SECOND_LEVEL_COMPRESSED

#define UNWIND_SECOND_LEVEL_COMPRESSED 3

structunwind_info_compressed_second_level_page_header

size 12, align 4
uint32_tkindUNWIND_SECOND_LEVEL_COMPRESSED
uint16_tentryPageOffset
uint16_tentryCount
uint16_tencodingsPageOffset
uint16_tencodingsCount

macroUNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET

#define UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) (entry & 0x00FFFFFF)

macroUNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX

#define UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry) ((entry >> 24) & 0xFF)