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