1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 // Compatible with libunwind API documented at:
9 // http://www.nongnu.org/libunwind/man/libunwind(3).html
11 //===----------------------------------------------------------------------===//
16 #include <__libunwind_config.h>
23 #if __has_include(<Availability.h>)
24 #include <Availability.h>
26 #elif __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
27 #include <Availability.h>
31 #define LIBUNWIND_AVAIL __attribute__((unavailable))
32 #elif defined(__OSX_AVAILABLE_STARTING)
33 #define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0)
35 #include <AvailabilityMacros.h>
36 #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
37 #define LIBUNWIND_AVAIL AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
39 #define LIBUNWIND_AVAIL __attribute__((unavailable))
43 #define LIBUNWIND_AVAIL
46 #if defined(_WIN32) && defined(__SEH__)
47 #define LIBUNWIND_CURSOR_ALIGNMENT_ATTR __attribute__((__aligned__(16)))
49 #define LIBUNWIND_CURSOR_ALIGNMENT_ATTR
54 UNW_ESUCCESS
= 0, /* no error */
55 UNW_EUNSPEC
= -6540, /* unspecified (general) error */
56 UNW_ENOMEM
= -6541, /* out of memory */
57 UNW_EBADREG
= -6542, /* bad register number */
58 UNW_EREADONLYREG
= -6543, /* attempt to write read-only register */
59 UNW_ESTOPUNWIND
= -6544, /* stop unwinding */
60 UNW_EINVALIDIP
= -6545, /* invalid IP */
61 UNW_EBADFRAME
= -6546, /* bad frame */
62 UNW_EINVAL
= -6547, /* unsupported operation or bad value */
63 UNW_EBADVERSION
= -6548, /* unwind info has unsupported version */
64 UNW_ENOINFO
= -6549 /* no unwind info found */
65 #if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY)
66 , UNW_ECROSSRASIGNING
= -6550 /* cross unwind with return address signing */
70 struct unw_context_t
{
71 uint64_t data
[_LIBUNWIND_CONTEXT_SIZE
];
73 typedef struct unw_context_t unw_context_t
;
76 uint64_t data
[_LIBUNWIND_CURSOR_SIZE
];
77 } LIBUNWIND_CURSOR_ALIGNMENT_ATTR
;
78 typedef struct unw_cursor_t unw_cursor_t
;
80 typedef struct unw_addr_space
*unw_addr_space_t
;
82 typedef int unw_regnum_t
;
83 typedef uintptr_t unw_word_t
;
84 #if defined(__arm__) && !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
85 typedef uint64_t unw_fpreg_t
;
87 typedef double unw_fpreg_t
;
90 struct unw_proc_info_t
{
91 unw_word_t start_ip
; /* start address of function */
92 unw_word_t end_ip
; /* address after end of function */
93 unw_word_t lsda
; /* address of language specific data area, */
94 /* or zero if not used */
95 unw_word_t handler
; /* personality routine, or zero if not used */
96 unw_word_t gp
; /* not used */
97 unw_word_t flags
; /* not used */
98 uint32_t format
; /* compact unwind encoding, or zero if none */
99 uint32_t unwind_info_size
; /* size of DWARF unwind info, or zero if none */
100 unw_word_t unwind_info
; /* address of DWARF unwind info, or zero */
101 unw_word_t extra
; /* mach_header of mach-o image containing func */
103 typedef struct unw_proc_info_t unw_proc_info_t
;
109 extern int unw_getcontext(unw_context_t
*) LIBUNWIND_AVAIL
;
110 extern int unw_init_local(unw_cursor_t
*, unw_context_t
*) LIBUNWIND_AVAIL
;
111 extern int unw_step(unw_cursor_t
*) LIBUNWIND_AVAIL
;
112 extern int unw_get_reg(unw_cursor_t
*, unw_regnum_t
, unw_word_t
*) LIBUNWIND_AVAIL
;
113 extern int unw_get_fpreg(unw_cursor_t
*, unw_regnum_t
, unw_fpreg_t
*) LIBUNWIND_AVAIL
;
114 extern int unw_set_reg(unw_cursor_t
*, unw_regnum_t
, unw_word_t
) LIBUNWIND_AVAIL
;
115 extern int unw_set_fpreg(unw_cursor_t
*, unw_regnum_t
, unw_fpreg_t
) LIBUNWIND_AVAIL
;
116 extern int unw_resume(unw_cursor_t
*) LIBUNWIND_AVAIL
;
119 /* Save VFP registers in FSTMX format (instead of FSTMD). */
120 extern void unw_save_vfp_as_X(unw_cursor_t
*) LIBUNWIND_AVAIL
;
124 extern uintptr_t unw_get_data_rel_base(unw_cursor_t
*) LIBUNWIND_AVAIL
;
127 extern const char *unw_regname(unw_cursor_t
*, unw_regnum_t
) LIBUNWIND_AVAIL
;
128 extern int unw_get_proc_info(unw_cursor_t
*, unw_proc_info_t
*) LIBUNWIND_AVAIL
;
129 extern int unw_is_fpreg(unw_cursor_t
*, unw_regnum_t
) LIBUNWIND_AVAIL
;
130 extern int unw_is_signal_frame(unw_cursor_t
*) LIBUNWIND_AVAIL
;
131 extern int unw_get_proc_name(unw_cursor_t
*, char *, size_t, unw_word_t
*) LIBUNWIND_AVAIL
;
132 //extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
134 extern unw_addr_space_t unw_local_addr_space
;
140 // architecture independent register numbers
142 UNW_REG_IP
= -1, // instruction pointer
143 UNW_REG_SP
= -2, // stack pointer
146 // 32-bit x86 registers
158 // 64-bit x86_64 registers
177 UNW_X86_64_XMM0
= 17,
178 UNW_X86_64_XMM1
= 18,
179 UNW_X86_64_XMM2
= 19,
180 UNW_X86_64_XMM3
= 20,
181 UNW_X86_64_XMM4
= 21,
182 UNW_X86_64_XMM5
= 22,
183 UNW_X86_64_XMM6
= 23,
184 UNW_X86_64_XMM7
= 24,
185 UNW_X86_64_XMM8
= 25,
186 UNW_X86_64_XMM9
= 26,
187 UNW_X86_64_XMM10
= 27,
188 UNW_X86_64_XMM11
= 28,
189 UNW_X86_64_XMM12
= 29,
190 UNW_X86_64_XMM13
= 30,
191 UNW_X86_64_XMM14
= 31,
192 UNW_X86_64_XMM15
= 32,
196 // 32-bit ppc register numbers
307 UNW_PPC_VRSAVE
= 109,
309 UNW_PPC_SPE_ACC
= 111,
310 UNW_PPC_SPEFSCR
= 112
313 // 64-bit ppc register numbers
424 // 109, 111-113: OpenPOWER ELF V2 ABI: reserved
425 // Borrowing VRSAVE number from PPC32.
426 UNW_PPC64_VRSAVE
= 109,
427 UNW_PPC64_VSCR
= 110,
428 UNW_PPC64_TFHAR
= 114,
429 UNW_PPC64_TFIAR
= 115,
430 UNW_PPC64_TEXASR
= 116,
431 UNW_PPC64_VS0
= UNW_PPC64_F0
,
432 UNW_PPC64_VS1
= UNW_PPC64_F1
,
433 UNW_PPC64_VS2
= UNW_PPC64_F2
,
434 UNW_PPC64_VS3
= UNW_PPC64_F3
,
435 UNW_PPC64_VS4
= UNW_PPC64_F4
,
436 UNW_PPC64_VS5
= UNW_PPC64_F5
,
437 UNW_PPC64_VS6
= UNW_PPC64_F6
,
438 UNW_PPC64_VS7
= UNW_PPC64_F7
,
439 UNW_PPC64_VS8
= UNW_PPC64_F8
,
440 UNW_PPC64_VS9
= UNW_PPC64_F9
,
441 UNW_PPC64_VS10
= UNW_PPC64_F10
,
442 UNW_PPC64_VS11
= UNW_PPC64_F11
,
443 UNW_PPC64_VS12
= UNW_PPC64_F12
,
444 UNW_PPC64_VS13
= UNW_PPC64_F13
,
445 UNW_PPC64_VS14
= UNW_PPC64_F14
,
446 UNW_PPC64_VS15
= UNW_PPC64_F15
,
447 UNW_PPC64_VS16
= UNW_PPC64_F16
,
448 UNW_PPC64_VS17
= UNW_PPC64_F17
,
449 UNW_PPC64_VS18
= UNW_PPC64_F18
,
450 UNW_PPC64_VS19
= UNW_PPC64_F19
,
451 UNW_PPC64_VS20
= UNW_PPC64_F20
,
452 UNW_PPC64_VS21
= UNW_PPC64_F21
,
453 UNW_PPC64_VS22
= UNW_PPC64_F22
,
454 UNW_PPC64_VS23
= UNW_PPC64_F23
,
455 UNW_PPC64_VS24
= UNW_PPC64_F24
,
456 UNW_PPC64_VS25
= UNW_PPC64_F25
,
457 UNW_PPC64_VS26
= UNW_PPC64_F26
,
458 UNW_PPC64_VS27
= UNW_PPC64_F27
,
459 UNW_PPC64_VS28
= UNW_PPC64_F28
,
460 UNW_PPC64_VS29
= UNW_PPC64_F29
,
461 UNW_PPC64_VS30
= UNW_PPC64_F30
,
462 UNW_PPC64_VS31
= UNW_PPC64_F31
,
463 UNW_PPC64_VS32
= UNW_PPC64_V0
,
464 UNW_PPC64_VS33
= UNW_PPC64_V1
,
465 UNW_PPC64_VS34
= UNW_PPC64_V2
,
466 UNW_PPC64_VS35
= UNW_PPC64_V3
,
467 UNW_PPC64_VS36
= UNW_PPC64_V4
,
468 UNW_PPC64_VS37
= UNW_PPC64_V5
,
469 UNW_PPC64_VS38
= UNW_PPC64_V6
,
470 UNW_PPC64_VS39
= UNW_PPC64_V7
,
471 UNW_PPC64_VS40
= UNW_PPC64_V8
,
472 UNW_PPC64_VS41
= UNW_PPC64_V9
,
473 UNW_PPC64_VS42
= UNW_PPC64_V10
,
474 UNW_PPC64_VS43
= UNW_PPC64_V11
,
475 UNW_PPC64_VS44
= UNW_PPC64_V12
,
476 UNW_PPC64_VS45
= UNW_PPC64_V13
,
477 UNW_PPC64_VS46
= UNW_PPC64_V14
,
478 UNW_PPC64_VS47
= UNW_PPC64_V15
,
479 UNW_PPC64_VS48
= UNW_PPC64_V16
,
480 UNW_PPC64_VS49
= UNW_PPC64_V17
,
481 UNW_PPC64_VS50
= UNW_PPC64_V18
,
482 UNW_PPC64_VS51
= UNW_PPC64_V19
,
483 UNW_PPC64_VS52
= UNW_PPC64_V20
,
484 UNW_PPC64_VS53
= UNW_PPC64_V21
,
485 UNW_PPC64_VS54
= UNW_PPC64_V22
,
486 UNW_PPC64_VS55
= UNW_PPC64_V23
,
487 UNW_PPC64_VS56
= UNW_PPC64_V24
,
488 UNW_PPC64_VS57
= UNW_PPC64_V25
,
489 UNW_PPC64_VS58
= UNW_PPC64_V26
,
490 UNW_PPC64_VS59
= UNW_PPC64_V27
,
491 UNW_PPC64_VS60
= UNW_PPC64_V28
,
492 UNW_PPC64_VS61
= UNW_PPC64_V29
,
493 UNW_PPC64_VS62
= UNW_PPC64_V30
,
494 UNW_PPC64_VS63
= UNW_PPC64_V31
497 // 64-bit ARM64 registers
509 UNW_AARCH64_X10
= 10,
510 UNW_AARCH64_X11
= 11,
511 UNW_AARCH64_X12
= 12,
512 UNW_AARCH64_X13
= 13,
513 UNW_AARCH64_X14
= 14,
514 UNW_AARCH64_X15
= 15,
515 UNW_AARCH64_X16
= 16,
516 UNW_AARCH64_X17
= 17,
517 UNW_AARCH64_X18
= 18,
518 UNW_AARCH64_X19
= 19,
519 UNW_AARCH64_X20
= 20,
520 UNW_AARCH64_X21
= 21,
521 UNW_AARCH64_X22
= 22,
522 UNW_AARCH64_X23
= 23,
523 UNW_AARCH64_X24
= 24,
524 UNW_AARCH64_X25
= 25,
525 UNW_AARCH64_X26
= 26,
526 UNW_AARCH64_X27
= 27,
527 UNW_AARCH64_X28
= 28,
528 UNW_AARCH64_X29
= 29,
530 UNW_AARCH64_X30
= 30,
532 UNW_AARCH64_X31
= 31,
537 UNW_AARCH64_RA_SIGN_STATE
= 34,
539 // FP/vector registers
550 UNW_AARCH64_V10
= 74,
551 UNW_AARCH64_V11
= 75,
552 UNW_AARCH64_V12
= 76,
553 UNW_AARCH64_V13
= 77,
554 UNW_AARCH64_V14
= 78,
555 UNW_AARCH64_V15
= 79,
556 UNW_AARCH64_V16
= 80,
557 UNW_AARCH64_V17
= 81,
558 UNW_AARCH64_V18
= 82,
559 UNW_AARCH64_V19
= 83,
560 UNW_AARCH64_V20
= 84,
561 UNW_AARCH64_V21
= 85,
562 UNW_AARCH64_V22
= 86,
563 UNW_AARCH64_V23
= 87,
564 UNW_AARCH64_V24
= 88,
565 UNW_AARCH64_V25
= 89,
566 UNW_AARCH64_V26
= 90,
567 UNW_AARCH64_V27
= 91,
568 UNW_AARCH64_V28
= 92,
569 UNW_AARCH64_V29
= 93,
570 UNW_AARCH64_V30
= 94,
571 UNW_AARCH64_V31
= 95,
573 // Compatibility aliases
574 UNW_ARM64_X0
= UNW_AARCH64_X0
,
575 UNW_ARM64_X1
= UNW_AARCH64_X1
,
576 UNW_ARM64_X2
= UNW_AARCH64_X2
,
577 UNW_ARM64_X3
= UNW_AARCH64_X3
,
578 UNW_ARM64_X4
= UNW_AARCH64_X4
,
579 UNW_ARM64_X5
= UNW_AARCH64_X5
,
580 UNW_ARM64_X6
= UNW_AARCH64_X6
,
581 UNW_ARM64_X7
= UNW_AARCH64_X7
,
582 UNW_ARM64_X8
= UNW_AARCH64_X8
,
583 UNW_ARM64_X9
= UNW_AARCH64_X9
,
584 UNW_ARM64_X10
= UNW_AARCH64_X10
,
585 UNW_ARM64_X11
= UNW_AARCH64_X11
,
586 UNW_ARM64_X12
= UNW_AARCH64_X12
,
587 UNW_ARM64_X13
= UNW_AARCH64_X13
,
588 UNW_ARM64_X14
= UNW_AARCH64_X14
,
589 UNW_ARM64_X15
= UNW_AARCH64_X15
,
590 UNW_ARM64_X16
= UNW_AARCH64_X16
,
591 UNW_ARM64_X17
= UNW_AARCH64_X17
,
592 UNW_ARM64_X18
= UNW_AARCH64_X18
,
593 UNW_ARM64_X19
= UNW_AARCH64_X19
,
594 UNW_ARM64_X20
= UNW_AARCH64_X20
,
595 UNW_ARM64_X21
= UNW_AARCH64_X21
,
596 UNW_ARM64_X22
= UNW_AARCH64_X22
,
597 UNW_ARM64_X23
= UNW_AARCH64_X23
,
598 UNW_ARM64_X24
= UNW_AARCH64_X24
,
599 UNW_ARM64_X25
= UNW_AARCH64_X25
,
600 UNW_ARM64_X26
= UNW_AARCH64_X26
,
601 UNW_ARM64_X27
= UNW_AARCH64_X27
,
602 UNW_ARM64_X28
= UNW_AARCH64_X28
,
603 UNW_ARM64_X29
= UNW_AARCH64_X29
,
604 UNW_ARM64_FP
= UNW_AARCH64_FP
,
605 UNW_ARM64_X30
= UNW_AARCH64_X30
,
606 UNW_ARM64_LR
= UNW_AARCH64_LR
,
607 UNW_ARM64_X31
= UNW_AARCH64_X31
,
608 UNW_ARM64_SP
= UNW_AARCH64_SP
,
609 UNW_ARM64_PC
= UNW_AARCH64_PC
,
610 UNW_ARM64_RA_SIGN_STATE
= UNW_AARCH64_RA_SIGN_STATE
,
611 UNW_ARM64_D0
= UNW_AARCH64_V0
,
612 UNW_ARM64_D1
= UNW_AARCH64_V1
,
613 UNW_ARM64_D2
= UNW_AARCH64_V2
,
614 UNW_ARM64_D3
= UNW_AARCH64_V3
,
615 UNW_ARM64_D4
= UNW_AARCH64_V4
,
616 UNW_ARM64_D5
= UNW_AARCH64_V5
,
617 UNW_ARM64_D6
= UNW_AARCH64_V6
,
618 UNW_ARM64_D7
= UNW_AARCH64_V7
,
619 UNW_ARM64_D8
= UNW_AARCH64_V8
,
620 UNW_ARM64_D9
= UNW_AARCH64_V9
,
621 UNW_ARM64_D10
= UNW_AARCH64_V10
,
622 UNW_ARM64_D11
= UNW_AARCH64_V11
,
623 UNW_ARM64_D12
= UNW_AARCH64_V12
,
624 UNW_ARM64_D13
= UNW_AARCH64_V13
,
625 UNW_ARM64_D14
= UNW_AARCH64_V14
,
626 UNW_ARM64_D15
= UNW_AARCH64_V15
,
627 UNW_ARM64_D16
= UNW_AARCH64_V16
,
628 UNW_ARM64_D17
= UNW_AARCH64_V17
,
629 UNW_ARM64_D18
= UNW_AARCH64_V18
,
630 UNW_ARM64_D19
= UNW_AARCH64_V19
,
631 UNW_ARM64_D20
= UNW_AARCH64_V20
,
632 UNW_ARM64_D21
= UNW_AARCH64_V21
,
633 UNW_ARM64_D22
= UNW_AARCH64_V22
,
634 UNW_ARM64_D23
= UNW_AARCH64_V23
,
635 UNW_ARM64_D24
= UNW_AARCH64_V24
,
636 UNW_ARM64_D25
= UNW_AARCH64_V25
,
637 UNW_ARM64_D26
= UNW_AARCH64_V26
,
638 UNW_ARM64_D27
= UNW_AARCH64_V27
,
639 UNW_ARM64_D28
= UNW_AARCH64_V28
,
640 UNW_ARM64_D29
= UNW_AARCH64_V29
,
641 UNW_ARM64_D30
= UNW_AARCH64_V30
,
642 UNW_ARM64_D31
= UNW_AARCH64_V31
,
645 // 32-bit ARM registers. Numbers match DWARF for ARM spec #3.1 Table 1.
646 // Naming scheme uses recommendations given in Note 4 for VFP-v2 and VFP-v3.
647 // In this scheme, even though the 64-bit floating point registers D0-D31
648 // overlap physically with the 32-bit floating pointer registers S0-S31,
649 // they are given a non-overlapping range of register numbers.
651 // Commented out ranges are not preserved during unwinding.
666 UNW_ARM_SP
= 13, // Logical alias for UNW_REG_SP
670 UNW_ARM_IP
= 15, // Logical alias for UNW_REG_IP
672 // 16-63 -- OBSOLETE. Used in VFP1 to represent both S0-S31 and D0-D31.
705 // 96-103 -- OBSOLETE. F0-F7. Used by the FPA system. Superseded by VFP.
706 // 104-111 -- wCGR0-wCGR7, ACC0-ACC7 (Intel wireless MMX)
723 // 128-133 -- SPSR, SPSR_{FIQ|IRQ|ABT|UND|SVC}
724 // 134-142 -- Reserved
725 UNW_ARM_RA_AUTH_CODE
= 143,
726 // 144-150 -- R8_USR-R14_USR
727 // 151-157 -- R8_FIQ-R14_FIQ
728 // 158-159 -- R13_IRQ-R14_IRQ
729 // 160-161 -- R13_ABT-R14_ABT
730 // 162-163 -- R13_UND-R14_UND
731 // 164-165 -- R13_SVC-R14_SVC
732 // 166-191 -- Reserved
737 // 196-199 -- wC4-wC7 (Intel wireless MMX control)
738 // 200-255 -- Reserved
771 // 288-319 -- Reserved for VFP/Neon
772 // 320-8191 -- Reserved
773 // 8192-16383 -- Unspecified vendor co-processor register.
776 // OpenRISC1000 register numbers
879 // HI,LO have been dropped since r6, we keep them here.
880 // So, when we add DSP/MSA etc, we can use the same register indexes
881 // for r6 and pre-r6.
922 // Hexagon register numbers
960 // RISC-V registers. These match the DWARF register numbers defined by section
961 // 4 of the RISC-V ELF psABI specification, which can be found at:
963 // https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md
1029 // 65-95 -- Reserved for future standard extensions
1030 // 96-127 -- v0-v31 (Vector registers)
1031 // 128-3071 -- Reserved for future standard extensions
1032 // 3072-4095 -- Reserved for custom extensions
1033 // 4096-8191 -- CSRs
1035 // VLENB CSR number: 0xC22 -- defined by section 3 of v-spec:
1036 // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#3-vector-extension-programmers-model
1037 // VLENB DWARF number: 0x1000 + 0xC22
1038 UNW_RISCV_VLENB
= 0x1C22,
1041 // VE register numbers
1117 UNW_VE_V10
= 64 + 10,
1118 UNW_VE_V11
= 64 + 11,
1119 UNW_VE_V12
= 64 + 12,
1120 UNW_VE_V13
= 64 + 13,
1121 UNW_VE_V14
= 64 + 14,
1122 UNW_VE_V15
= 64 + 15,
1123 UNW_VE_V16
= 64 + 16,
1124 UNW_VE_V17
= 64 + 17,
1125 UNW_VE_V18
= 64 + 18,
1126 UNW_VE_V19
= 64 + 19,
1127 UNW_VE_V20
= 64 + 20,
1128 UNW_VE_V21
= 64 + 21,
1129 UNW_VE_V22
= 64 + 22,
1130 UNW_VE_V23
= 64 + 23,
1131 UNW_VE_V24
= 64 + 24,
1132 UNW_VE_V25
= 64 + 25,
1133 UNW_VE_V26
= 64 + 26,
1134 UNW_VE_V27
= 64 + 27,
1135 UNW_VE_V28
= 64 + 28,
1136 UNW_VE_V29
= 64 + 29,
1137 UNW_VE_V30
= 64 + 30,
1138 UNW_VE_V31
= 64 + 31,
1139 UNW_VE_V32
= 64 + 32,
1140 UNW_VE_V33
= 64 + 33,
1141 UNW_VE_V34
= 64 + 34,
1142 UNW_VE_V35
= 64 + 35,
1143 UNW_VE_V36
= 64 + 36,
1144 UNW_VE_V37
= 64 + 37,
1145 UNW_VE_V38
= 64 + 38,
1146 UNW_VE_V39
= 64 + 39,
1147 UNW_VE_V40
= 64 + 40,
1148 UNW_VE_V41
= 64 + 41,
1149 UNW_VE_V42
= 64 + 42,
1150 UNW_VE_V43
= 64 + 43,
1151 UNW_VE_V44
= 64 + 44,
1152 UNW_VE_V45
= 64 + 45,
1153 UNW_VE_V46
= 64 + 46,
1154 UNW_VE_V47
= 64 + 47,
1155 UNW_VE_V48
= 64 + 48,
1156 UNW_VE_V49
= 64 + 49,
1157 UNW_VE_V50
= 64 + 50,
1158 UNW_VE_V51
= 64 + 51,
1159 UNW_VE_V52
= 64 + 52,
1160 UNW_VE_V53
= 64 + 53,
1161 UNW_VE_V54
= 64 + 54,
1162 UNW_VE_V55
= 64 + 55,
1163 UNW_VE_V56
= 64 + 56,
1164 UNW_VE_V57
= 64 + 57,
1165 UNW_VE_V58
= 64 + 58,
1166 UNW_VE_V59
= 64 + 59,
1167 UNW_VE_V60
= 64 + 60,
1168 UNW_VE_V61
= 64 + 61,
1169 UNW_VE_V62
= 64 + 62,
1170 UNW_VE_V63
= 64 + 63,
1171 UNW_VE_VM0
= 128 + 0,
1172 UNW_VE_VM1
= 128 + 1,
1173 UNW_VE_VM2
= 128 + 2,
1174 UNW_VE_VM3
= 128 + 3,
1175 UNW_VE_VM4
= 128 + 4,
1176 UNW_VE_VM5
= 128 + 5,
1177 UNW_VE_VM6
= 128 + 6,
1178 UNW_VE_VM7
= 128 + 7,
1179 UNW_VE_VM8
= 128 + 8,
1180 UNW_VE_VM9
= 128 + 9,
1181 UNW_VE_VM10
= 128 + 10,
1182 UNW_VE_VM11
= 128 + 11,
1183 UNW_VE_VM12
= 128 + 12,
1184 UNW_VE_VM13
= 128 + 13,
1185 UNW_VE_VM14
= 128 + 14,
1186 UNW_VE_VM15
= 128 + 15, // = 143
1188 // Following registers don't have DWARF register numbers.
1193 // s390x register numbers
1227 // 32-47 Control Registers
1228 // 48-63 Access Registers
1229 UNW_S390X_PSWM
= 64,
1230 UNW_S390X_PSWA
= 65,
1232 // 68-83 Vector Registers %v16-%v31
1235 // LoongArch registers.
1237 UNW_LOONGARCH_R0
= 0,
1238 UNW_LOONGARCH_R1
= 1,
1239 UNW_LOONGARCH_R2
= 2,
1240 UNW_LOONGARCH_R3
= 3,
1241 UNW_LOONGARCH_R4
= 4,
1242 UNW_LOONGARCH_R5
= 5,
1243 UNW_LOONGARCH_R6
= 6,
1244 UNW_LOONGARCH_R7
= 7,
1245 UNW_LOONGARCH_R8
= 8,
1246 UNW_LOONGARCH_R9
= 9,
1247 UNW_LOONGARCH_R10
= 10,
1248 UNW_LOONGARCH_R11
= 11,
1249 UNW_LOONGARCH_R12
= 12,
1250 UNW_LOONGARCH_R13
= 13,
1251 UNW_LOONGARCH_R14
= 14,
1252 UNW_LOONGARCH_R15
= 15,
1253 UNW_LOONGARCH_R16
= 16,
1254 UNW_LOONGARCH_R17
= 17,
1255 UNW_LOONGARCH_R18
= 18,
1256 UNW_LOONGARCH_R19
= 19,
1257 UNW_LOONGARCH_R20
= 20,
1258 UNW_LOONGARCH_R21
= 21,
1259 UNW_LOONGARCH_R22
= 22,
1260 UNW_LOONGARCH_R23
= 23,
1261 UNW_LOONGARCH_R24
= 24,
1262 UNW_LOONGARCH_R25
= 25,
1263 UNW_LOONGARCH_R26
= 26,
1264 UNW_LOONGARCH_R27
= 27,
1265 UNW_LOONGARCH_R28
= 28,
1266 UNW_LOONGARCH_R29
= 29,
1267 UNW_LOONGARCH_R30
= 30,
1268 UNW_LOONGARCH_R31
= 31,
1269 UNW_LOONGARCH_F0
= 32,
1270 UNW_LOONGARCH_F1
= 33,
1271 UNW_LOONGARCH_F2
= 34,
1272 UNW_LOONGARCH_F3
= 35,
1273 UNW_LOONGARCH_F4
= 36,
1274 UNW_LOONGARCH_F5
= 37,
1275 UNW_LOONGARCH_F6
= 38,
1276 UNW_LOONGARCH_F7
= 39,
1277 UNW_LOONGARCH_F8
= 40,
1278 UNW_LOONGARCH_F9
= 41,
1279 UNW_LOONGARCH_F10
= 42,
1280 UNW_LOONGARCH_F11
= 43,
1281 UNW_LOONGARCH_F12
= 44,
1282 UNW_LOONGARCH_F13
= 45,
1283 UNW_LOONGARCH_F14
= 46,
1284 UNW_LOONGARCH_F15
= 47,
1285 UNW_LOONGARCH_F16
= 48,
1286 UNW_LOONGARCH_F17
= 49,
1287 UNW_LOONGARCH_F18
= 50,
1288 UNW_LOONGARCH_F19
= 51,
1289 UNW_LOONGARCH_F20
= 52,
1290 UNW_LOONGARCH_F21
= 53,
1291 UNW_LOONGARCH_F22
= 54,
1292 UNW_LOONGARCH_F23
= 55,
1293 UNW_LOONGARCH_F24
= 56,
1294 UNW_LOONGARCH_F25
= 57,
1295 UNW_LOONGARCH_F26
= 58,
1296 UNW_LOONGARCH_F27
= 59,
1297 UNW_LOONGARCH_F28
= 60,
1298 UNW_LOONGARCH_F29
= 61,
1299 UNW_LOONGARCH_F30
= 62,
1300 UNW_LOONGARCH_F31
= 63,