Skip to content

Commit

Permalink
core-*, stress-*: Add musl-gcc detection and HAVE_COMPILER_MUSL
Browse files Browse the repository at this point in the history
Detect for musl-gcc and define HAVE_COMPILER_MUSL and also define
HAVE_COMPILER_GCC_OR_MUSL for GCC or MUSL compilers. Allows one
to differentiate between gcc tool chains with and without glibc/musl
libc.

Fixes #325

Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
  • Loading branch information
ColinIanKing committed Oct 15, 2023
1 parent 3aa5a0d commit cd84c46
Show file tree
Hide file tree
Showing 15 changed files with 92 additions and 78 deletions.
56 changes: 28 additions & 28 deletions core-attribute.h
Expand Up @@ -20,7 +20,7 @@
#define CORE_ATTRIBUTE_H

/* warn unused attribute */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(4, 2, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4, 2, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0))
#define WARN_UNUSED __attribute__((warn_unused_result))
#else
Expand All @@ -36,23 +36,23 @@

#if defined(HAVE_ATTRIBUTE_FAST_MATH) && \
!defined(HAVE_COMPILER_ICC) && \
defined(HAVE_COMPILER_GCC) && \
defined(HAVE_COMPILER_GCC_OR_MUSL) && \
NEED_GNUC(10, 0, 0)
#define OPTIMIZE_FAST_MATH __attribute__((optimize("fast-math")))
#else
#define OPTIMIZE_FAST_MATH
#endif

/* no return hint */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(2, 5, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(2, 5, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0))
#define NORETURN __attribute__((noreturn))
#else
#define NORETURN
#endif

/* weak attribute */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(4, 0, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4, 0, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 4, 0))
#define WEAK __attribute__((weak))
#define HAVE_WEAK_ATTRIBUTE
Expand All @@ -64,7 +64,7 @@
#undef ALWAYS_INLINE
#endif
/* force inlining hint */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(3, 4, 0) \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(3, 4, 0) \
&& ((!defined(__s390__) && !defined(__s390x__)) || NEED_GNUC(6, 0, 1))) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0))
#define ALWAYS_INLINE __attribute__((always_inline))
Expand All @@ -73,46 +73,46 @@
#endif

/* force no inlining hint */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(3, 4, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(3, 4, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0))
#define NOINLINE __attribute__((noinline))
#else
#define NOINLINE
#endif

/* -O3 attribute support */
#if defined(HAVE_COMPILER_GCC) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
NEED_GNUC(4, 6, 0)
#define OPTIMIZE3 __attribute__((optimize("-O3")))
#else
#define OPTIMIZE3
#endif

/* -O2 attribute support */
#if defined(HAVE_COMPILER_GCC) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
NEED_GNUC(4, 6, 0)
#define OPTIMIZE2 __attribute__((optimize("-O2")))
#else
#define OPTIMIZE2
#endif

/* -O1 attribute support */
#if defined(HAVE_COMPILER_GCC) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
!defined(HAVE_COMPILER_CLANG) && \
!defined(HAVE_COMPILER_ICC) && \
NEED_GNUC(4, 6, 0)
#define OPTIMIZE1 __attribute__((optimize("-O1")))
#else
#define OPTIMIZE1
#endif

/* -O0 attribute support */
#if defined(HAVE_COMPILER_GCC) && \
!defined(HAVE_COMPILER_ICC) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
!defined(HAVE_COMPILER_ICC) && \
NEED_GNUC(4, 6, 0)
#define OPTIMIZE0 __attribute__((optimize("-O0")))
#elif (defined(HAVE_COMPILER_CLANG) && NEED_CLANG(10, 0, 0))
Expand All @@ -121,10 +121,10 @@
#define OPTIMIZE0
#endif

