diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d1d9a27fb..34697e09b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,7 @@ if (UNIX) find_package(Sigaction) find_package(Sigaltstack) find_package(SelfDbg) + find_package(Ucontext) endif (UNIX) find_package(SSE) diff --git a/cmake/FindUcontext.cmake b/cmake/FindUcontext.cmake new file mode 100644 index 0000000000..67118be9b7 --- /dev/null +++ b/cmake/FindUcontext.cmake @@ -0,0 +1,23 @@ +include(CheckCXXSourceCompiles) + +check_cxx_source_compiles(" +#include +int main() { + ucontext_t context; +#if defined(__x86_64__) + void *ptr = (void *) context.uc_mcontext.gregs[REG_RIP]; +#elif defined(__i386) + void *ptr = (void *) context.uc_mcontext.gregs[REG_EIP]; +#else +#error Unknown arch +#endif + return 0; +}" + UCONTEXT_FOUND +) + +if (UCONTEXT_FOUND) + add_compile_options( + -DWITH_UCONTEXT + ) +endif (UCONTEXT_FOUND)