diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2017-05-09 11:03:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-09 11:03:32 +0200 |
commit | 3437a820fdc94caa3d1775bcee802b056f3adce2 (patch) | |
tree | ff5c4550017c5186c67167de61ab460c3368f05b /src/pal/src | |
parent | eac27ca7fb6e80a0a1af44b889469b2818c45a9a (diff) | |
download | coreclr-3437a820fdc94caa3d1775bcee802b056f3adce2.tar.gz coreclr-3437a820fdc94caa3d1775bcee802b056f3adce2.tar.bz2 coreclr-3437a820fdc94caa3d1775bcee802b056f3adce2.zip |
Enable build on old Linux (#11414)
This change enables building coreclr on old Linux distros that
don't have PR_SET_PTRACER and don't have _xstate struct in the
standard sigcontext.h header.
Diffstat (limited to 'src/pal/src')
-rw-r--r-- | src/pal/src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/pal/src/config.h.in | 2 | ||||
-rw-r--r-- | src/pal/src/configure.cmake | 19 | ||||
-rw-r--r-- | src/pal/src/include/pal/context.h | 10 | ||||
-rw-r--r-- | src/pal/src/thread/process.cpp | 4 |
5 files changed, 35 insertions, 4 deletions
diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt index 145c2c9ed9..b8a9fe9e46 100644 --- a/src/pal/src/CMakeLists.txt +++ b/src/pal/src/CMakeLists.txt @@ -93,10 +93,10 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_I386) set(PAL_ARCH_SOURCES_DIR i386) endif() -if(CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT CLR_CMAKE_PLATFORM_ALPINE_LINUX) +if(PAL_CMAKE_PLATFORM_ARCH_AMD64 AND CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT CLR_CMAKE_PLATFORM_ALPINE_LINUX) # Currently the _xstate is not available on Alpine Linux add_definitions(-DXSTATE_SUPPORTED) -endif(CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT CLR_CMAKE_PLATFORM_ALPINE_LINUX) +endif(PAL_CMAKE_PLATFORM_ARCH_AMD64 AND CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT CLR_CMAKE_PLATFORM_ALPINE_LINUX) if(CLR_CMAKE_PLATFORM_ALPINE_LINUX) # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason diff --git a/src/pal/src/config.h.in b/src/pal/src/config.h.in index 7f37f42222..48677df750 100644 --- a/src/pal/src/config.h.in +++ b/src/pal/src/config.h.in @@ -66,6 +66,8 @@ #cmakedefine HAVE_UNW_GET_ACCESSORS #cmakedefine01 HAVE_XSWDEV #cmakedefine01 HAVE_XSW_USAGE +#cmakedefine01 HAVE_PUBLIC_XSTATE_STRUCT +#cmakedefine01 HAVE_PR_SET_PTRACER #cmakedefine01 HAVE_STAT_TIMESPEC #cmakedefine01 HAVE_STAT_NSEC diff --git a/src/pal/src/configure.cmake b/src/pal/src/configure.cmake index b5b98d5b2d..d5c6577eeb 100644 --- a/src/pal/src/configure.cmake +++ b/src/pal/src/configure.cmake @@ -1022,6 +1022,25 @@ int main(int argc, char **argv) return 0; }" HAVE_XSW_USAGE) +check_cxx_source_compiles(" +#include <signal.h> + +int main(int argc, char **argv) +{ + struct _xstate xstate; + struct _fpx_sw_bytes bytes; + return 0; +}" HAVE_PUBLIC_XSTATE_STRUCT) + +check_cxx_source_compiles(" +#include <sys/prctl.h> + +int main(int argc, char **argv) +{ + int flag = (int)PR_SET_PTRACER; + return 0; +}" HAVE_PR_SET_PTRACER) + set(CMAKE_REQUIRED_LIBRARIES pthread) check_cxx_source_compiles(" #include <errno.h> diff --git a/src/pal/src/include/pal/context.h b/src/pal/src/include/pal/context.h index db6d69579a..2c86a03d69 100644 --- a/src/pal/src/include/pal/context.h +++ b/src/pal/src/include/pal/context.h @@ -39,6 +39,16 @@ typedef ucontext_t native_context_t; #else // HAVE_UCONTEXT_T #error Native context type is not known on this platform! #endif // HAVE_UCONTEXT_T + +#if defined(XSTATE_SUPPORTED) && !HAVE_PUBLIC_XSTATE_STRUCT +namespace asm_sigcontext +{ +#include <asm/sigcontext.h> +}; +using asm_sigcontext::_fpx_sw_bytes; +using asm_sigcontext::_xstate; +#endif // defined(XSTATE_SUPPORTED) && !HAVE_PUBLIC_XSTATE_STRUCT + #else // !HAVE_MACH_EXCEPTIONS #include <mach/kern_return.h> #include <mach/mach_port.h> diff --git a/src/pal/src/thread/process.cpp b/src/pal/src/thread/process.cpp index 2a93d3c57d..6db9bf6f51 100644 --- a/src/pal/src/thread/process.cpp +++ b/src/pal/src/thread/process.cpp @@ -2981,7 +2981,7 @@ PROCAbort() // Do any shutdown cleanup before aborting or creating a core dump PROCNotifyProcessShutdown(); -#if HAVE_PRCTL_H +#if HAVE_PRCTL_H && HAVE_PR_SET_PTRACER // If enabled, launch the create minidump utility and wait until it completes if (g_argvCreateDump[0] != nullptr) { @@ -3018,7 +3018,7 @@ PROCAbort() } } } -#endif // HAVE_PRCTL_H +#endif // HAVE_PRCTL_H && HAVE_PR_SET_PTRACER // Abort the process after waiting for the core dump to complete abort(); } |