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