#if ((defined(HAVE_COMPILER_GCC) && NEED_GNUC(3, 3, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0)) || \
(defined(HAVE_COMPILER_ICC) && NEED_ICC(2021, 0, 0))) && \
!defined(HAVE_COMPILER_PCC) && \
#if ((defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(3, 3, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0)) || \
(defined(HAVE_COMPILER_ICC) && NEED_ICC(2021, 0, 0))) && \
!defined(HAVE_COMPILER_PCC) && \
!defined(__minix__)
#define ALIGNED(a) __attribute__((aligned(a)))
#else
Expand All @@ -136,7 +136,7 @@
#define ALIGN64 ALIGNED(64)


#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(4, 6, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4, 6, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0))
#if (defined(__APPLE__) && defined(__MACH__))
#define SECTION(s) __attribute__((__section__(# s "," # s)))
Expand All @@ -148,18 +148,18 @@
#endif

/* GCC hot attribute */
#if (defined(HAVE_COMPILER_GCC) && NEED_GNUC(4, 6, 0)) || \
#if (defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4, 6, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 3, 0))
#define HOT __attribute__((hot))
#else
#define HOT
#endif

/* GCC mlocked data and data section attribute */
#if ((defined(HAVE_COMPILER_GCC) && NEED_GNUC(4, 6, 0) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0)))) && \
!defined(__sun__) && \
!defined(__APPLE__) && \
#if ((defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4, 6, 0) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0)))) && \
!defined(__sun__) && \
!defined(__APPLE__) && \
!defined(BUILD_STATIC)
#define MLOCKED_TEXT __attribute__((__section__("mlocked_text")))
#define MLOCKED_SECTION (1)
Expand All @@ -168,7 +168,7 @@
#endif

/* print format attribute */
#if ((defined(HAVE_COMPILER_GCC) && NEED_GNUC(3, 2, 0)) || \
#if ((defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(3, 2, 0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(3, 0, 0)))
#define FORMAT(func, a, b) __attribute__((format(func, a, b)))
#else
Expand Down
4 changes: 2 additions & 2 deletions core-helper.c
Expand Up @@ -3486,8 +3486,8 @@ void NORETURN MLOCKED_TEXT stress_sig_handler_exit(int signum)
* __stack_chk_fail()
* override stack smashing callback
*/
#if defined(HAVE_COMPILER_GCC) && \
!defined(HAVE_COMPILER_CLANG) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
!defined(HAVE_COMPILER_CLANG) && \
defined(HAVE_WEAK_ATTRIBUTE)
extern void __stack_chk_fail(void);

Expand Down
18 changes: 9 additions & 9 deletions core-pragma.h
Expand Up @@ -22,8 +22,8 @@
#define STRESS_PRAGMA_(x) _Pragma (#x)
#define STRESS_PRAGMA(x) STRESS_PRAGMA_(x)

