This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Tue, Mar 18, 2014 at 03:48:14PM -0700, Roland McGrath wrote:
> This seems worse to me. I've been vaguely noodling about some centralized
> macro regime to make the NOT_IN_*/IS_IN_* cases #if-friendly. Let's figure
> out what we want to do about those in general before considering
> SHLIB_COMPAT. I tend to think that it's a more maintainable interface to
> have '#if SHLIB_COMPAT (libfoo, ...)' be a standalone test that encompasses
> the IS_IN_libfoo test (just as it encompasses the SHARED test).
The NOT_IN_libc definition (non-definition actually) is only used to
define IS_IN_libc in cases where there is no other IS_IN_*. This can
be trivially used to set IS_IN_libc to 0 when NOT_IN_libc is set,
giving us the #if-friendly definition we want.
There is only one place (other than SHLIB_COMPAT) where IS_IN_libc is
used directly and I've fixed that up to use #if instead of #ifdef.
A further enhancement here would be to replace all uses of #ifdef
NOT_IN_libc with #if !IS_IN_libc so that NOT_IN_libc has just this one
specific usage.
I have avoided a warning on 'SHARED' by using ifdef on purpose for now
since it can be changed later if needed.
The generated code is identical before and after this change on
x86_64.
Siddhesh
* include/shlib-compat.h: Define IS_IN_libc early.
[NOT_IN_libc]: Define IS_IN_libc to 0.
* nss/nss_files/files-parse.c: Include shlib-compat.h.
[!ENTDATA]: Check for value of IS_IN_libc and not just if it
is defined.
diff --git a/include/shlib-compat.h b/include/shlib-compat.h
index fac0814..3b6a227 100644
--- a/include/shlib-compat.h
+++ b/include/shlib-compat.h
@@ -23,6 +23,12 @@
# include <abi-versions.h>
+# ifndef NOT_IN_libc
+# define IS_IN_libc 1
+# else
+# define IS_IN_libc 0
+# endif
+
/* The file abi-versions.h (generated by scripts/abi-versions.awk) defines
symbols like `ABI_libm_GLIBC_2_0' for each version set in the source
code for each library. For a version set that is subsumed by a later
@@ -45,10 +51,6 @@
&& (!(ABI_##lib##_##obsoleted - 0) \
|| ((ABI_##lib##_##introduced - 0) < (ABI_##lib##_##obsoleted - 0))))
-# ifndef NOT_IN_libc
-# define IS_IN_libc 1
-# endif
-
/* That header also defines symbols like `VERSION_libm_GLIBC_2_1' to
the version set name to use for e.g. symbols first introduced into
libm in the GLIBC_2.1 version. Definitions of symbols with explicit
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index 1da1a6f..35a232c 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
+#include <shlib-compat.h>
/* These symbols are defined by the including source file:
@@ -73,12 +74,12 @@ struct parser_data
/* Export the line parser function so it can be used in nss_db. */
# define parser_stclass /* Global */
# define parse_line CONCAT(_nss_files_parse_,ENTNAME)
-# ifdef IS_IN_libc
+# if defined SHARED && !IS_IN_libc
+# define nss_files_parse_hidden_def(name) libnss_files_hidden_def (name)
+# else
/* We are defining one of the functions that actually lives in libc
because it is used to implement fget*ent and suchlike. */
-# define nss_files_parse_hidden_def(name) libc_hidden_def (name)
-# else
-# define nss_files_parse_hidden_def(name) libnss_files_hidden_def (name)
+# define nss_files_parse_hidden_def(name) libc_hidden_def (name)
# endif
#endif
Attachment:
pgpwNTVb_w2Wf.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |