--- /dev/null
+#ifndef STRACE_GLIBC_COMPAT_H
+#define STRACE_GLIBC_COMPAT_H
+
+#if defined __GLIBC__
+# ifndef __GLIBC_MINOR__
+# warning "__GLIBC__ is defined, but __GLIBC_MINOR__ isn't"
+# define __GLIBC_MINOR__ 0
+# endif /* __GLIBC_MINOR__ */
+
+# ifdef __GLIBC_PREREQ
+# define GLIBC_PREREQ __GLIBC_PREREQ
+# else
+# define GLIBC_PREREQ(maj, min) \
+ ((((__GLIBC__) << 16) + (__GLIBC_MINOR__)) >= (((maj) << 16) + (min)))
+# endif /* __GLIBC_PREREQ */
+
+# define GLIBC_OLDER(maj, min) (!GLIBC_PREREQ((maj), (min)))
+#else /* !__GLIBC__ */
+# define GLIBC_PREREQ(maj, min) 0
+# define GLIBC_OLDER(maj, min) 0
+#endif
+
+#endif /* STRACE_GLIBC_COMPAT_H */
#include <stdlib.h>
#include <sys/msg.h>
+#include "glibc_compat.h"
+
#include "xlat.h"
#include "xlat/resource_flags.h"
* provided in third argument of msgctl call (in case of IPC_SET cmd)
* which led to segmentation fault.
*/
-#undef TEST_MSGCTL_BOGUS_ADDR
-#if defined __GLIBC__ && defined POWERPC64
-# if !(defined __GLIBC_MINOR__) \
- || ((__GLIBC__ << 16) + __GLIBC_MINOR__ < (2 << 16) + 23)
-# define TEST_MSGCTL_BOGUS_ADDR 0
-# endif
-#endif /* __GLIBC__ && POWERPC64 */
-
-#ifndef TEST_MSGCTL_BOGUS_ADDR
+#if defined POWERPC64 && GLIBC_OLDER(2, 23)
+# define TEST_MSGCTL_BOGUS_ADDR 0
+#else
# define TEST_MSGCTL_BOGUS_ADDR 1
#endif
#include <asm/unistd.h>
#ifdef HAVE_READAHEAD
-/* Check for glibc readahead argument passing bugs. */
-# ifdef __GLIBC__
+# include "glibc_compat"
+
/*
* glibc < 2.8 had an incorrect order of higher and lower parts of offset,
* see https://sourceware.org/bugzilla/show_bug.cgi?id=5208
*/
-# if !(defined __GLIBC_MINOR__ && \
- (__GLIBC__ << 16) + __GLIBC_MINOR__ >= (2 << 16) + 8)
-# undef HAVE_READAHEAD
-# endif /* glibc < 2.8 */
+# if GLIBC_OLDER(2, 8)
+# undef HAVE_READAHEAD
+# endif /* glibc < 2.8 */
+
/*
* glibc < 2.25 had an incorrect implementation on mips n64,
* see https://sourceware.org/bugzilla/show_bug.cgi?id=21026
*/
-# if defined LINUX_MIPSN64 && !(defined __GLIBC_MINOR__ && \
- (__GLIBC__ << 16) + __GLIBC_MINOR__ >= (2 << 16) + 25)
-# undef HAVE_READAHEAD
-# endif /* LINUX_MIPSN64 && glibc < 2.25 */
-# endif /* __GLIBC__ */
+# if defined LINUX_MIPSN64 && GLIBC_OLDER(2, 25)
+# undef HAVE_READAHEAD
+# endif /* LINUX_MIPSN64 && glibc < 2.25 */
#endif /* HAVE_READAHEAD */
#ifdef HAVE_READAHEAD