mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 04:46:30 -04:00
Building the rseq selftests against musl libc fails because musl's
<features.h> does not provide the glibc-specific __GNUC_PREREQ macro:
error: missing binary operator before token '('
Replace __GNUC_PREREQ(11, 1) with an equivalent check using __GNUC__
and __GNUC_MINOR__ directly. This pattern is portable across all C
library implementations and is already used elsewhere in the tools/
tree (e.g., tools/include/linux/string.h).
This also allows removing the #include <features.h>, which was only
needed for __GNUC_PREREQ.
Fixes: 886ddfba93 ("selftests/rseq: Introduce thread pointer getters")
Signed-off-by: Hisam Mehboob <hisamshar@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260618193724.589113-2-hisamshar@gmail.com
39 lines
699 B
C
39 lines
699 B
C
/* SPDX-License-Identifier: LGPL-2.1-only OR MIT */
|
|
/*
|
|
* rseq-x86-thread-pointer.h
|
|
*
|
|
* (C) Copyright 2021 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
|
*/
|
|
|
|
#ifndef _RSEQ_X86_THREAD_POINTER
|
|
#define _RSEQ_X86_THREAD_POINTER
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if __GNUC__ > 11 || (__GNUC__ == 11 && __GNUC_MINOR__ >= 1)
|
|
static inline void *rseq_thread_pointer(void)
|
|
{
|
|
return __builtin_thread_pointer();
|
|
}
|
|
#else
|
|
static inline void *rseq_thread_pointer(void)
|
|
{
|
|
void *__result;
|
|
|
|
# ifdef __x86_64__
|
|
__asm__ ("mov %%fs:0, %0" : "=r" (__result));
|
|
# else
|
|
__asm__ ("mov %%gs:0, %0" : "=r" (__result));
|
|
# endif
|
|
return __result;
|
|
}
|
|
#endif /* !GCC 11 */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|