xref: /freebsd/contrib/llvm-project/libunwind/include/__libunwind_config.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===------------------------- __libunwind_config.h -----------------------===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #ifndef ____LIBUNWIND_CONFIG_H__
10*0b57cec5SDimitry Andric #define ____LIBUNWIND_CONFIG_H__
11*0b57cec5SDimitry Andric 
12*0b57cec5SDimitry Andric #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
13*0b57cec5SDimitry Andric     !defined(__ARM_DWARF_EH__)
14*0b57cec5SDimitry Andric #define _LIBUNWIND_ARM_EHABI
15*0b57cec5SDimitry Andric #endif
16*0b57cec5SDimitry Andric 
17*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86       8
18*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64    32
19*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC       112
20*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64     116
21*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64     95
22*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM       287
23*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K      32
24*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV     95
25*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS      65
26*0b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC     31
27*0b57cec5SDimitry Andric 
28*0b57cec5SDimitry Andric #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
29*0b57cec5SDimitry Andric # if defined(__i386__)
30*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_I386
31*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 8
32*0b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 15
33*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86
34*0b57cec5SDimitry Andric # elif defined(__x86_64__)
35*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_X86_64 1
36*0b57cec5SDimitry Andric #  if defined(_WIN64)
37*0b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 54
38*0b57cec5SDimitry Andric #    ifdef __SEH__
39*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 204
40*0b57cec5SDimitry Andric #    else
41*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 66
42*0b57cec5SDimitry Andric #    endif
43*0b57cec5SDimitry Andric #  else
44*0b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 21
45*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 33
46*0b57cec5SDimitry Andric #  endif
47*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64
48*0b57cec5SDimitry Andric # elif defined(__powerpc64__)
49*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC64 1
50*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 167
51*0b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 179
52*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
53*0b57cec5SDimitry Andric # elif defined(__ppc__)
54*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_PPC 1
55*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 117
56*0b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 124
57*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
58*0b57cec5SDimitry Andric # elif defined(__aarch64__)
59*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_AARCH64 1
60*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 66
61*0b57cec5SDimitry Andric #  if defined(__SEH__)
62*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 164
63*0b57cec5SDimitry Andric #  else
64*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 78
65*0b57cec5SDimitry Andric #  endif
66*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
67*0b57cec5SDimitry Andric # elif defined(__arm__)
68*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_ARM 1
69*0b57cec5SDimitry Andric #  if defined(__SEH__)
70*0b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
71*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 80
72*0b57cec5SDimitry Andric #  elif defined(__ARM_WMMX)
73*0b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 61
74*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 68
75*0b57cec5SDimitry Andric #  else
76*0b57cec5SDimitry Andric #    define _LIBUNWIND_CONTEXT_SIZE 42
77*0b57cec5SDimitry Andric #    define _LIBUNWIND_CURSOR_SIZE 49
78*0b57cec5SDimitry Andric #  endif
79*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM
80*0b57cec5SDimitry Andric # elif defined(__or1k__)
81*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_OR1K 1
82*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 16
83*0b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 24
84*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K
85*0b57cec5SDimitry Andric # elif defined(__riscv)
86*0b57cec5SDimitry Andric #  define _LIBUNWIND_TARGET_RISCV 1
87*0b57cec5SDimitry Andric #  define _LIBUNWIND_CONTEXT_SIZE 64
88*0b57cec5SDimitry Andric #  define _LIBUNWIND_CURSOR_SIZE 76
89*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV
90*0b57cec5SDimitry Andric #  define _LIBUNWIND_MAX_REGISTER 96
91*0b57cec5SDimitry Andric # elif defined(__mips__)
92*0b57cec5SDimitry Andric #  if defined(_ABIO32) && _MIPS_SIM == _ABIO32
93*0b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_O32 1
94*0b57cec5SDimitry Andric #    if defined(__mips_hard_float)
95*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 50
96*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 57
97*0b57cec5SDimitry Andric #    else
98*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 18
99*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 24
100*0b57cec5SDimitry Andric #    endif
101*0b57cec5SDimitry Andric #  elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
102*0b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
103*0b57cec5SDimitry Andric #    if defined(__mips_hard_float)
104*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
105*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 74
106*0b57cec5SDimitry Andric #    else
107*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
108*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 42
109*0b57cec5SDimitry Andric #    endif
110*0b57cec5SDimitry Andric #  elif defined(_ABI64) && _MIPS_SIM == _ABI64
111*0b57cec5SDimitry Andric #    define _LIBUNWIND_TARGET_MIPS_NEWABI 1
112*0b57cec5SDimitry Andric #    if defined(__mips_hard_float)
113*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 67
114*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 79
115*0b57cec5SDimitry Andric #    else
116*0b57cec5SDimitry Andric #      define _LIBUNWIND_CONTEXT_SIZE 35
117*0b57cec5SDimitry Andric #      define _LIBUNWIND_CURSOR_SIZE 47
118*0b57cec5SDimitry Andric #    endif
119*0b57cec5SDimitry Andric #  else
120*0b57cec5SDimitry Andric #    error "Unsupported MIPS ABI and/or environment"
121*0b57cec5SDimitry Andric #  endif
122*0b57cec5SDimitry Andric #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
123*0b57cec5SDimitry Andric # elif defined(__sparc__)
124*0b57cec5SDimitry Andric   #define _LIBUNWIND_TARGET_SPARC 1
125*0b57cec5SDimitry Andric   #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
126*0b57cec5SDimitry Andric   #define _LIBUNWIND_CONTEXT_SIZE 16
127*0b57cec5SDimitry Andric   #define _LIBUNWIND_CURSOR_SIZE 23
128*0b57cec5SDimitry Andric # else
129*0b57cec5SDimitry Andric #  error "Unsupported architecture."
130*0b57cec5SDimitry Andric # endif
131*0b57cec5SDimitry Andric #else // !_LIBUNWIND_IS_NATIVE_ONLY
132*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_I386
133*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_X86_64 1
134*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC 1
135*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC64 1
136*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_AARCH64 1
137*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_ARM 1
138*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_OR1K 1
139*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_O32 1
140*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
141*0b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_SPARC 1
142*0b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 167
143*0b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 179
144*0b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
145*0b57cec5SDimitry Andric #endif // _LIBUNWIND_IS_NATIVE_ONLY
146*0b57cec5SDimitry Andric 
147*0b57cec5SDimitry Andric #endif // ____LIBUNWIND_CONFIG_H__
148