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
7 //===----------------------------------------------------------------------===//
9 #ifndef ____LIBUNWIND_CONFIG_H__
10 #define ____LIBUNWIND_CONFIG_H__
12 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
13 !defined(__ARM_DWARF_EH__)
14 #define _LIBUNWIND_ARM_EHABI
17 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 8
18 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 32
19 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 112
20 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 116
21 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 95
22 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 287
23 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 32
24 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS 65
25 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC 31
26 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64 31
27 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON 34
28 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV 64
29 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE 143
31 #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
32 # if defined(__linux__)
33 # define _LIBUNWIND_TARGET_LINUX 1
35 # if defined(__i386__)
36 # define _LIBUNWIND_TARGET_I386
37 # define _LIBUNWIND_CONTEXT_SIZE 8
38 # define _LIBUNWIND_CURSOR_SIZE 15
39 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86
40 # elif defined(__x86_64__)
41 # define _LIBUNWIND_TARGET_X86_64 1
43 # define _LIBUNWIND_CONTEXT_SIZE 54
45 # define _LIBUNWIND_CURSOR_SIZE 204
47 # define _LIBUNWIND_CURSOR_SIZE 66
50 # define _LIBUNWIND_CONTEXT_SIZE 21
51 # define _LIBUNWIND_CURSOR_SIZE 33
53 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64
54 # elif defined(__powerpc64__)
55 # define _LIBUNWIND_TARGET_PPC64 1
56 # define _LIBUNWIND_CONTEXT_SIZE 167
57 # define _LIBUNWIND_CURSOR_SIZE 179
58 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
59 # elif defined(__powerpc__)
60 # define _LIBUNWIND_TARGET_PPC 1
61 # define _LIBUNWIND_CONTEXT_SIZE 117
62 # define _LIBUNWIND_CURSOR_SIZE 124
63 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
64 # elif defined(__aarch64__)
65 # define _LIBUNWIND_TARGET_AARCH64 1
66 # define _LIBUNWIND_CONTEXT_SIZE 66
68 # define _LIBUNWIND_CURSOR_SIZE 164
70 # define _LIBUNWIND_CURSOR_SIZE 78
72 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
73 # elif defined(__arm__)
74 # define _LIBUNWIND_TARGET_ARM 1
76 # define _LIBUNWIND_CONTEXT_SIZE 42
77 # define _LIBUNWIND_CURSOR_SIZE 80
78 # elif defined(__ARM_WMMX)
79 # define _LIBUNWIND_CONTEXT_SIZE 61
80 # define _LIBUNWIND_CURSOR_SIZE 68
82 # define _LIBUNWIND_CONTEXT_SIZE 42
83 # define _LIBUNWIND_CURSOR_SIZE 49
85 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM
86 # elif defined(__or1k__)
87 # define _LIBUNWIND_TARGET_OR1K 1
88 # define _LIBUNWIND_CONTEXT_SIZE 16
89 # define _LIBUNWIND_CURSOR_SIZE 24
90 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K
91 # elif defined(__hexagon__)
92 # define _LIBUNWIND_TARGET_HEXAGON 1
93 // Values here change when : Registers.hpp - hexagon_thread_state_t change
94 # define _LIBUNWIND_CONTEXT_SIZE 18
95 # define _LIBUNWIND_CURSOR_SIZE 24
96 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON
97 # elif defined(__mips__)
98 # if defined(_ABIO32) && _MIPS_SIM == _ABIO32
99 # define _LIBUNWIND_TARGET_MIPS_O32 1
100 # if defined(__mips_hard_float)
101 # define _LIBUNWIND_CONTEXT_SIZE 50
102 # define _LIBUNWIND_CURSOR_SIZE 57
104 # define _LIBUNWIND_CONTEXT_SIZE 18
105 # define _LIBUNWIND_CURSOR_SIZE 24
107 # elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
108 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
109 # if defined(__mips_hard_float)
110 # define _LIBUNWIND_CONTEXT_SIZE 67
111 # define _LIBUNWIND_CURSOR_SIZE 74
113 # define _LIBUNWIND_CONTEXT_SIZE 35
114 # define _LIBUNWIND_CURSOR_SIZE 42
116 # elif defined(_ABI64) && _MIPS_SIM == _ABI64
117 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
118 # if defined(__mips_hard_float)
119 # define _LIBUNWIND_CONTEXT_SIZE 67
120 # define _LIBUNWIND_CURSOR_SIZE 79
122 # define _LIBUNWIND_CONTEXT_SIZE 35
123 # define _LIBUNWIND_CURSOR_SIZE 47
126 # error "Unsupported MIPS ABI and/or environment"
128 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
129 #elif defined(__sparc__) && defined(__arch64__)
130 #define _LIBUNWIND_TARGET_SPARC64 1
131 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER \
132 _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64
133 #define _LIBUNWIND_CONTEXT_SIZE 33
134 #define _LIBUNWIND_CURSOR_SIZE 45
135 # elif defined(__sparc__)
136 #define _LIBUNWIND_TARGET_SPARC 1
137 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
138 #define _LIBUNWIND_CONTEXT_SIZE 16
139 #define _LIBUNWIND_CURSOR_SIZE 23
140 # elif defined(__riscv)
141 # define _LIBUNWIND_TARGET_RISCV 1
142 # if defined(__riscv_flen)
143 # define RISCV_FLEN __riscv_flen
145 # define RISCV_FLEN 0
147 # define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + RISCV_FLEN) / 64)
148 # if __riscv_xlen == 32
149 # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 7)
150 # elif __riscv_xlen == 64
151 # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 12)
153 # error "Unsupported RISC-V ABI"
155 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV
156 # elif defined(__ve__)
157 # define _LIBUNWIND_TARGET_VE 1
158 # define _LIBUNWIND_CONTEXT_SIZE 67
159 # define _LIBUNWIND_CURSOR_SIZE 79
160 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE
162 # error "Unsupported architecture."
164 #else // !_LIBUNWIND_IS_NATIVE_ONLY
165 # define _LIBUNWIND_TARGET_I386
166 # define _LIBUNWIND_TARGET_X86_64 1
167 # define _LIBUNWIND_TARGET_PPC 1
168 # define _LIBUNWIND_TARGET_PPC64 1
169 # define _LIBUNWIND_TARGET_AARCH64 1
170 # define _LIBUNWIND_TARGET_ARM 1
171 # define _LIBUNWIND_TARGET_OR1K 1
172 # define _LIBUNWIND_TARGET_MIPS_O32 1
173 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
174 # define _LIBUNWIND_TARGET_SPARC 1
175 # define _LIBUNWIND_TARGET_SPARC64 1
176 # define _LIBUNWIND_TARGET_HEXAGON 1
177 # define _LIBUNWIND_TARGET_RISCV 1
178 # define _LIBUNWIND_TARGET_VE 1
179 # define _LIBUNWIND_CONTEXT_SIZE 167
180 # define _LIBUNWIND_CURSOR_SIZE 179
181 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
182 #endif // _LIBUNWIND_IS_NATIVE_ONLY
184 #endif // ____LIBUNWIND_CONFIG_H__