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