]> granicus.if.org Git - strace/commitdiff
Add macros for glibc version checks
authorEugene Syromyatnikov <evgsyr@gmail.com>
Fri, 19 Oct 2018 23:21:37 +0000 (01:21 +0200)
committerEugene Syromyatnikov <evgsyr@gmail.com>
Fri, 19 Oct 2018 23:21:37 +0000 (01:21 +0200)
Add GLIBC_PREREQ and GLIBC_OLDER macros that enable easy checks aginst
glibc vershions known to expose various quirks.

* glibc_compat.h: New file.
* tests/ipc_msg.c: Use GLIBC_OLDER for glibc version checking.
* tests/readahead.c: Likewise.

glibc_compat.h [new file with mode: 0644]
tests/ipc_msg.c
tests/readahead.c

diff --git a/glibc_compat.h b/glibc_compat.h
new file mode 100644 (file)
index 0000000..6b844e0
--- /dev/null
@@ -0,0 +1,23 @@
+#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 */
index a74dba515f8fd438cf8085a55ea572133d6ab49b..2bb0e050085f03651e0c50afdef2d182b814d672 100644 (file)
@@ -33,6 +33,8 @@
 #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
 
index a3e5cb8d8536a12b641b7f6b72b4d5723de97f1f..163d53eb77f7fd80d478a3283a3280a98cdf4c09 100644 (file)
 #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