xref: /freebsd/contrib/llvm-project/libunwind/include/__libunwind_config.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
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 
1281ad6265SDimitry Andric #define _LIBUNWIND_VERSION 15000
1381ad6265SDimitry Andric 
140b57cec5SDimitry Andric #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
1581ad6265SDimitry Andric     !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
160b57cec5SDimitry Andric #define _LIBUNWIND_ARM_EHABI
170b57cec5SDimitry Andric #endif
180b57cec5SDimitry Andric 
190b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86       8
200b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64    32
210b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC       112
220b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64     116
230b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64     95
240b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM       287
250b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K      32
260b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS      65
270b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC     31
28d56accc7SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64   31
295ffd83dbSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON   34
30480093f4SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV     64
31e8d8bef9SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE        143
3281ad6265SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X     83
33bdd1243dSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH 64
340b57cec5SDimitry Andric 
350b57cec5SDimitry Andric #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
36e8d8bef9SDimitry Andric # if defined(__linux__)
37e8d8bef9SDimitry Andric #  define _LIBUNWIND_TARGET_LINUX 1
38e8d8bef9SDimitry Andric # endif
395f757f3fSDimitry Andric # if defined(__HAIKU__)
405f757f3fSDimitry Andric #  define _LIBUNWIND_TARGET_HAIKU 1
415f757f3fSDimitry Andric # endif
420b57cec5SDimitry Andric # if defined(__i386__)
430b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_I386
440b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 8
450b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 15
460b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86
470b57cec5SDimitry Andric # elif defined(__x86_64__)
480b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_X86_64 1
490b57cec5SDimitry Andric #  if defined(_WIN64)
500b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 54
510b57cec5SDimitry Andric #    ifdef __SEH__
520b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 204
530b57cec5SDimitry Andric #    else
540b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 66
550b57cec5SDimitry Andric #    endif
560b57cec5SDimitry Andric #  else
570b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 21
580b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 33
590b57cec5SDimitry Andric #  endif
600b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64
610b57cec5SDimitry Andric # elif defined(__powerpc64__)
620b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC64 1
630b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 167
640b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 179
650b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
661fd87a68SDimitry Andric # elif defined(__powerpc__)
670b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC 1
680b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 117
690b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 124
700b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
710b57cec5SDimitry Andric # elif defined(__aarch64__)
720b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_AARCH64 1
730b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 66
740b57cec5SDimitry Andric #  if defined(__SEH__)
750b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 164
760b57cec5SDimitry Andric #  else
770b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 78
780b57cec5SDimitry Andric #  endif
790b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
800b57cec5SDimitry Andric # elif defined(__arm__)
810b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_ARM 1
820b57cec5SDimitry Andric #  if defined(__SEH__)
830b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
840b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 80
850b57cec5SDimitry Andric #  elif defined(__ARM_WMMX)
860b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 61
870b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 68
880b57cec5SDimitry Andric #  else
890b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
900b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 49
910b57cec5SDimitry Andric #  endif
920b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM
930b57cec5SDimitry Andric # elif defined(__or1k__)
940b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_OR1K 1
950b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 16
960b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 24
970b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K
985ffd83dbSDimitry Andric # elif defined(__hexagon__)
995ffd83dbSDimitry Andric #  define _LIBUNWIND_TARGET_HEXAGON 1
1005ffd83dbSDimitry Andric // Values here change when : Registers.hpp - hexagon_thread_state_t change
1015ffd83dbSDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 18
1025ffd83dbSDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 24
1035ffd83dbSDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON
1040b57cec5SDimitry Andric # elif defined(__mips__)
1050b57cec5SDimitry Andric #  if defined(_ABIO32) && _MIPS_SIM == _ABIO32
1060b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_O32 1
1070b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1080b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 50
1090b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 57
1100b57cec5SDimitry Andric #    else
1110b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 18
1120b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 24
1130b57cec5SDimitry Andric #    endif
1140b57cec5SDimitry Andric #  elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
1150b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
1160b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1170b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
1180b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 74
1190b57cec5SDimitry Andric #    else
1200b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
1210b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 42
1220b57cec5SDimitry Andric #    endif
1230b57cec5SDimitry Andric #  elif defined(_ABI64) && _MIPS_SIM == _ABI64
1240b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
1250b57cec5SDimitry Andric #    if defined(__mips_hard_float)
1260b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
1270b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 79
1280b57cec5SDimitry Andric #    else
1290b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
1300b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 47
1310b57cec5SDimitry Andric #    endif
1320b57cec5SDimitry Andric #  else
1330b57cec5SDimitry Andric #    error "Unsupported MIPS ABI and/or environment"
1340b57cec5SDimitry Andric #  endif
1350b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
136d56accc7SDimitry Andric #elif defined(__sparc__) && defined(__arch64__)
137d56accc7SDimitry Andric #define _LIBUNWIND_TARGET_SPARC64 1
138d56accc7SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER                                      \
139d56accc7SDimitry Andric   _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64
140d56accc7SDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 33
141d56accc7SDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 45
1420b57cec5SDimitry Andric # elif defined(__sparc__)
1430b57cec5SDimitry Andric   #define _LIBUNWIND_TARGET_SPARC 1
1440b57cec5SDimitry Andric   #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
1450b57cec5SDimitry Andric   #define _LIBUNWIND_CONTEXT_SIZE 16
1468e4aef42SEd Maste   #define _LIBUNWIND_CURSOR_SIZE 23
147480093f4SDimitry Andric # elif defined(__riscv)
148480093f4SDimitry Andric #  define _LIBUNWIND_TARGET_RISCV 1
149fe6060f1SDimitry Andric #  if defined(__riscv_flen)
150fe6060f1SDimitry Andric #   define RISCV_FLEN __riscv_flen
151fe6060f1SDimitry Andric #  else
152fe6060f1SDimitry Andric #   define RISCV_FLEN 0
153fe6060f1SDimitry Andric #  endif
154fe6060f1SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + RISCV_FLEN) / 64)
155fe6060f1SDimitry Andric #  if __riscv_xlen == 32
156fe6060f1SDimitry Andric #   define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 7)
157fe6060f1SDimitry Andric #  elif __riscv_xlen == 64
158fe6060f1SDimitry Andric #   define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 12)
159480093f4SDimitry Andric #  else
160480093f4SDimitry Andric #   error "Unsupported RISC-V ABI"
161480093f4SDimitry Andric #  endif
162480093f4SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV
163e8d8bef9SDimitry Andric # elif defined(__ve__)
164e8d8bef9SDimitry Andric #  define _LIBUNWIND_TARGET_VE 1
165e8d8bef9SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 67
166e8d8bef9SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 79
167e8d8bef9SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE
16881ad6265SDimitry Andric # elif defined(__s390x__)
16981ad6265SDimitry Andric #  define _LIBUNWIND_TARGET_S390X 1
17081ad6265SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 34
17181ad6265SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 46
17281ad6265SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X
173bdd1243dSDimitry Andric #elif defined(__loongarch__)
174bdd1243dSDimitry Andric #define _LIBUNWIND_TARGET_LOONGARCH 1
175bdd1243dSDimitry Andric #if __loongarch_grlen == 64
176bdd1243dSDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 65
177bdd1243dSDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 77
178bdd1243dSDimitry Andric #else
179bdd1243dSDimitry Andric #error "Unsupported LoongArch ABI"
180bdd1243dSDimitry Andric #endif
181bdd1243dSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER                                      \
182bdd1243dSDimitry Andric   _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH
183*0fca6ea1SDimitry Andric #elif defined(__wasm__)
184*0fca6ea1SDimitry Andric // Unused
185*0fca6ea1SDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 0
186*0fca6ea1SDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 0
1870b57cec5SDimitry Andric # else
1880b57cec5SDimitry Andric #  error "Unsupported architecture."
1890b57cec5SDimitry Andric # endif
1900b57cec5SDimitry Andric #else // !_LIBUNWIND_IS_NATIVE_ONLY
1910b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_I386
1920b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_X86_64 1
1930b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC 1
1940b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC64 1
1950b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_AARCH64 1
1960b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_ARM 1
1970b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_OR1K 1
1980b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_O32 1
1990b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
2000b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_SPARC 1
201d56accc7SDimitry Andric # define _LIBUNWIND_TARGET_SPARC64 1
2025ffd83dbSDimitry Andric # define _LIBUNWIND_TARGET_HEXAGON 1
203480093f4SDimitry Andric # define _LIBUNWIND_TARGET_RISCV 1
204e8d8bef9SDimitry Andric # define _LIBUNWIND_TARGET_VE 1
20581ad6265SDimitry Andric # define _LIBUNWIND_TARGET_S390X 1
206bdd1243dSDimitry Andric # define _LIBUNWIND_TARGET_LOONGARCH 1
2070b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 167
20806c3fb27SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 204
2090b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
2100b57cec5SDimitry Andric #endif // _LIBUNWIND_IS_NATIVE_ONLY
2110b57cec5SDimitry Andric 
2120b57cec5SDimitry Andric #endif // ____LIBUNWIND_CONFIG_H__
213