1349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #ifndef ____LIBUNWIND_CONFIG_H__ 100b57cec5SDimitry Andric #define ____LIBUNWIND_CONFIG_H__ 110b57cec5SDimitry Andric 1281ad6265SDimitry Andric #define _LIBUNWIND_VERSION 15000 1381ad6265SDimitry Andric 140b57cec5SDimitry Andric #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ 1581ad6265SDimitry Andric !defined(__ARM_DWARF_EH__) && !defined(__SEH__) 160b57cec5SDimitry Andric #define _LIBUNWIND_ARM_EHABI 170b57cec5SDimitry Andric #endif 180b57cec5SDimitry Andric 190b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 8 200b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 32 210b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 112 220b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 116 230b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 95 240b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 287 250b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 32 260b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS 65 270b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC 31 28d56accc7SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64 31 295ffd83dbSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON 34 30480093f4SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV 64 31e8d8bef9SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE 143 3281ad6265SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X 83 33bdd1243dSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH 64 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric #if defined(_LIBUNWIND_IS_NATIVE_ONLY) 36e8d8bef9SDimitry Andric # if defined(__linux__) 37e8d8bef9SDimitry Andric # define _LIBUNWIND_TARGET_LINUX 1 38e8d8bef9SDimitry Andric # endif 395f757f3fSDimitry Andric # if defined(__HAIKU__) 405f757f3fSDimitry Andric # define _LIBUNWIND_TARGET_HAIKU 1 415f757f3fSDimitry Andric # endif 420b57cec5SDimitry Andric # if defined(__i386__) 430b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_I386 440b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 8 450b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 15 460b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 470b57cec5SDimitry Andric # elif defined(__x86_64__) 480b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_X86_64 1 490b57cec5SDimitry Andric # if defined(_WIN64) 500b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 54 510b57cec5SDimitry Andric # ifdef __SEH__ 520b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 204 530b57cec5SDimitry Andric # else 540b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 66 550b57cec5SDimitry Andric # endif 560b57cec5SDimitry Andric # else 570b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 21 580b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 33 590b57cec5SDimitry Andric # endif 600b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 610b57cec5SDimitry Andric # elif defined(__powerpc64__) 620b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC64 1 630b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 167 640b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 179 650b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 661fd87a68SDimitry Andric # elif defined(__powerpc__) 670b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC 1 680b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 117 690b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 124 700b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 710b57cec5SDimitry Andric # elif defined(__aarch64__) 720b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_AARCH64 1 730b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 66 740b57cec5SDimitry Andric # if defined(__SEH__) 750b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 164 760b57cec5SDimitry Andric # else 770b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 78 780b57cec5SDimitry Andric # endif 790b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 800b57cec5SDimitry Andric # elif defined(__arm__) 810b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_ARM 1 820b57cec5SDimitry Andric # if defined(__SEH__) 830b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 42 840b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 80 850b57cec5SDimitry Andric # elif defined(__ARM_WMMX) 860b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 61 870b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 68 880b57cec5SDimitry Andric # else 890b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 42 900b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 49 910b57cec5SDimitry Andric # endif 920b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 930b57cec5SDimitry Andric # elif defined(__or1k__) 940b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_OR1K 1 950b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 16 960b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 24 970b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 985ffd83dbSDimitry Andric # elif defined(__hexagon__) 995ffd83dbSDimitry Andric # define _LIBUNWIND_TARGET_HEXAGON 1 1005ffd83dbSDimitry Andric // Values here change when : Registers.hpp - hexagon_thread_state_t change 1015ffd83dbSDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 18 1025ffd83dbSDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 24 1035ffd83dbSDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_HEXAGON 1040b57cec5SDimitry Andric # elif defined(__mips__) 1050b57cec5SDimitry Andric # if defined(_ABIO32) && _MIPS_SIM == _ABIO32 1060b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_O32 1 1070b57cec5SDimitry Andric # if defined(__mips_hard_float) 1080b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 50 1090b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 57 1100b57cec5SDimitry Andric # else 1110b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 18 1120b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 24 1130b57cec5SDimitry Andric # endif 1140b57cec5SDimitry Andric # elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 1150b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 1160b57cec5SDimitry Andric # if defined(__mips_hard_float) 1170b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 67 1180b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 74 1190b57cec5SDimitry Andric # else 1200b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 35 1210b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 42 1220b57cec5SDimitry Andric # endif 1230b57cec5SDimitry Andric # elif defined(_ABI64) && _MIPS_SIM == _ABI64 1240b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 1250b57cec5SDimitry Andric # if defined(__mips_hard_float) 1260b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 67 1270b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 79 1280b57cec5SDimitry Andric # else 1290b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 35 1300b57cec5SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 47 1310b57cec5SDimitry Andric # endif 1320b57cec5SDimitry Andric # else 1330b57cec5SDimitry Andric # error "Unsupported MIPS ABI and/or environment" 1340b57cec5SDimitry Andric # endif 1350b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS 136d56accc7SDimitry Andric #elif defined(__sparc__) && defined(__arch64__) 137d56accc7SDimitry Andric #define _LIBUNWIND_TARGET_SPARC64 1 138d56accc7SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER \ 139d56accc7SDimitry Andric _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC64 140d56accc7SDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 33 141d56accc7SDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 45 1420b57cec5SDimitry Andric # elif defined(__sparc__) 1430b57cec5SDimitry Andric #define _LIBUNWIND_TARGET_SPARC 1 1440b57cec5SDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC 1450b57cec5SDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 16 1468e4aef42SEd Maste #define _LIBUNWIND_CURSOR_SIZE 23 147480093f4SDimitry Andric # elif defined(__riscv) 148480093f4SDimitry Andric # define _LIBUNWIND_TARGET_RISCV 1 149fe6060f1SDimitry Andric # if defined(__riscv_flen) 150fe6060f1SDimitry Andric # define RISCV_FLEN __riscv_flen 151fe6060f1SDimitry Andric # else 152fe6060f1SDimitry Andric # define RISCV_FLEN 0 153fe6060f1SDimitry Andric # endif 154fe6060f1SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + RISCV_FLEN) / 64) 155fe6060f1SDimitry Andric # if __riscv_xlen == 32 156fe6060f1SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 7) 157fe6060f1SDimitry Andric # elif __riscv_xlen == 64 158fe6060f1SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE (_LIBUNWIND_CONTEXT_SIZE + 12) 159480093f4SDimitry Andric # else 160480093f4SDimitry Andric # error "Unsupported RISC-V ABI" 161480093f4SDimitry Andric # endif 162480093f4SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV 163e8d8bef9SDimitry Andric # elif defined(__ve__) 164e8d8bef9SDimitry Andric # define _LIBUNWIND_TARGET_VE 1 165e8d8bef9SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 67 166e8d8bef9SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 79 167e8d8bef9SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_VE 16881ad6265SDimitry Andric # elif defined(__s390x__) 16981ad6265SDimitry Andric # define _LIBUNWIND_TARGET_S390X 1 17081ad6265SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 34 17181ad6265SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 46 17281ad6265SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_S390X 173bdd1243dSDimitry Andric #elif defined(__loongarch__) 174bdd1243dSDimitry Andric #define _LIBUNWIND_TARGET_LOONGARCH 1 175bdd1243dSDimitry Andric #if __loongarch_grlen == 64 176bdd1243dSDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 65 177bdd1243dSDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 77 178bdd1243dSDimitry Andric #else 179bdd1243dSDimitry Andric #error "Unsupported LoongArch ABI" 180bdd1243dSDimitry Andric #endif 181bdd1243dSDimitry Andric #define _LIBUNWIND_HIGHEST_DWARF_REGISTER \ 182bdd1243dSDimitry Andric _LIBUNWIND_HIGHEST_DWARF_REGISTER_LOONGARCH 183*0fca6ea1SDimitry Andric #elif defined(__wasm__) 184*0fca6ea1SDimitry Andric // Unused 185*0fca6ea1SDimitry Andric #define _LIBUNWIND_CONTEXT_SIZE 0 186*0fca6ea1SDimitry Andric #define _LIBUNWIND_CURSOR_SIZE 0 1870b57cec5SDimitry Andric # else 1880b57cec5SDimitry Andric # error "Unsupported architecture." 1890b57cec5SDimitry Andric # endif 1900b57cec5SDimitry Andric #else // !_LIBUNWIND_IS_NATIVE_ONLY 1910b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_I386 1920b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_X86_64 1 1930b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC 1 1940b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_PPC64 1 1950b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_AARCH64 1 1960b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_ARM 1 1970b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_OR1K 1 1980b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_O32 1 1990b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 2000b57cec5SDimitry Andric # define _LIBUNWIND_TARGET_SPARC 1 201d56accc7SDimitry Andric # define _LIBUNWIND_TARGET_SPARC64 1 2025ffd83dbSDimitry Andric # define _LIBUNWIND_TARGET_HEXAGON 1 203480093f4SDimitry Andric # define _LIBUNWIND_TARGET_RISCV 1 204e8d8bef9SDimitry Andric # define _LIBUNWIND_TARGET_VE 1 20581ad6265SDimitry Andric # define _LIBUNWIND_TARGET_S390X 1 206bdd1243dSDimitry Andric # define _LIBUNWIND_TARGET_LOONGARCH 1 2070b57cec5SDimitry Andric # define _LIBUNWIND_CONTEXT_SIZE 167 20806c3fb27SDimitry Andric # define _LIBUNWIND_CURSOR_SIZE 204 2090b57cec5SDimitry Andric # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287 2100b57cec5SDimitry Andric #endif // _LIBUNWIND_IS_NATIVE_ONLY 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andric #endif // ____LIBUNWIND_CONFIG_H__ 213