]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove IN_LIB
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 20 Nov 2014 06:33:11 +0000 (12:03 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Mon, 24 Nov 2014 06:11:42 +0000 (11:41 +0530)
Replace with IS_IN and IS_IN_LIB macros instead.  This change results
in a change in generated code, because it fixes a subtle bug.  The bug
was introduced when systemtap probes were added to lowlevellock.h,
which resulted in stap-probe.h being included in a number of places.
stap-probe.h always defines IN_LIB, which breaks a check in errno.h
and netdb.h since they rely on that macro to decide whether to
implement an internal version of a declaration or an external one.

The components that see a code change due to this are:

iconv_prog
libmemusage.so
libpcprofile.so
libSegFault.so
libutil.so.1
locale
localedef
nscd

All other built components (i.e. libc, libpthread, etc.) remain
unchanged by this on x86_64.

* elf/Makefile (CPPFLAGS-.os): Remove IN_LIB.
* elf/rtld-Rules (rtld-CPPFLAGS): Likewise.
* extra-lib.mk (CPPFLAGS-$(lib)): Likewise.
* include/libc-symbols.h (IS_IN_LIB): New macro.
* include/errno.h: Use IS_IN_LIB instead of IN_LIB.
* include/netdb.h: Likewise.
* include/stap-probe.h: Remove all uses of IN_LIB.

ChangeLog
elf/Makefile
elf/rtld-Rules
extra-lib.mk
include/errno.h
include/libc-symbols.h
include/netdb.h
include/stap-probe.h

index 43759c8ad7201146f968574ed1221c8369a1cad4..de672cf04b5b439ece87d3cb7ad764c9b5767bc7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2014-11-24  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
+       * elf/Makefile (CPPFLAGS-.os): Remove IN_LIB.
+       * elf/rtld-Rules (rtld-CPPFLAGS): Likewise.
+       * extra-lib.mk (CPPFLAGS-$(lib)): Likewise.
+       * include/libc-symbols.h (IS_IN_LIB): New macro.
+       * include/errno.h: Use IS_IN_LIB instead of IN_LIB.
+       * include/netdb.h: Likewise.
+       * include/stap-probe.h: Remove all uses of IN_LIB.
+
        * Makeconfig (module-cppflags-real): Define MODULE_NAME
        instead of IN_MODULE.
        * include/libc-symbols.h (IN_MODULE): Define using
index f013c22d671781bd4d8cb94e7dc20ed4338c8a48..1cf4c3a401428f5b71899cc9ceb1644bac0f9d52 100644 (file)
@@ -443,7 +443,7 @@ CFLAGS-cache.c = $(SYSCONF-FLAGS)
 CFLAGS-rtld.c = $(SYSCONF-FLAGS)
 
 CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
-                    -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
+                    -DNOT_IN_libc=1 -DIS_IN_rtld=1)
 
 cpp-srcs-left := $(all-rtld-routines:=.os)
 lib := rtld
index f2cc4a1b8dc5aa709a1243ddec3a3341e7dcda66..4d22436da25e7775f9edd3e94fedc45f5d52ce9b 100644 (file)
@@ -144,6 +144,6 @@ lib := rtld
 include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
 
 # This here is the whole point of all the shenanigans.
-rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld
+rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1
 
 endif
index fd8812cb21581af6434b6f8ada9963546072610e..c719bd9b9104f321fcdde0becb3bb15cafcd2384 100644 (file)
@@ -106,4 +106,4 @@ ifneq (,$(cpp-srcs-left))
 include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
 endif
 
-CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib)
+CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1
index dbf2a61e0d4d5d0579f54c8ec4ca0ce7ab4c44cd..8e60288f5070f1dbfccd545009cee00bba63bd05 100644 (file)
@@ -22,7 +22,7 @@
 #  define errno rtld_errno
 extern int rtld_errno attribute_hidden;
 
-# elif !defined NOT_IN_libc || defined IN_LIB
+# elif !defined NOT_IN_libc || IS_IN_LIB
 
 #  include <tls.h>
 
@@ -34,7 +34,7 @@ extern int rtld_errno attribute_hidden;
 #  endif
 extern __thread int errno attribute_tls_model_ie;
 
-# endif        /* !NOT_IN_libc || IN_LIB */
+# endif        /* !NOT_IN_libc || IS_IN_LIB */
 
 # define __set_errno(val) (errno = (val))
 
index 5cbf47308de0b3786aa6c99932ee141906815aca..52350d3b60b379adfa43e59ef0133f69bd7151d1 100644 (file)
 #define IN_MODULE PASTE_NAME (MODULE_, MODULE_NAME)
 #define IS_IN(lib) (IN_MODULE == MODULE_##lib)
 
+/* Returns true if the current module is a versioned library.  Versioned
+   library names culled from shlib-versions files are assigned a MODULE_*
+   value lower than MODULE_LIBS_BEGIN.  */
+#define IS_IN_LIB (IN_MODULE > MODULE_LIBS_BEGIN)
+
 #define PASTE_NAME(a,b)      PASTE_NAME1 (a,b)
 #define PASTE_NAME1(a,b)     a##b
 
index a7960ebdf72a58d08ec820d6fd3bae9f74d2ef49..eccdbe6462b2a3fc9a7a46e03a4fe978abdb5e21 100644 (file)
@@ -4,7 +4,7 @@
 
 #ifndef _ISOMAC
 /* Macros for accessing h_errno from inside libc.  */
-# if !defined NOT_IN_libc || defined IN_LIB
+# if !defined NOT_IN_libc || IS_IN_LIB
 #  undef  h_errno
 #  ifndef NOT_IN_libc
 #   define h_errno __libc_h_errno
@@ -12,7 +12,7 @@
 #   define h_errno h_errno     /* For #ifndef h_errno tests.  */
 #  endif
 extern __thread int h_errno attribute_tls_model_ie;
-# endif /* !NOT_IN_libc || IN_LIB */
+# endif /* !NOT_IN_libc || IS_IN_LIB */
 # define __set_h_errno(x) (h_errno = (x))
 
 libc_hidden_proto (hstrerror)
index 150fc1ec26867470271521cc8480d5147f390f1a..6532b376b306a5f71fc59496de4645a85bda8cc5 100644 (file)
    architecture specific and can be found in the gdb and SystemTap
    source code.  */
 
-# ifndef NOT_IN_libc
-#  define IN_LIB       libc
-# elif !defined IN_LIB
-/* This is intentionally defined with extra unquoted commas in it so
-   that macro substitution will bomb out when it is used.  We don't
-   just use #error here, so that this header can be included by
-   other headers that use LIBC_PROBE inside their own macros.  We
-   only want such headers to fail to compile if those macros are
-   actually used in a context where IN_LIB has not been defined.  */
-#  define IN_LIB       ,,,missing -DIN_LIB=... -- not extra-lib.mk?,,,
-# endif
-
 # define LIBC_PROBE(name, n, ...)      \
   LIBC_PROBE_1 (MODULE_NAME, name, n, ## __VA_ARGS__)