#if defined(HAVE_PRAGMA_NO_HARD_DFP) && \
defined(HAVE_COMPILER_GCC) && \
#if defined(HAVE_PRAGMA_NO_HARD_DFP) && \
defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_PRAGMA)
#define STRESS_PRAGMA_NO_HARD_DFP _Pragma("GCC target (\"no-hard-dfp\")")
#endif
Expand All @@ -34,8 +34,8 @@
#define STRESS_PRAGMA_PUSH _Pragma("GCC diagnostic push")
#define STRESS_PRAGMA_POP _Pragma("GCC diagnostic pop")
#define STRESS_PRAGMA_WARN_OFF _Pragma("GCC diagnostic ignored \"-Weverything\"")
#elif defined(HAVE_COMPILER_GCC) && \
defined(HAVE_PRAGMA) && \
#elif defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_PRAGMA) && \
NEED_GNUC(7, 5, 0)
#define STRESS_PRAGMA_PUSH _Pragma("GCC diagnostic push")
#define STRESS_PRAGMA_POP _Pragma("GCC diagnostic pop")
Expand All @@ -45,8 +45,8 @@
_Pragma("GCC diagnostic ignored \"-Wcast-qual\"") \
_Pragma("GCC diagnostic ignored \"-Wnonnull\"") \
_Pragma("GCC diagnostic ignored \"-Wstringop-overflow\"")
#elif defined(HAVE_COMPILER_GCC) && \
defined(HAVE_PRAGMA) && \
#elif defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_PRAGMA) && \
NEED_GNUC(4, 6, 0)
#define STRESS_PRAGMA_PUSH _Pragma("GCC diagnostic push")
#define STRESS_PRAGMA_POP _Pragma("GCC diagnostic pop")
Expand All @@ -65,8 +65,8 @@
NEED_CLANG(8, 0, 0) && \
defined(HAVE_PRAGMA)
#define STRESS_PRAGMA_WARN_CPP_OFF _Pragma("GCC diagnostic ignored \"-Wcpp\"")
#elif defined(HAVE_COMPILER_GCC) && \
defined(HAVE_PRAGMA) && \
#elif defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_PRAGMA) && \
NEED_GNUC(10, 0, 0)
#define STRESS_PRAGMA_WARN_CPP_OFF _Pragma("GCC diagnostic ignored \"-Wcpp\"")
#else
Expand All @@ -80,7 +80,7 @@
NEED_CLANG(9, 0, 0)
#define PRAGMA_UNROLL_N(n) STRESS_PRAGMA(unroll n)
#define PRAGMA_UNROLL STRESS_PRAGMA(unroll)
#elif defined(HAVE_COMPILER_GCC) && \
#elif defined(HAVE_COMPILER_GCC_OR_MUSL) && \
NEED_GNUC(10, 0, 0)
#define PRAGMA_UNROLL_N(n) STRESS_PRAGMA(GCC unroll n)
#define PRAGMA_UNROLL STRESS_PRAGMA(GCC unroll 8)
Expand Down
2 changes: 1 addition & 1 deletion core-shim.c
Expand Up @@ -494,7 +494,7 @@ int shim_getrandom(void *buff, size_t buflen, unsigned int flags)
*/
void shim_flush_icache(void *begin, void *end)
{
#if defined(HAVE_COMPILER_GCC) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(STRESS_ARCH_ARM)
__clear_cache(begin, end);
#elif defined(STRESS_ARCH_RISCV) && \
Expand Down
2 changes: 1 addition & 1 deletion core-target-clones.h
Expand Up @@ -138,7 +138,7 @@
#endif

#if defined(HAVE_TARGET_CLONES_GRANITERAPIDS) && \
defined(HAVE_COMPILER_GCC)
defined(HAVE_COMPILER_GCC_OR_MUSL)
#define TARGET_CLONE_GRANITERAPIDS "arch=graniterapids",
#define TARGET_CLONE_USE
#else
Expand Down
4 changes: 2 additions & 2 deletions core-vecmath.h
Expand Up @@ -38,8 +38,8 @@
* PPC64 for some reason with some flavours of the toolchain
* so disable this test for now
*/
#if defined(STRESS_ARCH_PPC64) && \
defined(HAVE_COMPILER_GCC) && \
#if defined(STRESS_ARCH_PPC64) && \
defined(HAVE_COMPILER_GCC_OR_MUSL) && \
__GNUC__ < 6
#undef HAVE_VECMATH
#endif
Expand Down
4 changes: 2 additions & 2 deletions stress-atomic.c
Expand Up @@ -71,7 +71,7 @@ typedef int (*atomic_func_t)(const stress_args_t *args, double *duration, double

#if defined(HAVE_ATOMIC_FETCH_NAND)
#define HAVE_ATOMIC_OPS
#if defined(HAVE_COMPILER_GCC) && __GNUC__ != 11
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && __GNUC__ != 11
#define SHIM_ATOMIC_FETCH_NAND(ptr, val, memorder) \
do { __atomic_fetch_nand(ptr, val, memorder); } while (0)
#else
Expand Down Expand Up @@ -121,7 +121,7 @@ typedef int (*atomic_func_t)(const stress_args_t *args, double *duration, double

#if defined(HAVE_ATOMIC_NAND_FETCH)
#define HAVE_ATOMIC_OPS
#if defined(HAVE_COMPILER_GCC) && __GNUC__ != 11
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && __GNUC__ != 11
#define SHIM_ATOMIC_NAND_FETCH(ptr, val, memorder) \
do { __atomic_nand_fetch(ptr, val, memorder); } while (0)
#else
Expand Down
2 changes: 1 addition & 1 deletion stress-flushcache.c
Expand Up @@ -37,7 +37,7 @@ static const stress_help_t help[] = {
defined(STRESS_ARCH_S390) || \
defined(STRESS_ARCH_PPC64)) && \
defined(HAVE_MPROTECT) && \
((defined(HAVE_COMPILER_GCC) && NEED_GNUC(4,6,0)) || \
((defined(HAVE_COMPILER_GCC_OR_MUSL) && NEED_GNUC(4,6,0)) || \
(defined(HAVE_COMPILER_CLANG) && NEED_CLANG(9,0,0)) || \
(defined(HAVE_COMPILER_ICX) && NEED_ICX(2023,2,0)) || \
(defined(HAVE_COMPILER_ICC) && NEED_ICC(2021,0,0)))
Expand Down
4 changes: 2 additions & 2 deletions stress-lockbus.c
Expand Up @@ -37,14 +37,14 @@ static const stress_opt_set_func_t opt_set_funcs[] = {
{ 0, NULL },
};

#if (((defined(HAVE_COMPILER_GCC) || \
#if (((defined(HAVE_COMPILER_GCC_OR_MUSL) || \
defined(HAVE_COMPILER_CLANG) || \
defined(HAVE_COMPILER_ICC) || \
defined(HAVE_COMPILER_ICX) || \
defined(HAVE_COMPILER_TCC) || \
defined(HAVE_COMPILER_PCC)) && \
defined(STRESS_ARCH_X86)) || \
(defined(HAVE_COMPILER_GCC) && \
(defined(HAVE_COMPILER_GCC_OR_MUSL) && \
(defined(HAVE_ATOMIC_ADD_FETCH) || \
defined(HAVE_ATOMIC_FETCH_ADD)) && \
defined(__ATOMIC_SEQ_CST) && \
Expand Down
4 changes: 2 additions & 2 deletions stress-malloc.c
Expand Up @@ -453,8 +453,8 @@ static int stress_malloc(const stress_args_t *args)
malloc_max = MIN_MALLOC_MAX;
}

#if defined(HAVE_COMPILER_GCC) && \
defined(HAVE_MALLOPT) && \
#if defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_MALLOPT) && \
defined(M_MMAP_THRESHOLD)
{
size_t malloc_threshold = DEFAULT_MALLOC_THRESHOLD;
Expand Down
12 changes: 6 additions & 6 deletions stress-memthrash.c
Expand Up @@ -94,12 +94,12 @@ static sigset_t set;

static stress_memthrash_primes_t stress_memthrash_primes[MEM_SIZE_PRIMES];

#if (((defined(HAVE_COMPILER_GCC) || defined(HAVE_COMPILER_CLANG)) && \
defined(STRESS_ARCH_X86)) || \
(defined(HAVE_COMPILER_GCC) && \
defined(HAVE_ATOMIC_ADD_FETCH) && \
defined(__ATOMIC_SEQ_CST) && \
NEED_GNUC(4,7,0) && \
#if (((defined(HAVE_COMPILER_GCC_OR_MUSL) || defined(HAVE_COMPILER_CLANG)) && \
defined(STRESS_ARCH_X86)) || \
(defined(HAVE_COMPILER_GCC_OR_MUSL) && \
defined(HAVE_ATOMIC_ADD_FETCH) && \
defined(__ATOMIC_SEQ_CST) && \
NEED_GNUC(4,7,0) && \
defined(STRESS_ARCH_ARM)))
#if defined(HAVE_ATOMIC_ADD_FETCH)
#define MEM_LOCK(ptr, inc) __atomic_add_fetch(ptr, inc, __ATOMIC_SEQ_CST)
Expand Down

0 comments on commit cd84c46

Please sign in to comment.