This hardens the unwinding logic and datastructures on systems that support pointer authentication. The approach taken to hardening is to harden the schemas of as many high value fields in the myriad structs as possible, and then also explicitly qualify local variables referencing privileged or security critical values. This does introduce ABI linkage between libcxx, libcxxabi, and libunwind but those are in principle separate from the OS itself so we've kept the schema definitions in the library specific headers rather than ptrauth.h
1409 lines
37 KiB
C
1409 lines
37 KiB
C
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//
|
|
// Compatible with libunwind API documented at:
|
|
// http://www.nongnu.org/libunwind/man/libunwind(3).html
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef __LIBUNWIND__
|
|
#define __LIBUNWIND__
|
|
|
|
#include <__libunwind_config.h>
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
#ifdef __APPLE__
|
|
#if __clang__
|
|
#if __has_include(<Availability.h>)
|
|
#include <Availability.h>
|
|
#endif
|
|
#elif __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
|
|
#include <Availability.h>
|
|
#endif
|
|
|
|
#ifdef __arm__
|
|
#define LIBUNWIND_AVAIL __attribute__((unavailable))
|
|
#elif defined(__OSX_AVAILABLE_STARTING)
|
|
#define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0)
|
|
#else
|
|
#include <AvailabilityMacros.h>
|
|
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
|
|
#define LIBUNWIND_AVAIL AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
|
|
#else
|
|
#define LIBUNWIND_AVAIL __attribute__((unavailable))
|
|
#endif
|
|
#endif
|
|
#else
|
|
#define LIBUNWIND_AVAIL
|
|
#endif
|
|
|
|
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
|
|
|
|
#include <ptrauth.h>
|
|
|
|
// `__ptrauth_restricted_intptr` is a feature of apple clang that predates
|
|
// support for direct application of `__ptrauth` to integer types. This
|
|
// guard is necessary to support compilation with those compiler.
|
|
#if __has_extension(ptrauth_restricted_intptr_qualifier)
|
|
#define __unwind_ptrauth_restricted_intptr(...) \
|
|
__ptrauth_restricted_intptr(__VA_ARGS__)
|
|
#else
|
|
#define __unwind_ptrauth_restricted_intptr(...) \
|
|
__ptrauth(__VA_ARGS__)
|
|
#endif
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::handler") == 0x7405
|
|
#define __ptrauth_unwind_upi_handler_disc 0x7405
|
|
|
|
#define __ptrauth_unwind_upi_handler \
|
|
__ptrauth(ptrauth_key_function_pointer, 1, __ptrauth_unwind_upi_handler_disc)
|
|
|
|
#define __ptrauth_unwind_upi_handler_intptr \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1,\
|
|
__ptrauth_unwind_upi_handler_disc)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::start_ip") == 0xCA2C
|
|
#define __ptrauth_unwind_upi_startip \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xCA2C)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::end_ip") == 0xE183
|
|
#define __ptrauth_unwind_upi_endip \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xE183)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::lsda") == 0x83DE
|
|
#define __ptrauth_unwind_upi_lsda \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x83DE)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::flags") == 0x79A1
|
|
#define __ptrauth_unwind_upi_flags \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x79A1)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::unwind_info") == 0xC20C
|
|
#define __ptrauth_unwind_upi_info \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xC20C)
|
|
|
|
// ptrauth_string_discriminator("unw_proc_info_t::extra") == 0x03DF
|
|
#define __ptrauth_unwind_upi_extra \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x03DF)
|
|
|
|
// ptrauth_string_discriminator("Registers_arm64::link_reg_t") == 0x8301
|
|
#define __ptrauth_unwind_registers_arm64_link_reg \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_code, 1, 0x8301)
|
|
|
|
// ptrauth_string_discriminator("UnwindInfoSections::dso_base") == 0x4FF5
|
|
#define __ptrauth_unwind_uis_dso_base \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4FF5)
|
|
|
|
// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section") == 0x4974
|
|
#define __ptrauth_unwind_uis_dwarf_section \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4974)
|
|
|
|
// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section_length") == 0x2A9A
|
|
#define __ptrauth_unwind_uis_dwarf_section_length \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x2A9A)
|
|
|
|
// ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section") == 0xA27B
|
|
#define __ptrauth_unwind_uis_compact_unwind_section \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xA27B)
|
|
|
|
// ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section_length") == 0x5D0A
|
|
#define __ptrauth_unwind_uis_compact_unwind_section_length \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x5D0A)
|
|
|
|
// ptrauth_string_discriminator("CIE_Info::personality") == 0x6A40
|
|
#define __ptrauth_unwind_cie_info_personality_disc 0x6A40
|
|
#define __ptrauth_unwind_cie_info_personality \
|
|
__unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1, \
|
|
__ptrauth_unwind_cie_info_personality_disc)
|
|
|
|
// ptrauth_string_discriminator("personality") == 0x7EAD)
|
|
#define __ptrauth_unwind_pauthtest_personality_disc 0x7EAD
|
|
|
|
#else
|
|
|
|
#define __unwind_ptrauth_restricted_intptr(...)
|
|
#define __ptrauth_unwind_upi_handler
|
|
#define __ptrauth_unwind_upi_handler_intptr
|
|
#define __ptrauth_unwind_upi_startip
|
|
#define __ptrauth_unwind_upi_endip
|
|
#define __ptrauth_unwind_upi_lsda
|
|
#define __ptrauth_unwind_upi_flags
|
|
#define __ptrauth_unwind_upi_info
|
|
#define __ptrauth_unwind_upi_extra
|
|
#define __ptrauth_unwind_registers_arm64_link_reg
|
|
#define __ptrauth_unwind_uis_dso_base
|
|
#define __ptrauth_unwind_uis_dwarf_section
|
|
#define __ptrauth_unwind_uis_dwarf_section_length
|
|
#define __ptrauth_unwind_uis_compact_unwind_section
|
|
#define __ptrauth_unwind_uis_compact_unwind_section_length
|
|
#define __ptrauth_unwind_cie_info_personality
|
|
|
|
#endif
|
|
|
|
#if defined(_WIN32) && defined(__SEH__)
|
|
#define LIBUNWIND_CURSOR_ALIGNMENT_ATTR __attribute__((__aligned__(16)))
|
|
#else
|
|
#define LIBUNWIND_CURSOR_ALIGNMENT_ATTR
|
|
#endif
|
|
|
|
/* error codes */
|
|
enum {
|
|
UNW_ESUCCESS = 0, /* no error */
|
|
UNW_EUNSPEC = -6540, /* unspecified (general) error */
|
|
UNW_ENOMEM = -6541, /* out of memory */
|
|
UNW_EBADREG = -6542, /* bad register number */
|
|
UNW_EREADONLYREG = -6543, /* attempt to write read-only register */
|
|
UNW_ESTOPUNWIND = -6544, /* stop unwinding */
|
|
UNW_EINVALIDIP = -6545, /* invalid IP */
|
|
UNW_EBADFRAME = -6546, /* bad frame */
|
|
UNW_EINVAL = -6547, /* unsupported operation or bad value */
|
|
UNW_EBADVERSION = -6548, /* unwind info has unsupported version */
|
|
UNW_ENOINFO = -6549 /* no unwind info found */
|
|
#if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY)
|
|
, UNW_ECROSSRASIGNING = -6550 /* cross unwind with return address signing */
|
|
#endif
|
|
};
|
|
|
|
struct unw_context_t {
|
|
uint64_t data[_LIBUNWIND_CONTEXT_SIZE];
|
|
};
|
|
typedef struct unw_context_t unw_context_t;
|
|
|
|
struct unw_cursor_t {
|
|
uint64_t data[_LIBUNWIND_CURSOR_SIZE];
|
|
} LIBUNWIND_CURSOR_ALIGNMENT_ATTR;
|
|
typedef struct unw_cursor_t unw_cursor_t;
|
|
|
|
typedef struct unw_addr_space *unw_addr_space_t;
|
|
|
|
typedef int unw_regnum_t;
|
|
typedef uintptr_t unw_word_t;
|
|
#if defined(__arm__) && !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
|
|
typedef uint64_t unw_fpreg_t;
|
|
#else
|
|
typedef double unw_fpreg_t;
|
|
#endif
|
|
|
|
struct unw_proc_info_t {
|
|
unw_word_t __ptrauth_unwind_upi_startip start_ip; /* start address of function */
|
|
unw_word_t __ptrauth_unwind_upi_endip end_ip; /* address after end of function */
|
|
unw_word_t __ptrauth_unwind_upi_lsda lsda; /* address of language specific data area, */
|
|
/* or zero if not used */
|
|
|
|
unw_word_t __ptrauth_unwind_upi_handler_intptr handler;
|
|
unw_word_t gp; /* not used */
|
|
unw_word_t __ptrauth_unwind_upi_flags flags; /* not used */
|
|
uint32_t format; /* compact unwind encoding, or zero if none */
|
|
uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */
|
|
unw_word_t __ptrauth_unwind_upi_info unwind_info; /* address of DWARF unwind info, or zero */
|
|
unw_word_t __ptrauth_unwind_upi_extra extra; /* mach_header of mach-o image containing func */
|
|
};
|
|
typedef struct unw_proc_info_t unw_proc_info_t;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern int unw_getcontext(unw_context_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_init_local(unw_cursor_t *, unw_context_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_step(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_get_reg(unw_cursor_t *, unw_regnum_t, unw_word_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_get_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_set_reg(unw_cursor_t *, unw_regnum_t, unw_word_t) LIBUNWIND_AVAIL;
|
|
extern int unw_set_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t) LIBUNWIND_AVAIL;
|
|
extern int unw_resume(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
|
|
#ifdef __arm__
|
|
/* Save VFP registers in FSTMX format (instead of FSTMD). */
|
|
extern void unw_save_vfp_as_X(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
#endif
|
|
|
|
#ifdef _AIX
|
|
extern uintptr_t unw_get_data_rel_base(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
#endif
|
|
|
|
extern const char *unw_regname(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
|
|
extern int unw_get_proc_info(unw_cursor_t *, unw_proc_info_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
|
|
extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;
|
|
//extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
|
|
|
|
extern unw_addr_space_t unw_local_addr_space;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
// architecture independent register numbers
|
|
enum {
|
|
UNW_REG_IP = -1, // instruction pointer
|
|
UNW_REG_SP = -2, // stack pointer
|
|
};
|
|
|
|
// 32-bit x86 registers
|
|
enum {
|
|
UNW_X86_EAX = 0,
|
|
UNW_X86_ECX = 1,
|
|
UNW_X86_EDX = 2,
|
|
UNW_X86_EBX = 3,
|
|
UNW_X86_EBP = 4,
|
|
UNW_X86_ESP = 5,
|
|
UNW_X86_ESI = 6,
|
|
UNW_X86_EDI = 7
|
|
};
|
|
|
|
// 64-bit x86_64 registers
|
|
enum {
|
|
UNW_X86_64_RAX = 0,
|
|
UNW_X86_64_RDX = 1,
|
|
UNW_X86_64_RCX = 2,
|
|
UNW_X86_64_RBX = 3,
|
|
UNW_X86_64_RSI = 4,
|
|
UNW_X86_64_RDI = 5,
|
|
UNW_X86_64_RBP = 6,
|
|
UNW_X86_64_RSP = 7,
|
|
UNW_X86_64_R8 = 8,
|
|
UNW_X86_64_R9 = 9,
|
|
UNW_X86_64_R10 = 10,
|
|
UNW_X86_64_R11 = 11,
|
|
UNW_X86_64_R12 = 12,
|
|
UNW_X86_64_R13 = 13,
|
|
UNW_X86_64_R14 = 14,
|
|
UNW_X86_64_R15 = 15,
|
|
UNW_X86_64_RIP = 16,
|
|
UNW_X86_64_XMM0 = 17,
|
|
UNW_X86_64_XMM1 = 18,
|
|
UNW_X86_64_XMM2 = 19,
|
|
UNW_X86_64_XMM3 = 20,
|
|
UNW_X86_64_XMM4 = 21,
|
|
UNW_X86_64_XMM5 = 22,
|
|
UNW_X86_64_XMM6 = 23,
|
|
UNW_X86_64_XMM7 = 24,
|
|
UNW_X86_64_XMM8 = 25,
|
|
UNW_X86_64_XMM9 = 26,
|
|
UNW_X86_64_XMM10 = 27,
|
|
UNW_X86_64_XMM11 = 28,
|
|
UNW_X86_64_XMM12 = 29,
|
|
UNW_X86_64_XMM13 = 30,
|
|
UNW_X86_64_XMM14 = 31,
|
|
UNW_X86_64_XMM15 = 32,
|
|
};
|
|
|
|
|
|
// 32-bit ppc register numbers
|
|
enum {
|
|
UNW_PPC_R0 = 0,
|
|
UNW_PPC_R1 = 1,
|
|
UNW_PPC_R2 = 2,
|
|
UNW_PPC_R3 = 3,
|
|
UNW_PPC_R4 = 4,
|
|
UNW_PPC_R5 = 5,
|
|
UNW_PPC_R6 = 6,
|
|
UNW_PPC_R7 = 7,
|
|
UNW_PPC_R8 = 8,
|
|
UNW_PPC_R9 = 9,
|
|
UNW_PPC_R10 = 10,
|
|
UNW_PPC_R11 = 11,
|
|
UNW_PPC_R12 = 12,
|
|
UNW_PPC_R13 = 13,
|
|
UNW_PPC_R14 = 14,
|
|
UNW_PPC_R15 = 15,
|
|
UNW_PPC_R16 = 16,
|
|
UNW_PPC_R17 = 17,
|
|
UNW_PPC_R18 = 18,
|
|
UNW_PPC_R19 = 19,
|
|
UNW_PPC_R20 = 20,
|
|
UNW_PPC_R21 = 21,
|
|
UNW_PPC_R22 = 22,
|
|
UNW_PPC_R23 = 23,
|
|
UNW_PPC_R24 = 24,
|
|
UNW_PPC_R25 = 25,
|
|
UNW_PPC_R26 = 26,
|
|
UNW_PPC_R27 = 27,
|
|
UNW_PPC_R28 = 28,
|
|
UNW_PPC_R29 = 29,
|
|
UNW_PPC_R30 = 30,
|
|
UNW_PPC_R31 = 31,
|
|
UNW_PPC_F0 = 32,
|
|
UNW_PPC_F1 = 33,
|
|
UNW_PPC_F2 = 34,
|
|
UNW_PPC_F3 = 35,
|
|
UNW_PPC_F4 = 36,
|
|
UNW_PPC_F5 = 37,
|
|
UNW_PPC_F6 = 38,
|
|
UNW_PPC_F7 = 39,
|
|
UNW_PPC_F8 = 40,
|
|
UNW_PPC_F9 = 41,
|
|
UNW_PPC_F10 = 42,
|
|
UNW_PPC_F11 = 43,
|
|
UNW_PPC_F12 = 44,
|
|
UNW_PPC_F13 = 45,
|
|
UNW_PPC_F14 = 46,
|
|
UNW_PPC_F15 = 47,
|
|
UNW_PPC_F16 = 48,
|
|
UNW_PPC_F17 = 49,
|
|
UNW_PPC_F18 = 50,
|
|
UNW_PPC_F19 = 51,
|
|
UNW_PPC_F20 = 52,
|
|
UNW_PPC_F21 = 53,
|
|
UNW_PPC_F22 = 54,
|
|
UNW_PPC_F23 = 55,
|
|
UNW_PPC_F24 = 56,
|
|
UNW_PPC_F25 = 57,
|
|
UNW_PPC_F26 = 58,
|
|
UNW_PPC_F27 = 59,
|
|
UNW_PPC_F28 = 60,
|
|
UNW_PPC_F29 = 61,
|
|
UNW_PPC_F30 = 62,
|
|
UNW_PPC_F31 = 63,
|
|
UNW_PPC_MQ = 64,
|
|
UNW_PPC_LR = 65,
|
|
UNW_PPC_CTR = 66,
|
|
UNW_PPC_AP = 67,
|
|
UNW_PPC_CR0 = 68,
|
|
UNW_PPC_CR1 = 69,
|
|
UNW_PPC_CR2 = 70,
|
|
UNW_PPC_CR3 = 71,
|
|
UNW_PPC_CR4 = 72,
|
|
UNW_PPC_CR5 = 73,
|
|
UNW_PPC_CR6 = 74,
|
|
UNW_PPC_CR7 = 75,
|
|
UNW_PPC_XER = 76,
|
|
UNW_PPC_V0 = 77,
|
|
UNW_PPC_V1 = 78,
|
|
UNW_PPC_V2 = 79,
|
|
UNW_PPC_V3 = 80,
|
|
UNW_PPC_V4 = 81,
|
|
UNW_PPC_V5 = 82,
|
|
UNW_PPC_V6 = 83,
|
|
UNW_PPC_V7 = 84,
|
|
UNW_PPC_V8 = 85,
|
|
UNW_PPC_V9 = 86,
|
|
UNW_PPC_V10 = 87,
|
|
UNW_PPC_V11 = 88,
|
|
UNW_PPC_V12 = 89,
|
|
UNW_PPC_V13 = 90,
|
|
UNW_PPC_V14 = 91,
|
|
UNW_PPC_V15 = 92,
|
|
UNW_PPC_V16 = 93,
|
|
UNW_PPC_V17 = 94,
|
|
UNW_PPC_V18 = 95,
|
|
UNW_PPC_V19 = 96,
|
|
UNW_PPC_V20 = 97,
|
|
UNW_PPC_V21 = 98,
|
|
UNW_PPC_V22 = 99,
|
|
UNW_PPC_V23 = 100,
|
|
UNW_PPC_V24 = 101,
|
|
UNW_PPC_V25 = 102,
|
|
UNW_PPC_V26 = 103,
|
|
UNW_PPC_V27 = 104,
|
|
UNW_PPC_V28 = 105,
|
|
UNW_PPC_V29 = 106,
|
|
UNW_PPC_V30 = 107,
|
|
UNW_PPC_V31 = 108,
|
|
UNW_PPC_VRSAVE = 109,
|
|
UNW_PPC_VSCR = 110,
|
|
UNW_PPC_SPE_ACC = 111,
|
|
UNW_PPC_SPEFSCR = 112
|
|
};
|
|
|
|
// 64-bit ppc register numbers
|
|
enum {
|
|
UNW_PPC64_R0 = 0,
|
|
UNW_PPC64_R1 = 1,
|
|
UNW_PPC64_R2 = 2,
|
|
UNW_PPC64_R3 = 3,
|
|
UNW_PPC64_R4 = 4,
|
|
UNW_PPC64_R5 = 5,
|
|
UNW_PPC64_R6 = 6,
|
|
UNW_PPC64_R7 = 7,
|
|
UNW_PPC64_R8 = 8,
|
|
UNW_PPC64_R9 = 9,
|
|
UNW_PPC64_R10 = 10,
|
|
UNW_PPC64_R11 = 11,
|
|
UNW_PPC64_R12 = 12,
|
|
UNW_PPC64_R13 = 13,
|
|
UNW_PPC64_R14 = 14,
|
|
UNW_PPC64_R15 = 15,
|
|
UNW_PPC64_R16 = 16,
|
|
UNW_PPC64_R17 = 17,
|
|
UNW_PPC64_R18 = 18,
|
|
UNW_PPC64_R19 = 19,
|
|
UNW_PPC64_R20 = 20,
|
|
UNW_PPC64_R21 = 21,
|
|
UNW_PPC64_R22 = 22,
|
|
UNW_PPC64_R23 = 23,
|
|
UNW_PPC64_R24 = 24,
|
|
UNW_PPC64_R25 = 25,
|
|
UNW_PPC64_R26 = 26,
|
|
UNW_PPC64_R27 = 27,
|
|
UNW_PPC64_R28 = 28,
|
|
UNW_PPC64_R29 = 29,
|
|
UNW_PPC64_R30 = 30,
|
|
UNW_PPC64_R31 = 31,
|
|
UNW_PPC64_F0 = 32,
|
|
UNW_PPC64_F1 = 33,
|
|
UNW_PPC64_F2 = 34,
|
|
UNW_PPC64_F3 = 35,
|
|
UNW_PPC64_F4 = 36,
|
|
UNW_PPC64_F5 = 37,
|
|
UNW_PPC64_F6 = 38,
|
|
UNW_PPC64_F7 = 39,
|
|
UNW_PPC64_F8 = 40,
|
|
UNW_PPC64_F9 = 41,
|
|
UNW_PPC64_F10 = 42,
|
|
UNW_PPC64_F11 = 43,
|
|
UNW_PPC64_F12 = 44,
|
|
UNW_PPC64_F13 = 45,
|
|
UNW_PPC64_F14 = 46,
|
|
UNW_PPC64_F15 = 47,
|
|
UNW_PPC64_F16 = 48,
|
|
UNW_PPC64_F17 = 49,
|
|
UNW_PPC64_F18 = 50,
|
|
UNW_PPC64_F19 = 51,
|
|
UNW_PPC64_F20 = 52,
|
|
UNW_PPC64_F21 = 53,
|
|
UNW_PPC64_F22 = 54,
|
|
UNW_PPC64_F23 = 55,
|
|
UNW_PPC64_F24 = 56,
|
|
UNW_PPC64_F25 = 57,
|
|
UNW_PPC64_F26 = 58,
|
|
UNW_PPC64_F27 = 59,
|
|
UNW_PPC64_F28 = 60,
|
|
UNW_PPC64_F29 = 61,
|
|
UNW_PPC64_F30 = 62,
|
|
UNW_PPC64_F31 = 63,
|
|
// 64: reserved
|
|
UNW_PPC64_LR = 65,
|
|
UNW_PPC64_CTR = 66,
|
|
// 67: reserved
|
|
UNW_PPC64_CR0 = 68,
|
|
UNW_PPC64_CR1 = 69,
|
|
UNW_PPC64_CR2 = 70,
|
|
UNW_PPC64_CR3 = 71,
|
|
UNW_PPC64_CR4 = 72,
|
|
UNW_PPC64_CR5 = 73,
|
|
UNW_PPC64_CR6 = 74,
|
|
UNW_PPC64_CR7 = 75,
|
|
UNW_PPC64_XER = 76,
|
|
UNW_PPC64_V0 = 77,
|
|
UNW_PPC64_V1 = 78,
|
|
UNW_PPC64_V2 = 79,
|
|
UNW_PPC64_V3 = 80,
|
|
UNW_PPC64_V4 = 81,
|
|
UNW_PPC64_V5 = 82,
|
|
UNW_PPC64_V6 = 83,
|
|
UNW_PPC64_V7 = 84,
|
|
UNW_PPC64_V8 = 85,
|
|
UNW_PPC64_V9 = 86,
|
|
UNW_PPC64_V10 = 87,
|
|
UNW_PPC64_V11 = 88,
|
|
UNW_PPC64_V12 = 89,
|
|
UNW_PPC64_V13 = 90,
|
|
UNW_PPC64_V14 = 91,
|
|
UNW_PPC64_V15 = 92,
|
|
UNW_PPC64_V16 = 93,
|
|
UNW_PPC64_V17 = 94,
|
|
UNW_PPC64_V18 = 95,
|
|
UNW_PPC64_V19 = 96,
|
|
UNW_PPC64_V20 = 97,
|
|
UNW_PPC64_V21 = 98,
|
|
UNW_PPC64_V22 = 99,
|
|
UNW_PPC64_V23 = 100,
|
|
UNW_PPC64_V24 = 101,
|
|
UNW_PPC64_V25 = 102,
|
|
UNW_PPC64_V26 = 103,
|
|
UNW_PPC64_V27 = 104,
|
|
UNW_PPC64_V28 = 105,
|
|
UNW_PPC64_V29 = 106,
|
|
UNW_PPC64_V30 = 107,
|
|
UNW_PPC64_V31 = 108,
|
|
// 109, 111-113: OpenPOWER ELF V2 ABI: reserved
|
|
// Borrowing VRSAVE number from PPC32.
|
|
UNW_PPC64_VRSAVE = 109,
|
|
UNW_PPC64_VSCR = 110,
|
|
UNW_PPC64_TFHAR = 114,
|
|
UNW_PPC64_TFIAR = 115,
|
|
UNW_PPC64_TEXASR = 116,
|
|
UNW_PPC64_VS0 = UNW_PPC64_F0,
|
|
UNW_PPC64_VS1 = UNW_PPC64_F1,
|
|
UNW_PPC64_VS2 = UNW_PPC64_F2,
|
|
UNW_PPC64_VS3 = UNW_PPC64_F3,
|
|
UNW_PPC64_VS4 = UNW_PPC64_F4,
|
|
UNW_PPC64_VS5 = UNW_PPC64_F5,
|
|
UNW_PPC64_VS6 = UNW_PPC64_F6,
|
|
UNW_PPC64_VS7 = UNW_PPC64_F7,
|
|
UNW_PPC64_VS8 = UNW_PPC64_F8,
|
|
UNW_PPC64_VS9 = UNW_PPC64_F9,
|
|
UNW_PPC64_VS10 = UNW_PPC64_F10,
|
|
UNW_PPC64_VS11 = UNW_PPC64_F11,
|
|
UNW_PPC64_VS12 = UNW_PPC64_F12,
|
|
UNW_PPC64_VS13 = UNW_PPC64_F13,
|
|
UNW_PPC64_VS14 = UNW_PPC64_F14,
|
|
UNW_PPC64_VS15 = UNW_PPC64_F15,
|
|
UNW_PPC64_VS16 = UNW_PPC64_F16,
|
|
UNW_PPC64_VS17 = UNW_PPC64_F17,
|
|
UNW_PPC64_VS18 = UNW_PPC64_F18,
|
|
UNW_PPC64_VS19 = UNW_PPC64_F19,
|
|
UNW_PPC64_VS20 = UNW_PPC64_F20,
|
|
UNW_PPC64_VS21 = UNW_PPC64_F21,
|
|
UNW_PPC64_VS22 = UNW_PPC64_F22,
|
|
UNW_PPC64_VS23 = UNW_PPC64_F23,
|
|
UNW_PPC64_VS24 = UNW_PPC64_F24,
|
|
UNW_PPC64_VS25 = UNW_PPC64_F25,
|
|
UNW_PPC64_VS26 = UNW_PPC64_F26,
|
|
UNW_PPC64_VS27 = UNW_PPC64_F27,
|
|
UNW_PPC64_VS28 = UNW_PPC64_F28,
|
|
UNW_PPC64_VS29 = UNW_PPC64_F29,
|
|
UNW_PPC64_VS30 = UNW_PPC64_F30,
|
|
UNW_PPC64_VS31 = UNW_PPC64_F31,
|
|
UNW_PPC64_VS32 = UNW_PPC64_V0,
|
|
UNW_PPC64_VS33 = UNW_PPC64_V1,
|
|
UNW_PPC64_VS34 = UNW_PPC64_V2,
|
|
UNW_PPC64_VS35 = UNW_PPC64_V3,
|
|
UNW_PPC64_VS36 = UNW_PPC64_V4,
|
|
UNW_PPC64_VS37 = UNW_PPC64_V5,
|
|
UNW_PPC64_VS38 = UNW_PPC64_V6,
|
|
UNW_PPC64_VS39 = UNW_PPC64_V7,
|
|
UNW_PPC64_VS40 = UNW_PPC64_V8,
|
|
UNW_PPC64_VS41 = UNW_PPC64_V9,
|
|
UNW_PPC64_VS42 = UNW_PPC64_V10,
|
|
UNW_PPC64_VS43 = UNW_PPC64_V11,
|
|
UNW_PPC64_VS44 = UNW_PPC64_V12,
|
|
UNW_PPC64_VS45 = UNW_PPC64_V13,
|
|
UNW_PPC64_VS46 = UNW_PPC64_V14,
|
|
UNW_PPC64_VS47 = UNW_PPC64_V15,
|
|
UNW_PPC64_VS48 = UNW_PPC64_V16,
|
|
UNW_PPC64_VS49 = UNW_PPC64_V17,
|
|
UNW_PPC64_VS50 = UNW_PPC64_V18,
|
|
UNW_PPC64_VS51 = UNW_PPC64_V19,
|
|
UNW_PPC64_VS52 = UNW_PPC64_V20,
|
|
UNW_PPC64_VS53 = UNW_PPC64_V21,
|
|
UNW_PPC64_VS54 = UNW_PPC64_V22,
|
|
UNW_PPC64_VS55 = UNW_PPC64_V23,
|
|
UNW_PPC64_VS56 = UNW_PPC64_V24,
|
|
UNW_PPC64_VS57 = UNW_PPC64_V25,
|
|
UNW_PPC64_VS58 = UNW_PPC64_V26,
|
|
UNW_PPC64_VS59 = UNW_PPC64_V27,
|
|
UNW_PPC64_VS60 = UNW_PPC64_V28,
|
|
UNW_PPC64_VS61 = UNW_PPC64_V29,
|
|
UNW_PPC64_VS62 = UNW_PPC64_V30,
|
|
UNW_PPC64_VS63 = UNW_PPC64_V31
|
|
};
|
|
|
|
// 64-bit ARM64 registers
|
|
enum {
|
|
UNW_AARCH64_X0 = 0,
|
|
UNW_AARCH64_X1 = 1,
|
|
UNW_AARCH64_X2 = 2,
|
|
UNW_AARCH64_X3 = 3,
|
|
UNW_AARCH64_X4 = 4,
|
|
UNW_AARCH64_X5 = 5,
|
|
UNW_AARCH64_X6 = 6,
|
|
UNW_AARCH64_X7 = 7,
|
|
UNW_AARCH64_X8 = 8,
|
|
UNW_AARCH64_X9 = 9,
|
|
UNW_AARCH64_X10 = 10,
|
|
UNW_AARCH64_X11 = 11,
|
|
UNW_AARCH64_X12 = 12,
|
|
UNW_AARCH64_X13 = 13,
|
|
UNW_AARCH64_X14 = 14,
|
|
UNW_AARCH64_X15 = 15,
|
|
UNW_AARCH64_X16 = 16,
|
|
UNW_AARCH64_X17 = 17,
|
|
UNW_AARCH64_X18 = 18,
|
|
UNW_AARCH64_X19 = 19,
|
|
UNW_AARCH64_X20 = 20,
|
|
UNW_AARCH64_X21 = 21,
|
|
UNW_AARCH64_X22 = 22,
|
|
UNW_AARCH64_X23 = 23,
|
|
UNW_AARCH64_X24 = 24,
|
|
UNW_AARCH64_X25 = 25,
|
|
UNW_AARCH64_X26 = 26,
|
|
UNW_AARCH64_X27 = 27,
|
|
UNW_AARCH64_X28 = 28,
|
|
UNW_AARCH64_X29 = 29,
|
|
UNW_AARCH64_FP = 29,
|
|
UNW_AARCH64_X30 = 30,
|
|
UNW_AARCH64_LR = 30,
|
|
UNW_AARCH64_X31 = 31,
|
|
UNW_AARCH64_SP = 31,
|
|
UNW_AARCH64_PC = 32,
|
|
UNW_AARCH64_VG = 46,
|
|
|
|
// reserved block
|
|
UNW_AARCH64_RA_SIGN_STATE = 34,
|
|
|
|
// FP/vector registers
|
|
UNW_AARCH64_V0 = 64,
|
|
UNW_AARCH64_V1 = 65,
|
|
UNW_AARCH64_V2 = 66,
|
|
UNW_AARCH64_V3 = 67,
|
|
UNW_AARCH64_V4 = 68,
|
|
UNW_AARCH64_V5 = 69,
|
|
UNW_AARCH64_V6 = 70,
|
|
UNW_AARCH64_V7 = 71,
|
|
UNW_AARCH64_V8 = 72,
|
|
UNW_AARCH64_V9 = 73,
|
|
UNW_AARCH64_V10 = 74,
|
|
UNW_AARCH64_V11 = 75,
|
|
UNW_AARCH64_V12 = 76,
|
|
UNW_AARCH64_V13 = 77,
|
|
UNW_AARCH64_V14 = 78,
|
|
UNW_AARCH64_V15 = 79,
|
|
UNW_AARCH64_V16 = 80,
|
|
UNW_AARCH64_V17 = 81,
|
|
UNW_AARCH64_V18 = 82,
|
|
UNW_AARCH64_V19 = 83,
|
|
UNW_AARCH64_V20 = 84,
|
|
UNW_AARCH64_V21 = 85,
|
|
UNW_AARCH64_V22 = 86,
|
|
UNW_AARCH64_V23 = 87,
|
|
UNW_AARCH64_V24 = 88,
|
|
UNW_AARCH64_V25 = 89,
|
|
UNW_AARCH64_V26 = 90,
|
|
UNW_AARCH64_V27 = 91,
|
|
UNW_AARCH64_V28 = 92,
|
|
UNW_AARCH64_V29 = 93,
|
|
UNW_AARCH64_V30 = 94,
|
|
UNW_AARCH64_V31 = 95,
|
|
|
|
// Compatibility aliases
|
|
UNW_ARM64_X0 = UNW_AARCH64_X0,
|
|
UNW_ARM64_X1 = UNW_AARCH64_X1,
|
|
UNW_ARM64_X2 = UNW_AARCH64_X2,
|
|
UNW_ARM64_X3 = UNW_AARCH64_X3,
|
|
UNW_ARM64_X4 = UNW_AARCH64_X4,
|
|
UNW_ARM64_X5 = UNW_AARCH64_X5,
|
|
UNW_ARM64_X6 = UNW_AARCH64_X6,
|
|
UNW_ARM64_X7 = UNW_AARCH64_X7,
|
|
UNW_ARM64_X8 = UNW_AARCH64_X8,
|
|
UNW_ARM64_X9 = UNW_AARCH64_X9,
|
|
UNW_ARM64_X10 = UNW_AARCH64_X10,
|
|
UNW_ARM64_X11 = UNW_AARCH64_X11,
|
|
UNW_ARM64_X12 = UNW_AARCH64_X12,
|
|
UNW_ARM64_X13 = UNW_AARCH64_X13,
|
|
UNW_ARM64_X14 = UNW_AARCH64_X14,
|
|
UNW_ARM64_X15 = UNW_AARCH64_X15,
|
|
UNW_ARM64_X16 = UNW_AARCH64_X16,
|
|
UNW_ARM64_X17 = UNW_AARCH64_X17,
|
|
UNW_ARM64_X18 = UNW_AARCH64_X18,
|
|
UNW_ARM64_X19 = UNW_AARCH64_X19,
|
|
UNW_ARM64_X20 = UNW_AARCH64_X20,
|
|
UNW_ARM64_X21 = UNW_AARCH64_X21,
|
|
UNW_ARM64_X22 = UNW_AARCH64_X22,
|
|
UNW_ARM64_X23 = UNW_AARCH64_X23,
|
|
UNW_ARM64_X24 = UNW_AARCH64_X24,
|
|
UNW_ARM64_X25 = UNW_AARCH64_X25,
|
|
UNW_ARM64_X26 = UNW_AARCH64_X26,
|
|
UNW_ARM64_X27 = UNW_AARCH64_X27,
|
|
UNW_ARM64_X28 = UNW_AARCH64_X28,
|
|
UNW_ARM64_X29 = UNW_AARCH64_X29,
|
|
UNW_ARM64_FP = UNW_AARCH64_FP,
|
|
UNW_ARM64_X30 = UNW_AARCH64_X30,
|
|
UNW_ARM64_LR = UNW_AARCH64_LR,
|
|
UNW_ARM64_X31 = UNW_AARCH64_X31,
|
|
UNW_ARM64_SP = UNW_AARCH64_SP,
|
|
UNW_ARM64_PC = UNW_AARCH64_PC,
|
|
UNW_ARM64_RA_SIGN_STATE = UNW_AARCH64_RA_SIGN_STATE,
|
|
UNW_ARM64_D0 = UNW_AARCH64_V0,
|
|
UNW_ARM64_D1 = UNW_AARCH64_V1,
|
|
UNW_ARM64_D2 = UNW_AARCH64_V2,
|
|
UNW_ARM64_D3 = UNW_AARCH64_V3,
|
|
UNW_ARM64_D4 = UNW_AARCH64_V4,
|
|
UNW_ARM64_D5 = UNW_AARCH64_V5,
|
|
UNW_ARM64_D6 = UNW_AARCH64_V6,
|
|
UNW_ARM64_D7 = UNW_AARCH64_V7,
|
|
UNW_ARM64_D8 = UNW_AARCH64_V8,
|
|
UNW_ARM64_D9 = UNW_AARCH64_V9,
|
|
UNW_ARM64_D10 = UNW_AARCH64_V10,
|
|
UNW_ARM64_D11 = UNW_AARCH64_V11,
|
|
UNW_ARM64_D12 = UNW_AARCH64_V12,
|
|
UNW_ARM64_D13 = UNW_AARCH64_V13,
|
|
UNW_ARM64_D14 = UNW_AARCH64_V14,
|
|
UNW_ARM64_D15 = UNW_AARCH64_V15,
|
|
UNW_ARM64_D16 = UNW_AARCH64_V16,
|
|
UNW_ARM64_D17 = UNW_AARCH64_V17,
|
|
UNW_ARM64_D18 = UNW_AARCH64_V18,
|
|
UNW_ARM64_D19 = UNW_AARCH64_V19,
|
|
UNW_ARM64_D20 = UNW_AARCH64_V20,
|
|
UNW_ARM64_D21 = UNW_AARCH64_V21,
|
|
UNW_ARM64_D22 = UNW_AARCH64_V22,
|
|
UNW_ARM64_D23 = UNW_AARCH64_V23,
|
|
UNW_ARM64_D24 = UNW_AARCH64_V24,
|
|
UNW_ARM64_D25 = UNW_AARCH64_V25,
|
|
UNW_ARM64_D26 = UNW_AARCH64_V26,
|
|
UNW_ARM64_D27 = UNW_AARCH64_V27,
|
|
UNW_ARM64_D28 = UNW_AARCH64_V28,
|
|
UNW_ARM64_D29 = UNW_AARCH64_V29,
|
|
UNW_ARM64_D30 = UNW_AARCH64_V30,
|
|
UNW_ARM64_D31 = UNW_AARCH64_V31,
|
|
};
|
|
|
|
// 32-bit ARM registers. Numbers match DWARF for ARM spec #3.1 Table 1.
|
|
// Naming scheme uses recommendations given in Note 4 for VFP-v2 and VFP-v3.
|
|
// In this scheme, even though the 64-bit floating point registers D0-D31
|
|
// overlap physically with the 32-bit floating pointer registers S0-S31,
|
|
// they are given a non-overlapping range of register numbers.
|
|
//
|
|
// Commented out ranges are not preserved during unwinding.
|
|
enum {
|
|
UNW_ARM_R0 = 0,
|
|
UNW_ARM_R1 = 1,
|
|
UNW_ARM_R2 = 2,
|
|
UNW_ARM_R3 = 3,
|
|
UNW_ARM_R4 = 4,
|
|
UNW_ARM_R5 = 5,
|
|
UNW_ARM_R6 = 6,
|
|
UNW_ARM_R7 = 7,
|
|
UNW_ARM_R8 = 8,
|
|
UNW_ARM_R9 = 9,
|
|
UNW_ARM_R10 = 10,
|
|
UNW_ARM_R11 = 11,
|
|
UNW_ARM_R12 = 12,
|
|
UNW_ARM_SP = 13, // Logical alias for UNW_REG_SP
|
|
UNW_ARM_R13 = 13,
|
|
UNW_ARM_LR = 14,
|
|
UNW_ARM_R14 = 14,
|
|
UNW_ARM_IP = 15, // Logical alias for UNW_REG_IP
|
|
UNW_ARM_R15 = 15,
|
|
// 16-63 -- OBSOLETE. Used in VFP1 to represent both S0-S31 and D0-D31.
|
|
UNW_ARM_S0 = 64,
|
|
UNW_ARM_S1 = 65,
|
|
UNW_ARM_S2 = 66,
|
|
UNW_ARM_S3 = 67,
|
|
UNW_ARM_S4 = 68,
|
|
UNW_ARM_S5 = 69,
|
|
UNW_ARM_S6 = 70,
|
|
UNW_ARM_S7 = 71,
|
|
UNW_ARM_S8 = 72,
|
|
UNW_ARM_S9 = 73,
|
|
UNW_ARM_S10 = 74,
|
|
UNW_ARM_S11 = 75,
|
|
UNW_ARM_S12 = 76,
|
|
UNW_ARM_S13 = 77,
|
|
UNW_ARM_S14 = 78,
|
|
UNW_ARM_S15 = 79,
|
|
UNW_ARM_S16 = 80,
|
|
UNW_ARM_S17 = 81,
|
|
UNW_ARM_S18 = 82,
|
|
UNW_ARM_S19 = 83,
|
|
UNW_ARM_S20 = 84,
|
|
UNW_ARM_S21 = 85,
|
|
UNW_ARM_S22 = 86,
|
|
UNW_ARM_S23 = 87,
|
|
UNW_ARM_S24 = 88,
|
|
UNW_ARM_S25 = 89,
|
|
UNW_ARM_S26 = 90,
|
|
UNW_ARM_S27 = 91,
|
|
UNW_ARM_S28 = 92,
|
|
UNW_ARM_S29 = 93,
|
|
UNW_ARM_S30 = 94,
|
|
UNW_ARM_S31 = 95,
|
|
// 96-103 -- OBSOLETE. F0-F7. Used by the FPA system. Superseded by VFP.
|
|
// 104-111 -- wCGR0-wCGR7, ACC0-ACC7 (Intel wireless MMX)
|
|
UNW_ARM_WR0 = 112,
|
|
UNW_ARM_WR1 = 113,
|
|
UNW_ARM_WR2 = 114,
|
|
UNW_ARM_WR3 = 115,
|
|
UNW_ARM_WR4 = 116,
|
|
UNW_ARM_WR5 = 117,
|
|
UNW_ARM_WR6 = 118,
|
|
UNW_ARM_WR7 = 119,
|
|
UNW_ARM_WR8 = 120,
|
|
UNW_ARM_WR9 = 121,
|
|
UNW_ARM_WR10 = 122,
|
|
UNW_ARM_WR11 = 123,
|
|
UNW_ARM_WR12 = 124,
|
|
UNW_ARM_WR13 = 125,
|
|
UNW_ARM_WR14 = 126,
|
|
UNW_ARM_WR15 = 127,
|
|
// 128-133 -- SPSR, SPSR_{FIQ|IRQ|ABT|UND|SVC}
|
|
// 134-142 -- Reserved
|
|
UNW_ARM_RA_AUTH_CODE = 143,
|
|
// 144-150 -- R8_USR-R14_USR
|
|
// 151-157 -- R8_FIQ-R14_FIQ
|
|
// 158-159 -- R13_IRQ-R14_IRQ
|
|
// 160-161 -- R13_ABT-R14_ABT
|
|
// 162-163 -- R13_UND-R14_UND
|
|
// 164-165 -- R13_SVC-R14_SVC
|
|
// 166-191 -- Reserved
|
|
UNW_ARM_WC0 = 192,
|
|
UNW_ARM_WC1 = 193,
|
|
UNW_ARM_WC2 = 194,
|
|
UNW_ARM_WC3 = 195,
|
|
// 196-199 -- wC4-wC7 (Intel wireless MMX control)
|
|
// 200-255 -- Reserved
|
|
UNW_ARM_D0 = 256,
|
|
UNW_ARM_D1 = 257,
|
|
UNW_ARM_D2 = 258,
|
|
UNW_ARM_D3 = 259,
|
|
UNW_ARM_D4 = 260,
|
|
UNW_ARM_D5 = 261,
|
|
UNW_ARM_D6 = 262,
|
|
UNW_ARM_D7 = 263,
|
|
UNW_ARM_D8 = 264,
|
|
UNW_ARM_D9 = 265,
|
|
UNW_ARM_D10 = 266,
|
|
UNW_ARM_D11 = 267,
|
|
UNW_ARM_D12 = 268,
|
|
UNW_ARM_D13 = 269,
|
|
UNW_ARM_D14 = 270,
|
|
UNW_ARM_D15 = 271,
|
|
UNW_ARM_D16 = 272,
|
|
UNW_ARM_D17 = 273,
|
|
UNW_ARM_D18 = 274,
|
|
UNW_ARM_D19 = 275,
|
|
UNW_ARM_D20 = 276,
|
|
UNW_ARM_D21 = 277,
|
|
UNW_ARM_D22 = 278,
|
|
UNW_ARM_D23 = 279,
|
|
UNW_ARM_D24 = 280,
|
|
UNW_ARM_D25 = 281,
|
|
UNW_ARM_D26 = 282,
|
|
UNW_ARM_D27 = 283,
|
|
UNW_ARM_D28 = 284,
|
|
UNW_ARM_D29 = 285,
|
|
UNW_ARM_D30 = 286,
|
|
UNW_ARM_D31 = 287,
|
|
// 288-319 -- Reserved for VFP/Neon
|
|
// 320-8191 -- Reserved
|
|
// 8192-16383 -- Unspecified vendor co-processor register.
|
|
};
|
|
|
|
// OpenRISC1000 register numbers
|
|
enum {
|
|
UNW_OR1K_R0 = 0,
|
|
UNW_OR1K_R1 = 1,
|
|
UNW_OR1K_R2 = 2,
|
|
UNW_OR1K_R3 = 3,
|
|
UNW_OR1K_R4 = 4,
|
|
UNW_OR1K_R5 = 5,
|
|
UNW_OR1K_R6 = 6,
|
|
UNW_OR1K_R7 = 7,
|
|
UNW_OR1K_R8 = 8,
|
|
UNW_OR1K_R9 = 9,
|
|
UNW_OR1K_R10 = 10,
|
|
UNW_OR1K_R11 = 11,
|
|
UNW_OR1K_R12 = 12,
|
|
UNW_OR1K_R13 = 13,
|
|
UNW_OR1K_R14 = 14,
|
|
UNW_OR1K_R15 = 15,
|
|
UNW_OR1K_R16 = 16,
|
|
UNW_OR1K_R17 = 17,
|
|
UNW_OR1K_R18 = 18,
|
|
UNW_OR1K_R19 = 19,
|
|
UNW_OR1K_R20 = 20,
|
|
UNW_OR1K_R21 = 21,
|
|
UNW_OR1K_R22 = 22,
|
|
UNW_OR1K_R23 = 23,
|
|
UNW_OR1K_R24 = 24,
|
|
UNW_OR1K_R25 = 25,
|
|
UNW_OR1K_R26 = 26,
|
|
UNW_OR1K_R27 = 27,
|
|
UNW_OR1K_R28 = 28,
|
|
UNW_OR1K_R29 = 29,
|
|
UNW_OR1K_R30 = 30,
|
|
UNW_OR1K_R31 = 31,
|
|
UNW_OR1K_EPCR = 32,
|
|
};
|
|
|
|
// MIPS registers
|
|
enum {
|
|
UNW_MIPS_R0 = 0,
|
|
UNW_MIPS_R1 = 1,
|
|
UNW_MIPS_R2 = 2,
|
|
UNW_MIPS_R3 = 3,
|
|
UNW_MIPS_R4 = 4,
|
|
UNW_MIPS_R5 = 5,
|
|
UNW_MIPS_R6 = 6,
|
|
UNW_MIPS_R7 = 7,
|
|
UNW_MIPS_R8 = 8,
|
|
UNW_MIPS_R9 = 9,
|
|
UNW_MIPS_R10 = 10,
|
|
UNW_MIPS_R11 = 11,
|
|
UNW_MIPS_R12 = 12,
|
|
UNW_MIPS_R13 = 13,
|
|
UNW_MIPS_R14 = 14,
|
|
UNW_MIPS_R15 = 15,
|
|
UNW_MIPS_R16 = 16,
|
|
UNW_MIPS_R17 = 17,
|
|
UNW_MIPS_R18 = 18,
|
|
UNW_MIPS_R19 = 19,
|
|
UNW_MIPS_R20 = 20,
|
|
UNW_MIPS_R21 = 21,
|
|
UNW_MIPS_R22 = 22,
|
|
UNW_MIPS_R23 = 23,
|
|
UNW_MIPS_R24 = 24,
|
|
UNW_MIPS_R25 = 25,
|
|
UNW_MIPS_R26 = 26,
|
|
UNW_MIPS_R27 = 27,
|
|
UNW_MIPS_R28 = 28,
|
|
UNW_MIPS_R29 = 29,
|
|
UNW_MIPS_R30 = 30,
|
|
UNW_MIPS_R31 = 31,
|
|
UNW_MIPS_F0 = 32,
|
|
UNW_MIPS_F1 = 33,
|
|
UNW_MIPS_F2 = 34,
|
|
UNW_MIPS_F3 = 35,
|
|
UNW_MIPS_F4 = 36,
|
|
UNW_MIPS_F5 = 37,
|
|
UNW_MIPS_F6 = 38,
|
|
UNW_MIPS_F7 = 39,
|
|
UNW_MIPS_F8 = 40,
|
|
UNW_MIPS_F9 = 41,
|
|
UNW_MIPS_F10 = 42,
|
|
UNW_MIPS_F11 = 43,
|
|
UNW_MIPS_F12 = 44,
|
|
UNW_MIPS_F13 = 45,
|
|
UNW_MIPS_F14 = 46,
|
|
UNW_MIPS_F15 = 47,
|
|
UNW_MIPS_F16 = 48,
|
|
UNW_MIPS_F17 = 49,
|
|
UNW_MIPS_F18 = 50,
|
|
UNW_MIPS_F19 = 51,
|
|
UNW_MIPS_F20 = 52,
|
|
UNW_MIPS_F21 = 53,
|
|
UNW_MIPS_F22 = 54,
|
|
UNW_MIPS_F23 = 55,
|
|
UNW_MIPS_F24 = 56,
|
|
UNW_MIPS_F25 = 57,
|
|
UNW_MIPS_F26 = 58,
|
|
UNW_MIPS_F27 = 59,
|
|
UNW_MIPS_F28 = 60,
|
|
UNW_MIPS_F29 = 61,
|
|
UNW_MIPS_F30 = 62,
|
|
UNW_MIPS_F31 = 63,
|
|
// HI,LO have been dropped since r6, we keep them here.
|
|
// So, when we add DSP/MSA etc, we can use the same register indexes
|
|
// for r6 and pre-r6.
|
|
UNW_MIPS_HI = 64,
|
|
UNW_MIPS_LO = 65,
|
|
};
|
|
|
|
// SPARC registers
|
|
enum {
|
|
UNW_SPARC_G0 = 0,
|
|
UNW_SPARC_G1 = 1,
|
|
UNW_SPARC_G2 = 2,
|
|
UNW_SPARC_G3 = 3,
|
|
UNW_SPARC_G4 = 4,
|
|
UNW_SPARC_G5 = 5,
|
|
UNW_SPARC_G6 = 6,
|
|
UNW_SPARC_G7 = 7,
|
|
UNW_SPARC_O0 = 8,
|
|
UNW_SPARC_O1 = 9,
|
|
UNW_SPARC_O2 = 10,
|
|
UNW_SPARC_O3 = 11,
|
|
UNW_SPARC_O4 = 12,
|
|
UNW_SPARC_O5 = 13,
|
|
UNW_SPARC_O6 = 14,
|
|
UNW_SPARC_O7 = 15,
|
|
UNW_SPARC_L0 = 16,
|
|
UNW_SPARC_L1 = 17,
|
|
UNW_SPARC_L2 = 18,
|
|
UNW_SPARC_L3 = 19,
|
|
UNW_SPARC_L4 = 20,
|
|
UNW_SPARC_L5 = 21,
|
|
UNW_SPARC_L6 = 22,
|
|
UNW_SPARC_L7 = 23,
|
|
UNW_SPARC_I0 = 24,
|
|
UNW_SPARC_I1 = 25,
|
|
UNW_SPARC_I2 = 26,
|
|
UNW_SPARC_I3 = 27,
|
|
UNW_SPARC_I4 = 28,
|
|
UNW_SPARC_I5 = 29,
|
|
UNW_SPARC_I6 = 30,
|
|
UNW_SPARC_I7 = 31,
|
|
};
|
|
|
|
// Hexagon register numbers
|
|
enum {
|
|
UNW_HEXAGON_R0,
|
|
UNW_HEXAGON_R1,
|
|
UNW_HEXAGON_R2,
|
|
UNW_HEXAGON_R3,
|
|
UNW_HEXAGON_R4,
|
|
UNW_HEXAGON_R5,
|
|
UNW_HEXAGON_R6,
|
|
UNW_HEXAGON_R7,
|
|
UNW_HEXAGON_R8,
|
|
UNW_HEXAGON_R9,
|
|
UNW_HEXAGON_R10,
|
|
UNW_HEXAGON_R11,
|
|
UNW_HEXAGON_R12,
|
|
UNW_HEXAGON_R13,
|
|
UNW_HEXAGON_R14,
|
|
UNW_HEXAGON_R15,
|
|
UNW_HEXAGON_R16,
|
|
UNW_HEXAGON_R17,
|
|
UNW_HEXAGON_R18,
|
|
UNW_HEXAGON_R19,
|
|
UNW_HEXAGON_R20,
|
|
UNW_HEXAGON_R21,
|
|
UNW_HEXAGON_R22,
|
|
UNW_HEXAGON_R23,
|
|
UNW_HEXAGON_R24,
|
|
UNW_HEXAGON_R25,
|
|
UNW_HEXAGON_R26,
|
|
UNW_HEXAGON_R27,
|
|
UNW_HEXAGON_R28,
|
|
UNW_HEXAGON_R29,
|
|
UNW_HEXAGON_R30,
|
|
UNW_HEXAGON_R31,
|
|
UNW_HEXAGON_P3_0,
|
|
UNW_HEXAGON_PC,
|
|
};
|
|
|
|
// RISC-V registers. These match the DWARF register numbers defined by section
|
|
// 4 of the RISC-V ELF psABI specification, which can be found at:
|
|
//
|
|
// https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md
|
|
enum {
|
|
UNW_RISCV_X0 = 0,
|
|
UNW_RISCV_X1 = 1,
|
|
UNW_RISCV_X2 = 2,
|
|
UNW_RISCV_X3 = 3,
|
|
UNW_RISCV_X4 = 4,
|
|
UNW_RISCV_X5 = 5,
|
|
UNW_RISCV_X6 = 6,
|
|
UNW_RISCV_X7 = 7,
|
|
UNW_RISCV_X8 = 8,
|
|
UNW_RISCV_X9 = 9,
|
|
UNW_RISCV_X10 = 10,
|
|
UNW_RISCV_X11 = 11,
|
|
UNW_RISCV_X12 = 12,
|
|
UNW_RISCV_X13 = 13,
|
|
UNW_RISCV_X14 = 14,
|
|
UNW_RISCV_X15 = 15,
|
|
UNW_RISCV_X16 = 16,
|
|
UNW_RISCV_X17 = 17,
|
|
UNW_RISCV_X18 = 18,
|
|
UNW_RISCV_X19 = 19,
|
|
UNW_RISCV_X20 = 20,
|
|
UNW_RISCV_X21 = 21,
|
|
UNW_RISCV_X22 = 22,
|
|
UNW_RISCV_X23 = 23,
|
|
UNW_RISCV_X24 = 24,
|
|
UNW_RISCV_X25 = 25,
|
|
UNW_RISCV_X26 = 26,
|
|
UNW_RISCV_X27 = 27,
|
|
UNW_RISCV_X28 = 28,
|
|
UNW_RISCV_X29 = 29,
|
|
UNW_RISCV_X30 = 30,
|
|
UNW_RISCV_X31 = 31,
|
|
UNW_RISCV_F0 = 32,
|
|
UNW_RISCV_F1 = 33,
|
|
UNW_RISCV_F2 = 34,
|
|
UNW_RISCV_F3 = 35,
|
|
UNW_RISCV_F4 = 36,
|
|
UNW_RISCV_F5 = 37,
|
|
UNW_RISCV_F6 = 38,
|
|
UNW_RISCV_F7 = 39,
|
|
UNW_RISCV_F8 = 40,
|
|
UNW_RISCV_F9 = 41,
|
|
UNW_RISCV_F10 = 42,
|
|
UNW_RISCV_F11 = 43,
|
|
UNW_RISCV_F12 = 44,
|
|
UNW_RISCV_F13 = 45,
|
|
UNW_RISCV_F14 = 46,
|
|
UNW_RISCV_F15 = 47,
|
|
UNW_RISCV_F16 = 48,
|
|
UNW_RISCV_F17 = 49,
|
|
UNW_RISCV_F18 = 50,
|
|
UNW_RISCV_F19 = 51,
|
|
UNW_RISCV_F20 = 52,
|
|
UNW_RISCV_F21 = 53,
|
|
UNW_RISCV_F22 = 54,
|
|
UNW_RISCV_F23 = 55,
|
|
UNW_RISCV_F24 = 56,
|
|
UNW_RISCV_F25 = 57,
|
|
UNW_RISCV_F26 = 58,
|
|
UNW_RISCV_F27 = 59,
|
|
UNW_RISCV_F28 = 60,
|
|
UNW_RISCV_F29 = 61,
|
|
UNW_RISCV_F30 = 62,
|
|
UNW_RISCV_F31 = 63,
|
|
// 65-95 -- Reserved for future standard extensions
|
|
// 96-127 -- v0-v31 (Vector registers)
|
|
// 128-3071 -- Reserved for future standard extensions
|
|
// 3072-4095 -- Reserved for custom extensions
|
|
// 4096-8191 -- CSRs
|
|
//
|
|
// VLENB CSR number: 0xC22 -- defined by section 3 of v-spec:
|
|
// https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#3-vector-extension-programmers-model
|
|
// VLENB DWARF number: 0x1000 + 0xC22
|
|
UNW_RISCV_VLENB = 0x1C22,
|
|
};
|
|
|
|
// VE register numbers
|
|
enum {
|
|
UNW_VE_S0 = 0,
|
|
UNW_VE_S1 = 1,
|
|
UNW_VE_S2 = 2,
|
|
UNW_VE_S3 = 3,
|
|
UNW_VE_S4 = 4,
|
|
UNW_VE_S5 = 5,
|
|
UNW_VE_S6 = 6,
|
|
UNW_VE_S7 = 7,
|
|
UNW_VE_S8 = 8,
|
|
UNW_VE_S9 = 9,
|
|
UNW_VE_S10 = 10,
|
|
UNW_VE_S11 = 11,
|
|
UNW_VE_S12 = 12,
|
|
UNW_VE_S13 = 13,
|
|
UNW_VE_S14 = 14,
|
|
UNW_VE_S15 = 15,
|
|
UNW_VE_S16 = 16,
|
|
UNW_VE_S17 = 17,
|
|
UNW_VE_S18 = 18,
|
|
UNW_VE_S19 = 19,
|
|
UNW_VE_S20 = 20,
|
|
UNW_VE_S21 = 21,
|
|
UNW_VE_S22 = 22,
|
|
UNW_VE_S23 = 23,
|
|
UNW_VE_S24 = 24,
|
|
UNW_VE_S25 = 25,
|
|
UNW_VE_S26 = 26,
|
|
UNW_VE_S27 = 27,
|
|
UNW_VE_S28 = 28,
|
|
UNW_VE_S29 = 29,
|
|
UNW_VE_S30 = 30,
|
|
UNW_VE_S31 = 31,
|
|
UNW_VE_S32 = 32,
|
|
UNW_VE_S33 = 33,
|
|
UNW_VE_S34 = 34,
|
|
UNW_VE_S35 = 35,
|
|
UNW_VE_S36 = 36,
|
|
UNW_VE_S37 = 37,
|
|
UNW_VE_S38 = 38,
|
|
UNW_VE_S39 = 39,
|
|
UNW_VE_S40 = 40,
|
|
UNW_VE_S41 = 41,
|
|
UNW_VE_S42 = 42,
|
|
UNW_VE_S43 = 43,
|
|
UNW_VE_S44 = 44,
|
|
UNW_VE_S45 = 45,
|
|
UNW_VE_S46 = 46,
|
|
UNW_VE_S47 = 47,
|
|
UNW_VE_S48 = 48,
|
|
UNW_VE_S49 = 49,
|
|
UNW_VE_S50 = 50,
|
|
UNW_VE_S51 = 51,
|
|
UNW_VE_S52 = 52,
|
|
UNW_VE_S53 = 53,
|
|
UNW_VE_S54 = 54,
|
|
UNW_VE_S55 = 55,
|
|
UNW_VE_S56 = 56,
|
|
UNW_VE_S57 = 57,
|
|
UNW_VE_S58 = 58,
|
|
UNW_VE_S59 = 59,
|
|
UNW_VE_S60 = 60,
|
|
UNW_VE_S61 = 61,
|
|
UNW_VE_S62 = 62,
|
|
UNW_VE_S63 = 63,
|
|
UNW_VE_V0 = 64 + 0,
|
|
UNW_VE_V1 = 64 + 1,
|
|
UNW_VE_V2 = 64 + 2,
|
|
UNW_VE_V3 = 64 + 3,
|
|
UNW_VE_V4 = 64 + 4,
|
|
UNW_VE_V5 = 64 + 5,
|
|
UNW_VE_V6 = 64 + 6,
|
|
UNW_VE_V7 = 64 + 7,
|
|
UNW_VE_V8 = 64 + 8,
|
|
UNW_VE_V9 = 64 + 9,
|
|
UNW_VE_V10 = 64 + 10,
|
|
UNW_VE_V11 = 64 + 11,
|
|
UNW_VE_V12 = 64 + 12,
|
|
UNW_VE_V13 = 64 + 13,
|
|
UNW_VE_V14 = 64 + 14,
|
|
UNW_VE_V15 = 64 + 15,
|
|
UNW_VE_V16 = 64 + 16,
|
|
UNW_VE_V17 = 64 + 17,
|
|
UNW_VE_V18 = 64 + 18,
|
|
UNW_VE_V19 = 64 + 19,
|
|
UNW_VE_V20 = 64 + 20,
|
|
UNW_VE_V21 = 64 + 21,
|
|
UNW_VE_V22 = 64 + 22,
|
|
UNW_VE_V23 = 64 + 23,
|
|
UNW_VE_V24 = 64 + 24,
|
|
UNW_VE_V25 = 64 + 25,
|
|
UNW_VE_V26 = 64 + 26,
|
|
UNW_VE_V27 = 64 + 27,
|
|
UNW_VE_V28 = 64 + 28,
|
|
UNW_VE_V29 = 64 + 29,
|
|
UNW_VE_V30 = 64 + 30,
|
|
UNW_VE_V31 = 64 + 31,
|
|
UNW_VE_V32 = 64 + 32,
|
|
UNW_VE_V33 = 64 + 33,
|
|
UNW_VE_V34 = 64 + 34,
|
|
UNW_VE_V35 = 64 + 35,
|
|
UNW_VE_V36 = 64 + 36,
|
|
UNW_VE_V37 = 64 + 37,
|
|
UNW_VE_V38 = 64 + 38,
|
|
UNW_VE_V39 = 64 + 39,
|
|
UNW_VE_V40 = 64 + 40,
|
|
UNW_VE_V41 = 64 + 41,
|
|
UNW_VE_V42 = 64 + 42,
|
|
UNW_VE_V43 = 64 + 43,
|
|
UNW_VE_V44 = 64 + 44,
|
|
UNW_VE_V45 = 64 + 45,
|
|
UNW_VE_V46 = 64 + 46,
|
|
UNW_VE_V47 = 64 + 47,
|
|
UNW_VE_V48 = 64 + 48,
|
|
UNW_VE_V49 = 64 + 49,
|
|
UNW_VE_V50 = 64 + 50,
|
|
UNW_VE_V51 = 64 + 51,
|
|
UNW_VE_V52 = 64 + 52,
|
|
UNW_VE_V53 = 64 + 53,
|
|
UNW_VE_V54 = 64 + 54,
|
|
UNW_VE_V55 = 64 + 55,
|
|
UNW_VE_V56 = 64 + 56,
|
|
UNW_VE_V57 = 64 + 57,
|
|
UNW_VE_V58 = 64 + 58,
|
|
UNW_VE_V59 = 64 + 59,
|
|
UNW_VE_V60 = 64 + 60,
|
|
UNW_VE_V61 = 64 + 61,
|
|
UNW_VE_V62 = 64 + 62,
|
|
UNW_VE_V63 = 64 + 63,
|
|
UNW_VE_VM0 = 128 + 0,
|
|
UNW_VE_VM1 = 128 + 1,
|
|
UNW_VE_VM2 = 128 + 2,
|
|
UNW_VE_VM3 = 128 + 3,
|
|
UNW_VE_VM4 = 128 + 4,
|
|
UNW_VE_VM5 = 128 + 5,
|
|
UNW_VE_VM6 = 128 + 6,
|
|
UNW_VE_VM7 = 128 + 7,
|
|
UNW_VE_VM8 = 128 + 8,
|
|
UNW_VE_VM9 = 128 + 9,
|
|
UNW_VE_VM10 = 128 + 10,
|
|
UNW_VE_VM11 = 128 + 11,
|
|
UNW_VE_VM12 = 128 + 12,
|
|
UNW_VE_VM13 = 128 + 13,
|
|
UNW_VE_VM14 = 128 + 14,
|
|
UNW_VE_VM15 = 128 + 15, // = 143
|
|
|
|
// Following registers don't have DWARF register numbers.
|
|
UNW_VE_VIXR = 144,
|
|
UNW_VE_VL = 145,
|
|
};
|
|
|
|
// s390x register numbers
|
|
enum {
|
|
UNW_S390X_R0 = 0,
|
|
UNW_S390X_R1 = 1,
|
|
UNW_S390X_R2 = 2,
|
|
UNW_S390X_R3 = 3,
|
|
UNW_S390X_R4 = 4,
|
|
UNW_S390X_R5 = 5,
|
|
UNW_S390X_R6 = 6,
|
|
UNW_S390X_R7 = 7,
|
|
UNW_S390X_R8 = 8,
|
|
UNW_S390X_R9 = 9,
|
|
UNW_S390X_R10 = 10,
|
|
UNW_S390X_R11 = 11,
|
|
UNW_S390X_R12 = 12,
|
|
UNW_S390X_R13 = 13,
|
|
UNW_S390X_R14 = 14,
|
|
UNW_S390X_R15 = 15,
|
|
UNW_S390X_F0 = 16,
|
|
UNW_S390X_F2 = 17,
|
|
UNW_S390X_F4 = 18,
|
|
UNW_S390X_F6 = 19,
|
|
UNW_S390X_F1 = 20,
|
|
UNW_S390X_F3 = 21,
|
|
UNW_S390X_F5 = 22,
|
|
UNW_S390X_F7 = 23,
|
|
UNW_S390X_F8 = 24,
|
|
UNW_S390X_F10 = 25,
|
|
UNW_S390X_F12 = 26,
|
|
UNW_S390X_F14 = 27,
|
|
UNW_S390X_F9 = 28,
|
|
UNW_S390X_F11 = 29,
|
|
UNW_S390X_F13 = 30,
|
|
UNW_S390X_F15 = 31,
|
|
// 32-47 Control Registers
|
|
// 48-63 Access Registers
|
|
UNW_S390X_PSWM = 64,
|
|
UNW_S390X_PSWA = 65,
|
|
// 66-67 Reserved
|
|
// 68-83 Vector Registers %v16-%v31
|
|
};
|
|
|
|
// LoongArch registers.
|
|
enum {
|
|
UNW_LOONGARCH_R0 = 0,
|
|
UNW_LOONGARCH_R1 = 1,
|
|
UNW_LOONGARCH_R2 = 2,
|
|
UNW_LOONGARCH_R3 = 3,
|
|
UNW_LOONGARCH_R4 = 4,
|
|
UNW_LOONGARCH_R5 = 5,
|
|
UNW_LOONGARCH_R6 = 6,
|
|
UNW_LOONGARCH_R7 = 7,
|
|
UNW_LOONGARCH_R8 = 8,
|
|
UNW_LOONGARCH_R9 = 9,
|
|
UNW_LOONGARCH_R10 = 10,
|
|
UNW_LOONGARCH_R11 = 11,
|
|
UNW_LOONGARCH_R12 = 12,
|
|
UNW_LOONGARCH_R13 = 13,
|
|
UNW_LOONGARCH_R14 = 14,
|
|
UNW_LOONGARCH_R15 = 15,
|
|
UNW_LOONGARCH_R16 = 16,
|
|
UNW_LOONGARCH_R17 = 17,
|
|
UNW_LOONGARCH_R18 = 18,
|
|
UNW_LOONGARCH_R19 = 19,
|
|
UNW_LOONGARCH_R20 = 20,
|
|
UNW_LOONGARCH_R21 = 21,
|
|
UNW_LOONGARCH_R22 = 22,
|
|
UNW_LOONGARCH_R23 = 23,
|
|
UNW_LOONGARCH_R24 = 24,
|
|
UNW_LOONGARCH_R25 = 25,
|
|
UNW_LOONGARCH_R26 = 26,
|
|
UNW_LOONGARCH_R27 = 27,
|
|
UNW_LOONGARCH_R28 = 28,
|
|
UNW_LOONGARCH_R29 = 29,
|
|
UNW_LOONGARCH_R30 = 30,
|
|
UNW_LOONGARCH_R31 = 31,
|
|
UNW_LOONGARCH_F0 = 32,
|
|
UNW_LOONGARCH_F1 = 33,
|
|
UNW_LOONGARCH_F2 = 34,
|
|
UNW_LOONGARCH_F3 = 35,
|
|
UNW_LOONGARCH_F4 = 36,
|
|
UNW_LOONGARCH_F5 = 37,
|
|
UNW_LOONGARCH_F6 = 38,
|
|
UNW_LOONGARCH_F7 = 39,
|
|
UNW_LOONGARCH_F8 = 40,
|
|
UNW_LOONGARCH_F9 = 41,
|
|
UNW_LOONGARCH_F10 = 42,
|
|
UNW_LOONGARCH_F11 = 43,
|
|
UNW_LOONGARCH_F12 = 44,
|
|
UNW_LOONGARCH_F13 = 45,
|
|
UNW_LOONGARCH_F14 = 46,
|
|
UNW_LOONGARCH_F15 = 47,
|
|
UNW_LOONGARCH_F16 = 48,
|
|
UNW_LOONGARCH_F17 = 49,
|
|
UNW_LOONGARCH_F18 = 50,
|
|
UNW_LOONGARCH_F19 = 51,
|
|
UNW_LOONGARCH_F20 = 52,
|
|
UNW_LOONGARCH_F21 = 53,
|
|
UNW_LOONGARCH_F22 = 54,
|
|
UNW_LOONGARCH_F23 = 55,
|
|
UNW_LOONGARCH_F24 = 56,
|
|
UNW_LOONGARCH_F25 = 57,
|
|
UNW_LOONGARCH_F26 = 58,
|
|
UNW_LOONGARCH_F27 = 59,
|
|
UNW_LOONGARCH_F28 = 60,
|
|
UNW_LOONGARCH_F29 = 61,
|
|
UNW_LOONGARCH_F30 = 62,
|
|
UNW_LOONGARCH_F31 = 63,
|
|
};
|
|
|
|
#endif
|