xref: /llvm-project/libunwind/include/__libunwind_config.h (revision eb1f9cced9e878362aeac18e120895995f759ee3)
1 //===----------------------------------------------------------------------===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef ____LIBUNWIND_CONFIG_H__
10 #define ____LIBUNWIND_CONFIG_H__
11 
12 #define _LIBUNWIND_VERSION 15000
13 
14 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
15     !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
16 #define _LIBUNWIND_ARM_EHABI
17 #endif
18 
19 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86       8
20 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64    32
21 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC       112
22 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64     116
23 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64     95
24 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM       287
25 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K      32
26 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS      65
27 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC     31
28 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64   31
29 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON   34
30 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV     64
31 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE        143
32 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X     83
33 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH 64
34 
35 #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
36 # if defined(__linux__)
37 #  define _LIBUNWIND_TARGET_LINUX 1
38 # endif
39 # if defined(__HAIKU__)
40 #  define _LIBUNWIND_TARGET_HAIKU 1
41 # endif
42 # if defined(__i386__)
43 #  define _LIBUNWIND_TARGET_I386
44 #  define _LIBUNWIND_CONTEXT_SIZE 8
45 #  define _LIBUNWIND_CURSOR_SIZE 15
46 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86
47 # elif defined(__x86_64__)
48 #  define _LIBUNWIND_TARGET_X86_64 1
49 #  if defined(_WIN64)
50 #    define _LIBUNWIND_CONTEXT_SIZE 54
51 #    ifdef __SEH__
52 #      define _LIBUNWIND_CURSOR_SIZE 204
53 #    else
54 #      define _LIBUNWIND_CURSOR_SIZE 66
55 #    endif
56 #  elif defined(__ILP32__)
57 #    define _LIBUNWIND_CONTEXT_SIZE 21
58 #    define _LIBUNWIND_CURSOR_SIZE 28
59 #  else
60 #    define _LIBUNWIND_CONTEXT_SIZE 21
61 #    define _LIBUNWIND_CURSOR_SIZE 33
62 #  endif
63 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64
64 # elif defined(__powerpc64__)
65 #  define _LIBUNWIND_TARGET_PPC64 1
66 #  define _LIBUNWIND_CONTEXT_SIZE 167
67 #  define _LIBUNWIND_CURSOR_SIZE 179
68 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
69 # elif defined(__powerpc__)
70 #  define _LIBUNWIND_TARGET_PPC 1
71 #  define _LIBUNWIND_CONTEXT_SIZE 117
72 #  define _LIBUNWIND_CURSOR_SIZE 124
73 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
74 # elif defined(__aarch64__)
75 #  define _LIBUNWIND_TARGET_AARCH64 1
76 #  define _LIBUNWIND_CONTEXT_SIZE 66
77 #  if defined(__SEH__)
78 #    define _LIBUNWIND_CURSOR_SIZE 164
79 #  else
80 #    define _LIBUNWIND_CURSOR_SIZE 78
81 #  endif
82 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
83 # elif defined(__arm__)
84 #  define _LIBUNWIND_TARGET_ARM 1
85 #  if defined(__SEH__)
86 #    define _LIBUNWIND_CONTEXT_SIZE 42
87 #    define _LIBUNWIND_CURSOR_SIZE 80
88 #  elif defined(__ARM_WMMX)
89 #    define _LIBUNWIND_CONTEXT_SIZE 61
90 #    define _LIBUNWIND_CURSOR_SIZE 68
91 #  else
92 #    define _LIBUNWIND_CONTEXT_SIZE 42
93 #    define _LIBUNWIND_CURSOR_SIZE 49
94 #  endif
95 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM
96 # elif defined(__or1k__)
97 #  define _LIBUNWIND_TARGET_OR1K 1
98 #  define _LIBUNWIND_CONTEXT_SIZE 16
99 #  define _LIBUNWIND_CURSOR_SIZE 24
100 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K
101 # elif defined(__hexagon__)
102 #  define _LIBUNWIND_TARGET_HEXAGON 1
103 // Values here change when : Registers.hpp - hexagon_thread_state_t change
104 #  define _LIBUNWIND_CONTEXT_SIZE 18
105 #  define _LIBUNWIND_CURSOR_SIZE 24
106 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON
107 # elif defined(__mips__)
108 #  if defined(_ABIO32) && _MIPS_SIM == _ABIO32
109 #    define _LIBUNWIND_TARGET_MIPS_O32 1
110 #    if defined(__mips_hard_float)
111 #      define _LIBUNWIND_CONTEXT_SIZE 50
112 #      define _LIBUNWIND_CURSOR_SIZE 57
113 #    else
114 #      define _LIBUNWIND_CONTEXT_SIZE 18
115 #      define _LIBUNWIND_CURSOR_SIZE 24
116 #    endif
117 #  elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
118 #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
119 #    if defined(__mips_hard_float)
120 #      define _LIBUNWIND_CONTEXT_SIZE 67
121 #      define _LIBUNWIND_CURSOR_SIZE 74
122 #    else
123 #      define _LIBUNWIND_CONTEXT_SIZE 35
124 #      define _LIBUNWIND_CURSOR_SIZE 42
125 #    endif
126 #  elif defined(_ABI64) && _MIPS_SIM == _ABI64
127 #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
128 #    if defined(__mips_hard_float)
129 #      define _LIBUNWIND_CONTEXT_SIZE 67
130 #      define _LIBUNWIND_CURSOR_SIZE 79
131 #    else
132 #      define _LIBUNWIND_CONTEXT_SIZE 35
133 #      define _LIBUNWIND_CURSOR_SIZE 47
134 #    endif
135 #  else
136 #    error "Unsupported MIPS ABI and/or environment"
137 #  endif
138 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
139 #elif defined(__sparc__) && defined(__arch64__)
140 #define _LIBUNWIND_TARGET_SPARC64 1
141 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER                                      \
142   _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64
143 #define _LIBUNWIND_CONTEXT_SIZE 33
144 #define _LIBUNWIND_CURSOR_SIZE 45
145 # elif defined(__sparc__)
146   #define _LIBUNWIND_TARGET_SPARC 1
147   #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
148   #define _LIBUNWIND_CONTEXT_SIZE 16
149   #define _LIBUNWIND_CURSOR_SIZE 23
150 # elif defined(__riscv)
151 #  define _LIBUNWIND_TARGET_RISCV 1
152 #  if defined(__riscv_flen)
153 #   define RISCV_FLEN __riscv_flen
154 #  else
155 #   define RISCV_FLEN 0
156 #  endif
157 #  define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + RISCV_FLEN) / 64)
158 #  if __riscv_xlen == 32
159 #   define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 7)
160 #  elif __riscv_xlen == 64
161 #   define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 12)
162 #  else
163 #   error "Unsupported RISC-V ABI"
164 #  endif
165 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV
166 # elif defined(__ve__)
167 #  define _LIBUNWIND_TARGET_VE 1
168 #  define _LIBUNWIND_CONTEXT_SIZE 67
169 #  define _LIBUNWIND_CURSOR_SIZE 79
170 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE
171 # elif defined(__s390x__)
172 #  define _LIBUNWIND_TARGET_S390X 1
173 #  define _LIBUNWIND_CONTEXT_SIZE 34
174 #  define _LIBUNWIND_CURSOR_SIZE 46
175 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X
176 #elif defined(__loongarch__)
177 #define _LIBUNWIND_TARGET_LOONGARCH 1
178 #if __loongarch_grlen == 64
179 #define _LIBUNWIND_CONTEXT_SIZE 65
180 #define _LIBUNWIND_CURSOR_SIZE 77
181 #else
182 #error "Unsupported LoongArch ABI"
183 #endif
184 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER                                      \
185   _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH
186 #elif defined(__wasm__)
187 // Unused
188 #define _LIBUNWIND_CONTEXT_SIZE 0
189 #define _LIBUNWIND_CURSOR_SIZE 0
190 # else
191 #  error "Unsupported architecture."
192 # endif
193 #else // !_LIBUNWIND_IS_NATIVE_ONLY
194 # define _LIBUNWIND_TARGET_I386
195 # define _LIBUNWIND_TARGET_X86_64 1
196 # define _LIBUNWIND_TARGET_PPC 1
197 # define _LIBUNWIND_TARGET_PPC64 1
198 # define _LIBUNWIND_TARGET_AARCH64 1
199 # define _LIBUNWIND_TARGET_ARM 1
200 # define _LIBUNWIND_TARGET_OR1K 1
201 # define _LIBUNWIND_TARGET_MIPS_O32 1
202 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
203 # define _LIBUNWIND_TARGET_SPARC 1
204 # define _LIBUNWIND_TARGET_SPARC64 1
205 # define _LIBUNWIND_TARGET_HEXAGON 1
206 # define _LIBUNWIND_TARGET_RISCV 1
207 # define _LIBUNWIND_TARGET_VE 1
208 # define _LIBUNWIND_TARGET_S390X 1
209 # define _LIBUNWIND_TARGET_LOONGARCH 1
210 # define _LIBUNWIND_CONTEXT_SIZE 167
211 # define _LIBUNWIND_CURSOR_SIZE 204
212 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
213 #endif // _LIBUNWIND_IS_NATIVE_ONLY
214 
215 #endif // ____LIBUNWIND_CONFIG_H__
216