1 /* 2 * Copyright 2017 The Abseil Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 16 * Defines ABSL_STACKTRACE_INL_HEADER to the *-inl.h containing 17 * actual unwinder implementation. 18 * This header is "private" to stacktrace.cc. 19 * DO NOT include it into any other files. 20 */ 21 #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ 22 #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ 23 24 #include "absl/base/config.h" 25 26 #if defined(ABSL_STACKTRACE_INL_HEADER) 27 #error ABSL_STACKTRACE_INL_HEADER cannot be directly set 28 29 #elif defined(_WIN32) 30 #define ABSL_STACKTRACE_INL_HEADER \ 31 "absl/debugging/internal/stacktrace_win32-inl.inc" 32 33 #elif defined(__APPLE__) 34 #ifdef ABSL_HAVE_THREAD_LOCAL 35 // Thread local support required for UnwindImpl. 36 #define ABSL_STACKTRACE_INL_HEADER \ 37 "absl/debugging/internal/stacktrace_generic-inl.inc" 38 #endif // defined(ABSL_HAVE_THREAD_LOCAL) 39 40 #elif defined(__EMSCRIPTEN__) 41 #define ABSL_STACKTRACE_INL_HEADER \ 42 "absl/debugging/internal/stacktrace_emscripten-inl.inc" 43 44 #elif defined(__linux__) && !defined(__ANDROID__) 45 46 #if defined(NO_FRAME_POINTER) && \ 47 (defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)) 48 // Note: The libunwind-based implementation is not available to open-source 49 // users. 50 #define ABSL_STACKTRACE_INL_HEADER \ 51 "absl/debugging/internal/stacktrace_libunwind-inl.inc" 52 #define STACKTRACE_USES_LIBUNWIND 1 53 #elif defined(NO_FRAME_POINTER) && defined(__has_include) 54 #if __has_include(<execinfo.h>) 55 // Note: When using glibc this may require -funwind-tables to function properly. 56 #define ABSL_STACKTRACE_INL_HEADER \ 57 "absl/debugging/internal/stacktrace_generic-inl.inc" 58 #endif // __has_include(<execinfo.h>) 59 #elif defined(__i386__) || defined(__x86_64__) 60 #define ABSL_STACKTRACE_INL_HEADER \ 61 "absl/debugging/internal/stacktrace_x86-inl.inc" 62 #elif defined(__ppc__) || defined(__PPC__) 63 #define ABSL_STACKTRACE_INL_HEADER \ 64 "absl/debugging/internal/stacktrace_powerpc-inl.inc" 65 #elif defined(__aarch64__) 66 #define ABSL_STACKTRACE_INL_HEADER \ 67 "absl/debugging/internal/stacktrace_aarch64-inl.inc" 68 #elif defined(__riscv) 69 #define ABSL_STACKTRACE_INL_HEADER \ 70 "absl/debugging/internal/stacktrace_riscv-inl.inc" 71 #elif defined(__has_include) 72 #if __has_include(<execinfo.h>) 73 // Note: When using glibc this may require -funwind-tables to function properly. 74 #define ABSL_STACKTRACE_INL_HEADER \ 75 "absl/debugging/internal/stacktrace_generic-inl.inc" 76 #endif // __has_include(<execinfo.h>) 77 #endif // defined(__has_include) 78 79 #endif // defined(__linux__) && !defined(__ANDROID__) 80 81 // Fallback to the empty implementation. 82 #if !defined(ABSL_STACKTRACE_INL_HEADER) 83 #define ABSL_STACKTRACE_INL_HEADER \ 84 "absl/debugging/internal/stacktrace_unimplemented-inl.inc" 85 #endif 86 87 #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ 88