2015-04-25 03:39:17 +08:00
|
|
|
//===---------------------------- libunwind.h -----------------------------===//
|
|
|
|
//
|
2019-01-19 18:56:40 +08:00
|
|
|
// 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
|
2015-04-25 03:39:17 +08:00
|
|
|
//
|
|
|
|
//
|
2016-08-30 21:08:21 +08:00
|
|
|
// Compatible with libunwind API documented at:
|
2015-04-25 03:39:17 +08:00
|
|
|
// http://www.nongnu.org/libunwind/man/libunwind(3).html
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef __LIBUNWIND__
|
|
|
|
#define __LIBUNWIND__
|
|
|
|
|
2015-07-19 23:23:10 +08:00
|
|
|
#include <__libunwind_config.h>
|
|
|
|
|
2015-04-25 03:39:17 +08:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
#ifdef __APPLE__
|
2016-11-03 01:56:05 +08:00
|
|
|
#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
|
2015-04-25 03:39:17 +08:00
|
|
|
#else
|
2016-11-03 01:56:05 +08:00
|
|
|
#define LIBUNWIND_AVAIL __attribute__((unavailable))
|
2015-04-25 03:39:17 +08:00
|
|
|
#endif
|
2016-11-03 01:56:05 +08:00
|
|
|
#endif
|
2015-04-25 03:39:17 +08:00
|
|
|
#else
|
|
|
|
#define LIBUNWIND_AVAIL
|
|
|
|
#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 */
|
2018-12-14 19:30:12 +08:00
|
|
|
#if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY)
|
|
|
|
, UNW_ECROSSRASIGNING = -6550 /* cross unwind with return address signing */
|
|
|
|
#endif
|
2015-04-25 03:39:17 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct unw_context_t {
|
2016-05-25 20:36:34 +08:00
|
|
|
uint64_t data[_LIBUNWIND_CONTEXT_SIZE];
|
2015-04-25 03:39:17 +08:00
|
|
|
};
|
|
|
|
typedef struct unw_context_t unw_context_t;
|
|
|
|
|
|
|
|
struct unw_cursor_t {
|
2016-05-25 20:36:34 +08:00
|
|
|
uint64_t data[_LIBUNWIND_CURSOR_SIZE];
|
2015-04-25 03:39:17 +08:00
|
|
|
};
|
|
|
|
typedef struct unw_cursor_t unw_cursor_t;
|
|
|
|
|
|
|
|
typedef struct unw_addr_space *unw_addr_space_t;
|
|
|
|
|
|
|
|
typedef int unw_regnum_t;
|
2017-10-31 03:06:34 +08:00
|
|
|
typedef uintptr_t unw_word_t;
|
2019-01-29 17:00:32 +08:00
|
|
|
#if defined(__arm__) && !defined(__ARM_DWARF_EH__)
|
2015-04-25 03:39:17 +08:00
|
|
|
typedef uint64_t unw_fpreg_t;
|
|
|
|
#else
|
|
|
|
typedef double unw_fpreg_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct unw_proc_info_t {
|
|
|
|
unw_word_t start_ip; /* start address of function */
|
|
|
|
unw_word_t end_ip; /* address after end of function */
|
|
|
|
unw_word_t lsda; /* address of language specific data area, */
|
|
|
|
/* or zero if not used */
|
|
|
|
unw_word_t handler; /* personality routine, or zero if not used */
|
|
|
|
unw_word_t gp; /* not used */
|
|
|
|
unw_word_t flags; /* not used */
|
|
|
|
uint32_t format; /* compact unwind encoding, or zero if none */
|
2016-07-20 01:15:50 +08:00
|
|
|
uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */
|
|
|
|
unw_word_t unwind_info; /* address of DWARF unwind info, or zero */
|
2015-04-25 03:39:17 +08:00
|
|
|
unw_word_t 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
|
|
|
|
|
|
|
|
|
|
|
|
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 UNW_REMOTE
|
|
|
|
/*
|
|
|
|
* Mac OS X "remote" API for unwinding other processes on same machine
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
extern unw_addr_space_t unw_create_addr_space_for_task(task_t);
|
|
|
|
extern void unw_destroy_addr_space(unw_addr_space_t);
|
|
|
|
extern int unw_init_remote_thread(unw_cursor_t *, unw_addr_space_t, thread_t *);
|
|
|
|
#endif /* UNW_REMOTE */
|
|
|
|
|
|
|
|
/*
|
2016-08-30 21:08:21 +08:00
|
|
|
* traditional libunwind "remote" API
|
2015-04-25 03:39:17 +08:00
|
|
|
* NOT IMPLEMENTED on Mac OS X
|
|
|
|
*
|
|
|
|
* extern int unw_init_remote(unw_cursor_t*, unw_addr_space_t,
|
|
|
|
* thread_t*);
|
|
|
|
* extern unw_accessors_t unw_get_accessors(unw_addr_space_t);
|
|
|
|
* extern unw_addr_space_t unw_create_addr_space(unw_accessors_t, int);
|
|
|
|
* extern void unw_flush_cache(unw_addr_space_t, unw_word_t,
|
|
|
|
* unw_word_t);
|
|
|
|
* extern int unw_set_caching_policy(unw_addr_space_t,
|
|
|
|
* unw_caching_policy_t);
|
|
|
|
* extern void _U_dyn_register(unw_dyn_info_t*);
|
|
|
|
* extern void _U_dyn_cancel(unw_dyn_info_t*);
|
|
|
|
*/
|
|
|
|
|
|
|
|
#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,
|
2017-10-27 16:11:36 +08:00
|
|
|
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,
|
2015-04-25 03:39:17 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 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
|
|
|
|
};
|
|
|
|
|
2018-01-03 06:11:30 +08:00
|
|
|
// 64-bit ppc register numbers
|
|
|
|
enum {
|
2018-01-17 04:54:10 +08:00
|
|
|
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
|
2018-01-03 06:11:30 +08:00
|
|
|
};
|
|
|
|
|
2015-04-25 03:39:17 +08:00
|
|
|
// 64-bit ARM64 registers
|
|
|
|
enum {
|
|
|
|
UNW_ARM64_X0 = 0,
|
|
|
|
UNW_ARM64_X1 = 1,
|
|
|
|
UNW_ARM64_X2 = 2,
|
|
|
|
UNW_ARM64_X3 = 3,
|
|
|
|
UNW_ARM64_X4 = 4,
|
|
|
|
UNW_ARM64_X5 = 5,
|
|
|
|
UNW_ARM64_X6 = 6,
|
|
|
|
UNW_ARM64_X7 = 7,
|
|
|
|
UNW_ARM64_X8 = 8,
|
|
|
|
UNW_ARM64_X9 = 9,
|
|
|
|
UNW_ARM64_X10 = 10,
|
|
|
|
UNW_ARM64_X11 = 11,
|
|
|
|
UNW_ARM64_X12 = 12,
|
|
|
|
UNW_ARM64_X13 = 13,
|
|
|
|
UNW_ARM64_X14 = 14,
|
|
|
|
UNW_ARM64_X15 = 15,
|
|
|
|
UNW_ARM64_X16 = 16,
|
|
|
|
UNW_ARM64_X17 = 17,
|
|
|
|
UNW_ARM64_X18 = 18,
|
|
|
|
UNW_ARM64_X19 = 19,
|
|
|
|
UNW_ARM64_X20 = 20,
|
|
|
|
UNW_ARM64_X21 = 21,
|
|
|
|
UNW_ARM64_X22 = 22,
|
|
|
|
UNW_ARM64_X23 = 23,
|
|
|
|
UNW_ARM64_X24 = 24,
|
|
|
|
UNW_ARM64_X25 = 25,
|
|
|
|
UNW_ARM64_X26 = 26,
|
|
|
|
UNW_ARM64_X27 = 27,
|
|
|
|
UNW_ARM64_X28 = 28,
|
|
|
|
UNW_ARM64_X29 = 29,
|
|
|
|
UNW_ARM64_FP = 29,
|
|
|
|
UNW_ARM64_X30 = 30,
|
|
|
|
UNW_ARM64_LR = 30,
|
|
|
|
UNW_ARM64_X31 = 31,
|
|
|
|
UNW_ARM64_SP = 31,
|
|
|
|
// reserved block
|
2018-12-14 19:30:12 +08:00
|
|
|
UNW_ARM64_RA_SIGN_STATE = 34,
|
|
|
|
// reserved block
|
2015-04-25 03:39:17 +08:00
|
|
|
UNW_ARM64_D0 = 64,
|
|
|
|
UNW_ARM64_D1 = 65,
|
|
|
|
UNW_ARM64_D2 = 66,
|
|
|
|
UNW_ARM64_D3 = 67,
|
|
|
|
UNW_ARM64_D4 = 68,
|
|
|
|
UNW_ARM64_D5 = 69,
|
|
|
|
UNW_ARM64_D6 = 70,
|
|
|
|
UNW_ARM64_D7 = 71,
|
|
|
|
UNW_ARM64_D8 = 72,
|
|
|
|
UNW_ARM64_D9 = 73,
|
|
|
|
UNW_ARM64_D10 = 74,
|
|
|
|
UNW_ARM64_D11 = 75,
|
|
|
|
UNW_ARM64_D12 = 76,
|
|
|
|
UNW_ARM64_D13 = 77,
|
|
|
|
UNW_ARM64_D14 = 78,
|
|
|
|
UNW_ARM64_D15 = 79,
|
|
|
|
UNW_ARM64_D16 = 80,
|
|
|
|
UNW_ARM64_D17 = 81,
|
|
|
|
UNW_ARM64_D18 = 82,
|
|
|
|
UNW_ARM64_D19 = 83,
|
|
|
|
UNW_ARM64_D20 = 84,
|
|
|
|
UNW_ARM64_D21 = 85,
|
|
|
|
UNW_ARM64_D22 = 86,
|
|
|
|
UNW_ARM64_D23 = 87,
|
|
|
|
UNW_ARM64_D24 = 88,
|
|
|
|
UNW_ARM64_D25 = 89,
|
|
|
|
UNW_ARM64_D26 = 90,
|
|
|
|
UNW_ARM64_D27 = 91,
|
|
|
|
UNW_ARM64_D28 = 92,
|
|
|
|
UNW_ARM64_D29 = 93,
|
|
|
|
UNW_ARM64_D30 = 94,
|
|
|
|
UNW_ARM64_D31 = 95,
|
|
|
|
};
|
|
|
|
|
|
|
|
// 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-143 -- Reserved
|
|
|
|
// 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.
|
|
|
|
};
|
|
|
|
|
2015-08-31 13:26:37 +08:00
|
|
|
// 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,
|
[OR1K] Add the EPCR special-purpose register to register state.
This makes it possible to unwind hardware exception stack frames,
which necessarily save every register and so need an extra column
for storing the return address. CFI for the exception handler could
then look as follows:
.globl exception_vector
exception_vector:
.cfi_startproc
.cfi_signal_frame
.cfi_return_column 32
l.addi r1, r1, -0x100
.cfi_def_cfa_offset 0x100
l.sw 0x00(r1), r2
.cfi_offset 2, 0x00-0x100
l.sw 0x04(r1), r3
.cfi_offset 3, 0x04-0x100
l.sw 0x08(r1), r4
.cfi_offset 4, 0x08-0x100
l.mfspr r3, r0, SPR_EPCR_BASE
l.sw 0x78(r1), r3
.cfi_offset 32, 0x78-0x100
l.jal exception_handler
l.nop
l.lwz r2, 0x00(r1)
l.lwz r3, 0x04(r1)
l.lwz r4, 0x08(r1)
l.jr r9
l.nop
.cfi_endproc
This register could, of course, also be accessed by the trace
callback or personality function, if so desired.
llvm-svn: 332513
2018-05-17 03:09:48 +08:00
|
|
|
UNW_OR1K_EPCR = 32,
|
2015-08-31 13:26:37 +08:00
|
|
|
};
|
|
|
|
|
2017-12-13 05:43:36 +08:00
|
|
|
// 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,
|
2018-05-16 06:44:56 +08:00
|
|
|
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,
|
2017-12-13 05:43:36 +08:00
|
|
|
UNW_MIPS_HI = 64,
|
|
|
|
UNW_MIPS_LO = 65,
|
|
|
|
};
|
|
|
|
|
[Sparc] Add Sparc V8 support
Summary:
Adds the register class implementation for Sparc.
Adds support for DW_CFA_GNU_window_save.
Adds save and restore context functionality.
Adds getArch() function to each Registers_ class to be able to separate
between DW_CFA_AARCH64_negate_ra_state and DW_CFA_GNU_window_save which
are both represented by the same constant.
On Sparc the return address is the address of the call instruction, so
an offset needs to be added when returning to skip the call instruction
and its delay slot. If the function returns a struct it is also necessary
to skip one extra instruction on Sparc V8.
Reviewers: jyknight, mclow.lists, mstorsjo, compnerd
Reviewed By: jyknight, compnerd
Subscribers: jgorbe, mgorny, christof, llvm-commits, fedor.sergeev, JDevlieghere, ldionne, libcxx-commits
Differential Revision: https://reviews.llvm.org/D55763
llvm-svn: 351044
2019-01-14 18:15:20 +08:00
|
|
|
// 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,
|
|
|
|
};
|
|
|
|
|
2015-04-25 03:39:17 +08:00
|
|
|
#endif
|