Skip to content

Commit 6f095ba

Browse files
tob2abidh
authored andcommitted
sanitizer_common: Define FP_XSTATE_MAGIC1 for old glibc
D116208 (commit 1298273) added FP_XSTATE_MAGIC1. However, when building with glibc < 2.16 for backward-dependency compatibility, it is not defined - and the build breaks. Note: The define comes from Linux's asm/sigcontext.h but the file uses signal.h which includes glibc's bits/sigcontext.h - which is synced from the kernel's file but lags behind. Solution: For backward compatility with ancient systems, define FP_XSTATE_MAGIC1 if undefined. //For the old systems, we were building with Linux kernel 3.19 but to support really old glibc systems, we build with a sysroot of glibc 2.12. While our kernel (and the users' kernels) have FP_XSTATE_MAGIC1, glibc 2.12 is too old. – With this patch, building the sanitizer libs works again. This showed up for us today as GCC mainline/13 has now synced the sanitizer libs.// Reviewed By: #sanitizers, vitalybuka Differential Revision: https://reviews.llvm.org/D124927
1 parent df58018 commit 6f095ba

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ namespace __sanitizer {
218218

219219
unsigned ucontext_t_sz(void *ctx) {
220220
# if SANITIZER_GLIBC && SANITIZER_X64
221+
// Added in Linux kernel 3.4.0, merged to glibc in 2.16
222+
# ifndef FP_XSTATE_MAGIC1
223+
# define FP_XSTATE_MAGIC1 0x46505853U
224+
# endif
221225
// See kernel arch/x86/kernel/fpu/signal.c for details.
222226
const auto *fpregs = static_cast<ucontext_t *>(ctx)->uc_mcontext.fpregs;
223227
// The member names differ across header versions, but the actual layout

0 commit comments

Comments
 (0)