[PATCH] D155828: [llvm-exegesis] Guard `__builtin_thread_pointer` behind a configure check
Markus Böck via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 20 05:49:03 PDT 2023
zero9178 created this revision.
zero9178 added reviewers: MaskRay, aidengrossman, courbet.
Herald added subscribers: mstojanovic, pengfei.
Herald added a project: All.
zero9178 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Due to arguably a bug in GCC[0], using `__has_builtin` is not sufficient to check whether `__builtin_thread_pointer` can actually be compiled by GCC. This makes it impossible to compile LLVM with `llvm-exegesis` enabled with e.g. GCC 10 as it does have the builtin, but no implementation for architectures such as x86.
This patch works around this issue by making it a cmake configure check whether the builtin can be compiled and used, rather than relying on the broken preprocessor macro.
[0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96952, demonstration: https://godbolt.org/z/9z5nWM6Ef
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D155828
Files:
llvm/cmake/config-ix.cmake
llvm/include/llvm/Config/config.h.cmake
llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
Index: llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
===================================================================
--- llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
+++ llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
@@ -39,7 +39,7 @@
#include <sys/wait.h>
#include <unistd.h>
-#if defined(__GLIBC__) && __has_include(<sys/rseq.h>) && __has_builtin(__builtin_thread_pointer)
+#if defined(__GLIBC__) && __has_include(<sys/rseq.h>) && defined(HAVE_BUILTIN_THREAD_POINTER)
#include <sys/rseq.h>
#ifdef RSEQ_SIG
#define GLIBC_INITS_RSEQ
Index: llvm/include/llvm/Config/config.h.cmake
===================================================================
--- llvm/include/llvm/Config/config.h.cmake
+++ llvm/include/llvm/Config/config.h.cmake
@@ -331,4 +331,6 @@
#cmakedefine HAVE_PROC_PID_RUSAGE 1
+#cmakedefine HAVE_BUILTIN_THREAD_POINTER ${HAVE_BUILTIN_THREAD_POINTER}
+
#endif
Index: llvm/cmake/config-ix.cmake
===================================================================
--- llvm/cmake/config-ix.cmake
+++ llvm/cmake/config-ix.cmake
@@ -10,6 +10,7 @@
include(CheckFunctionExists)
include(CheckStructHasMember)
include(CheckCCompilerFlag)
+include(CheckCSourceCompiles)
include(CMakePushCheckState)
include(CheckCompilerVersion)
@@ -63,12 +64,17 @@
check_include_file(fenv.h HAVE_FENV_H)
check_symbol_exists(FE_ALL_EXCEPT "fenv.h" HAVE_DECL_FE_ALL_EXCEPT)
check_symbol_exists(FE_INEXACT "fenv.h" HAVE_DECL_FE_INEXACT)
+check_c_source_compiles("
+ void* foo() {
+ return __builtin_thread_pointer();
+ }
+ int main(void) { return 0; }"
+ HAVE_BUILTIN_THREAD_POINTER)
check_include_file(mach/mach.h HAVE_MACH_MACH_H)
check_include_file(CrashReporterClient.h HAVE_CRASHREPORTERCLIENT_H)
if(APPLE)
- include(CheckCSourceCompiles)
- CHECK_C_SOURCE_COMPILES("
+ check_c_source_compiles("
static const char *__crashreporter_info__ = 0;
asm(\".desc ___crashreporter_info__, 0x10\");
int main(void) { return 0; }"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155828.542464.patch
Type: text/x-patch
Size: 2007 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230720/e57a053a/attachment.bin>
More information about the llvm-commits
mailing list