123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #ifndef _MACH_O_UNWIND_H
- #define _MACH_O_UNWIND_H
- #define MACH_O_UNWIND_IS_NOT_FUNCTION_START 0x80000000
- #define MACH_O_UNWIND_HAS_LSDA 0x40000000
- #define MACH_O_UNWIND_PERSONALITY_MASK 0x30000000
- #define MACH_O_UNWIND_PERSONALITY_SHIFT 28
- #define MACH_O_UNWIND_X86_64_MODE_MASK 0x0f000000
- #define MACH_O_UNWIND_X86_64_MODE_RBP_FRAME 0x01000000
- #define MACH_O_UNWIND_X86_64_RBP_FRAME_REGSITERS 0x00007FFF
- #define MACH_O_UNWIND_X86_64_RBP_FRAME_OFFSET 0x00FF0000
- #define MACH_O_UNWIND_X86_64_MODE_STACK_IMMD 0x02000000
- #define MACH_O_UNWIND_X86_64_FRAMELESS_STACK_SIZE 0x00FF0000
- #define MACH_O_UNWIND_X86_64_FRAMELESS_REG_COUNT 0x00001C00
- #define MACH_O_UNWIND_X86_64_FRAMELESS_REG_PERMUTATION 0x000003FF
- #define MACH_O_UNWIND_X86_64_MODE_STACK_IND 0x03000000
- #define MACH_O_UNWIND_X86_64_FRAMELESS_STACK_ADJUST 0x0000E000
- #define MACH_O_UNWIND_X86_64_MODE_DWARF 0x04000000
- #define MACH_O_UNWIND_X86_64_DWARF_SECTION_OFFSET 0x00ffffff
- #define MACH_O_UNWIND_X86_64_REG_NONE 0
- #define MACH_O_UNWIND_X86_64_REG_RBX 1
- #define MACH_O_UNWIND_X86_64_REG_R12 2
- #define MACH_O_UNWIND_X86_64_REG_R13 3
- #define MACH_O_UNWIND_X86_64_REG_R14 4
- #define MACH_O_UNWIND_X86_64_REG_R15 5
- #define MACH_O_UNWIND_X86_64_REG_RBP 6
- #define MACH_O_UNWIND_X86_MODE_MASK 0x0f000000
- #define MACH_O_UNWIND_X86_MODE_EBP_FRAME 0x01000000
- #define MACH_O_UNWIND_X86_EBP_FRAME_REGSITERS 0x00007FFF
- #define MACH_O_UNWIND_X86_EBP_FRAME_OFFSET 0x00FF0000
- #define MACH_O_UNWIND_X86_MODE_STACK_IMMD 0x02000000
- #define MACH_O_UNWIND_X86_FRAMELESS_STACK_SIZE 0x00FF0000
- #define MACH_O_UNWIND_X86_FRAMELESS_REG_COUNT 0x00001C00
- #define MACH_O_UNWIND_X86_FRAMELESS_REG_PERMUTATION 0x000003FF
- #define MACH_O_UNWIND_X86_MODE_STACK_IND 0x03000000
- #define MACH_O_UNWIND_X86_FRAMELESS_STACK_ADJUST 0x0000E000
- #define MACH_O_UNWIND_X86_MODE_DWARF 0x04000000
- #define MACH_O_UNWIND_X86_DWARF_SECTION_OFFSET 0x00ffffff
- #define MACH_O_UNWIND_X86_REG_NONE 0
- #define MACH_O_UNWIND_X86_REG_EBX 1
- #define MACH_O_UNWIND_X86_REG_ECX 2
- #define MACH_O_UNWIND_X86_REG_EDX 3
- #define MACH_O_UNWIND_X86_REG_EDI 4
- #define MACH_O_UNWIND_X86_REG_ESI 5
- #define MACH_O_UNWIND_X86_REG_EBP 6
- struct mach_o_compact_unwind_32
- {
- unsigned char start[4];
- unsigned char length[4];
- unsigned char encoding[4];
- unsigned char personality[4];
- unsigned char lsda[4];
- };
- struct mach_o_compact_unwind_64
- {
- unsigned char start[8];
- unsigned char length[4];
- unsigned char encoding[4];
- unsigned char personality[8];
- unsigned char lsda[8];
- };
- #define MACH_O_UNWIND_SECTION_VERSION 1
- struct mach_o_unwind_info_header
- {
- unsigned char version[4];
- unsigned char encodings_array_offset[4];
- unsigned char encodings_array_count[4];
- unsigned char personality_array_offset[4];
- unsigned char personality_array_count[4];
- unsigned char index_offset[4];
- unsigned char index_count[4];
-
- };
- struct mach_o_unwind_index_entry
- {
- unsigned char function_offset[4];
- unsigned char second_level_offset[4];
- unsigned char lsda_index_offset[4];
- };
- struct mach_o_unwind_lsda_index_entry
- {
- unsigned char function_offset[4];
- unsigned char lsda_offset[4];
- };
- #define MACH_O_UNWIND_SECOND_LEVEL_REGULAR 2
- struct mach_o_unwind_regular_second_level_page_header
- {
- unsigned char kind[4];
- unsigned char entry_page_offset[2];
- unsigned char entry_count[2];
-
- };
- struct mach_o_unwind_regular_second_level_entry
- {
- unsigned char function_offset[4];
- unsigned char encoding[4];
- };
- #define MACH_O_UNWIND_SECOND_LEVEL_COMPRESSED 3
- struct mach_o_unwind_compressed_second_level_page_header
- {
- unsigned char kind[4];
- unsigned char entry_page_offset[2];
- unsigned char entry_count[2];
- unsigned char encodings_offset[2];
- unsigned char encodings_count[2];
-
-
- };
- #define MACH_O_UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(en) \
- ((en) & 0x00FFFFFF)
- #define MACH_O_UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(en) \
- (((en) >> 24) & 0xFF)
- #endif
|