diff --git a/libunwind/src/config.h b/libunwind/src/config.h --- a/libunwind/src/config.h +++ b/libunwind/src/config.h @@ -121,10 +121,32 @@ #endif #endif +#if defined(__has_builtin) +#define _LIBUNWIND_HAS_BUILTIN(x) __has_builtin(x) +#else +#define _LIBUNWIND_HAS_BUILTIN(x) 0 +#endif + +#if defined(__has_include) +#define _LIBUNWIND_HAS_INCLUDE(x) __has_include(x) +#else +#define _LIBUNWIND_HAS_INCLUDE(x) 0 +#endif + #ifndef _LIBUNWIND_REMEMBER_HEAP_ALLOC -#if defined(_LIBUNWIND_REMEMBER_STACK_ALLOC) || defined(__APPLE__) || \ - defined(__linux__) || defined(__ANDROID__) || defined(__MINGW32__) || \ - defined(_LIBUNWIND_IS_BAREMETAL) + +#if _LIBUNWIND_HAS_BUILTIN(__builtin_alloca) +#define _LIBUNWIND_REMEMBER_ALLOC(_size) __builtin_alloca(_size) +#define _LIBUNWIND_REMEMBER_FREE(_ptr) \ + do { \ + } while (0) +#elif defined(alloca) +#define _LIBUNWIND_REMEMBER_ALLOC(_size) alloca(_size) +#define _LIBUNWIND_REMEMBER_FREE(_ptr) \ + do { \ + } while (0) +#elif _LIBUNWIND_HAS_INCLUDE() +#include #define _LIBUNWIND_REMEMBER_ALLOC(_size) alloca(_size) #define _LIBUNWIND_REMEMBER_FREE(_ptr) \ do { \