xref: /freebsd/contrib/llvm-project/libunwind/include/__libunwind_config.h (revision e8d8bef961a50d4dc22501cde4fb9fb0be1b2532)
10b57cec5SDimitry Andric //===------------------------- __libunwind_config.h -----------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef ____LIBUNWIND_CONFIG_H__
100b57cec5SDimitry Andric #define ____LIBUNWIND_CONFIG_H__
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
130b57cec5SDimitry Andric     !defined(__ARM_DWARF_EH__)
140b57cec5SDimitry Andric #define _LIBUNWIND_ARM_EHABI
150b57cec5SDimitry Andric #endif
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86       8
180b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64    32
190b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC       112
200b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64     116
210b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64     95
220b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM       287
230b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K      32
240b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS      65
250b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC     31
265ffd83dbSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON   34
27480093f4SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV     64
28*e8d8bef9SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE        143
290b57cec5SDimitry Andric 
300b57cec5SDimitry Andric #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
31*e8d8bef9SDimitry Andric # if defined(__linux__)
32*e8d8bef9SDimitry Andric #  define _LIBUNWIND_TARGET_LINUX 1
33*e8d8bef9SDimitry Andric # endif
340b57cec5SDimitry Andric # if defined(__i386__)
350b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_I386
360b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 8
370b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 15
380b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86
390b57cec5SDimitry Andric # elif defined(__x86_64__)
400b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_X86_64 1
410b57cec5SDimitry Andric #  if defined(_WIN64)
420b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 54
430b57cec5SDimitry Andric #    ifdef __SEH__
440b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 204
450b57cec5SDimitry Andric #    else
460b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 66
470b57cec5SDimitry Andric #    endif
480b57cec5SDimitry Andric #  else
490b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 21
500b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 33
510b57cec5SDimitry Andric #  endif
520b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64
530b57cec5SDimitry Andric # elif defined(__powerpc64__)
540b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC64 1
550b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 167
560b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 179
570b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
580b57cec5SDimitry Andric # elif defined(__ppc__)
590b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC 1
600b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 117
610b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 124
620b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
630b57cec5SDimitry Andric # elif defined(__aarch64__)
640b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_AARCH64 1
650b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 66
660b57cec5SDimitry Andric #  if defined(__SEH__)
670b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 164
680b57cec5SDimitry Andric #  else
690b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 78
700b57cec5SDimitry Andric #  endif
710b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
720b57cec5SDimitry Andric # elif defined(__arm__)
730b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_ARM 1
740b57cec5SDimitry Andric #  if defined(__SEH__)
750b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
760b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 80
770b57cec5SDimitry Andric #  elif defined(__ARM_WMMX)
780b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 61
790b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 68
800b57cec5SDimitry Andric #  else
810b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
820b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 49
830b57cec5SDimitry Andric #  endif
840b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM
850b57cec5SDimitry Andric # elif defined(__or1k__)
860b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_OR1K 1
870b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 16
880b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 24
890b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K
905ffd83dbSDimitry Andric # elif defined(__hexagon__)
915ffd83dbSDimitry Andric #  define _LIBUNWIND_TARGET_HEXAGON 1
925ffd83dbSDimitry Andric // Values here change when : Registers.hpp - hexagon_thread_state_t change
935ffd83dbSDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 18
945ffd83dbSDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 24
955ffd83dbSDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON
960b57cec5SDimitry Andric # elif defined(__mips__)
970b57cec5SDimitry Andric #  if defined(_ABIO32) && _MIPS_SIM == _ABIO32
980b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_O32 1
990b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1000b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 50
1010b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 57
1020b57cec5SDimitry Andric #    else
1030b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 18
1040b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 24
1050b57cec5SDimitry Andric #    endif
1060b57cec5SDimitry Andric #  elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
1070b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
1080b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1090b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
1100b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 74
1110b57cec5SDimitry Andric #    else
1120b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
1130b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 42
1140b57cec5SDimitry Andric #    endif
1150b57cec5SDimitry Andric #  elif defined(_ABI64) && _MIPS_SIM == _ABI64
1160b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
1170b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1180b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
1190b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 79
1200b57cec5SDimitry Andric #    else
1210b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
1220b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 47
1230b57cec5SDimitry Andric #    endif
1240b57cec5SDimitry Andric #  else
1250b57cec5SDimitry Andric #    error "Unsupported MIPS ABI and/or environment"
1260b57cec5SDimitry Andric #  endif
1270b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
1280b57cec5SDimitry Andric # elif defined(__sparc__)
1290b57cec5SDimitry Andric   #define _LIBUNWIND_TARGET_SPARC 1
1300b57cec5SDimitry Andric   #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
1310b57cec5SDimitry Andric   #define _LIBUNWIND_CONTEXT_SIZE 16
1328e4aef42SEd Maste   #define _LIBUNWIND_CURSOR_SIZE 23
133480093f4SDimitry Andric # elif defined(__riscv)
134480093f4SDimitry Andric #  if __riscv_xlen == 64
135480093f4SDimitry Andric #    define _LIBUNWIND_TARGET_RISCV 1
136480093f4SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 64
137480093f4SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 76
138480093f4SDimitry Andric #  else
139480093f4SDimitry Andric #    error "Unsupported RISC-V ABI"
140480093f4SDimitry Andric #  endif
141480093f4SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV
142*e8d8bef9SDimitry Andric # elif defined(__ve__)
143*e8d8bef9SDimitry Andric #  define _LIBUNWIND_TARGET_VE 1
144*e8d8bef9SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 67
145*e8d8bef9SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 79
146*e8d8bef9SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE
1470b57cec5SDimitry Andric # else
1480b57cec5SDimitry Andric #  error "Unsupported architecture."
1490b57cec5SDimitry Andric # endif
1500b57cec5SDimitry Andric #else // !_LIBUNWIND_IS_NATIVE_ONLY
1510b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_I386
1520b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_X86_64 1
1530b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC 1
1540b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC64 1
1550b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_AARCH64 1
1560b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_ARM 1
1570b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_OR1K 1
1580b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_O32 1
1590b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
1600b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_SPARC 1
1615ffd83dbSDimitry Andric # define _LIBUNWIND_TARGET_HEXAGON 1
162480093f4SDimitry Andric # define _LIBUNWIND_TARGET_RISCV 1
163*e8d8bef9SDimitry Andric # define _LIBUNWIND_TARGET_VE 1
1640b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 167
1650b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 179
1660b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
1670b57cec5SDimitry Andric #endif // _LIBUNWIND_IS_NATIVE_ONLY
1680b57cec5SDimitry Andric 
1690b57cec5SDimitry Andric #endif // ____LIBUNWIND_CONFIG_H__
170