From 1c82d532474798a1b07f85c5a925a2ad27ac2c27 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 13 Apr 2007 14:18:38 +0000 Subject: add hidden visibility support to libeinfo as well --- src/.depend | 17 ++++++++++------ src/hidden-visibility.h | 28 ++++++++++++++++++++++++++ src/libeinfo.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ src/librc.h | 20 +++---------------- 4 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 src/hidden-visibility.h diff --git a/src/.depend b/src/.depend index 1501c4ab..b7d9f51f 100644 --- a/src/.depend +++ b/src/.depend @@ -1,11 +1,16 @@ env-update.o: env-update.c einfo.h rc.h rc-misc.h strlist.h fstabinfo.o: fstabinfo.c einfo.h -libeinfo.o: libeinfo.c einfo.h rc.h rc-misc.h -librc.o: librc.c librc.h einfo.h rc.h rc-misc.h strlist.h -librc-daemon.o: librc-daemon.c librc.h einfo.h rc.h rc-misc.h strlist.h -librc-depend.o: librc-depend.c librc.h einfo.h rc.h rc-misc.h strlist.h -librc-misc.o: librc-misc.c librc.h einfo.h rc.h rc-misc.h strlist.h -librc-strlist.o: librc-strlist.c librc.h einfo.h rc.h rc-misc.h strlist.h +libeinfo.o: libeinfo.c einfo.h rc.h rc-misc.h hidden-visibility.h +librc.o: librc.c librc.h einfo.h rc.h rc-misc.h strlist.h \ + hidden-visibility.h +librc-daemon.o: librc-daemon.c librc.h einfo.h rc.h rc-misc.h strlist.h \ + hidden-visibility.h +librc-depend.o: librc-depend.c librc.h einfo.h rc.h rc-misc.h strlist.h \ + hidden-visibility.h +librc-misc.o: librc-misc.c librc.h einfo.h rc.h rc-misc.h strlist.h \ + hidden-visibility.h +librc-strlist.o: librc-strlist.c librc.h einfo.h rc.h rc-misc.h strlist.h \ + hidden-visibility.h mountinfo.o: mountinfo.c einfo.h rc.h rc-misc.h strlist.h rc.o: rc.c einfo.h rc.h rc-misc.h rc-plugin.h strlist.h rc-depend.o: rc-depend.c einfo.h rc.h rc-misc.h strlist.h diff --git a/src/hidden-visibility.h b/src/hidden-visibility.h new file mode 100644 index 00000000..bc8d4c4d --- /dev/null +++ b/src/hidden-visibility.h @@ -0,0 +1,28 @@ +/* + * hidden-visibility.h + * Create hidden internal aliases so we dont have wasteful relocs. + * Copyright 2007 Gentoo Foundation + * Released under the GPLv2 + */ + +#ifndef _HIDDEN_VISIBILITY_H_ +#define _HIDDEN_VISIBILITY_H_ + +#if defined(__ELF__) && defined(__GNUC__) +# define __hidden_asmname(name) __hidden_asmname1 (__USER_LABEL_PREFIX__, name) +# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) +# define __hidden_asmname2(prefix, name) #prefix name +# define __hidden_proto(name, internal) \ + extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ + __attribute__ ((visibility ("hidden"))); +# define __hidden_ver(local, internal, name) \ + extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \ + extern __typeof (name) __EI_##name __attribute__((alias (__hidden_asmname1 (,#local)))) +# define hidden_proto(name) __hidden_proto(name, __RC_##name) +# define hidden_def(name) __hidden_ver(__RC_##name, name, name); +#else +# define hidden_proto(name) +# define hidden_def(name) +#endif + +#endif diff --git a/src/libeinfo.c b/src/libeinfo.c index ebcddaa5..f25c68d9 100644 --- a/src/libeinfo.c +++ b/src/libeinfo.c @@ -21,6 +21,33 @@ #include "rc.h" #include "rc-misc.h" +#include "hidden-visibility.h" +hidden_proto(colour_terminal) +hidden_proto(ebegin) +hidden_proto(ebeginv) +hidden_proto(ebracket) +hidden_proto(eend) +hidden_proto(eendv) +hidden_proto(eerror) +hidden_proto(eerrorn) +hidden_proto(eerrorx) +hidden_proto(eflush) +hidden_proto(eindent) +hidden_proto(eindentv) +hidden_proto(einfo) +hidden_proto(einfon) +hidden_proto(einfov) +hidden_proto(einfovn) +hidden_proto(eoutdent) +hidden_proto(eoutdentv) +hidden_proto(ewarn) +hidden_proto(ewarnn) +hidden_proto(ewarnv) +hidden_proto(ewarnvn) +hidden_proto(ewarnx) +hidden_proto(ewend) +hidden_proto(ewendv) + /* Incase we cannot work out how many columns from ioctl, supply a default */ #define DEFAULT_COLS 80 @@ -123,6 +150,7 @@ bool colour_terminal (void) in_colour = 0; return (false); } +hidden_def(colour_terminal) static int get_term_columns (void) { @@ -322,6 +350,7 @@ void eflush (void) _exit (EXIT_SUCCESS); } +hidden_def(eflush) #define EBUFFER(_cmd, _retval, _fmt, _ap) { \ int _i = ebuffer (_cmd, _retval, _fmt, _ap); \ @@ -422,6 +451,7 @@ int einfon (const char *fmt, ...) return (retval); } +hidden_def(einfon) int ewarnn (const char *fmt, ...) { @@ -438,6 +468,7 @@ int ewarnn (const char *fmt, ...) return (retval); } +hidden_def(ewarnn) int eerrorn (const char *fmt, ...) { @@ -451,6 +482,7 @@ int eerrorn (const char *fmt, ...) return (retval); } +hidden_def(eerrorn) int einfo (const char *fmt, ...) { @@ -469,6 +501,7 @@ int einfo (const char *fmt, ...) return (retval); } +hidden_def(einfo) int ewarn (const char *fmt, ...) { @@ -488,6 +521,7 @@ int ewarn (const char *fmt, ...) return (retval); } +hidden_def(ewarn) void ewarnx (const char *fmt, ...) { @@ -503,6 +537,7 @@ void ewarnx (const char *fmt, ...) } exit (EXIT_FAILURE); } +hidden_def(ewarnx) int eerror (const char *fmt, ...) { @@ -520,6 +555,7 @@ int eerror (const char *fmt, ...) return (retval); } +hidden_def(eerror) void eerrorx (const char *fmt, ...) { @@ -534,6 +570,7 @@ void eerrorx (const char *fmt, ...) } exit (EXIT_FAILURE); } +hidden_def(eerrorx) int ebegin (const char *fmt, ...) { @@ -557,6 +594,7 @@ int ebegin (const char *fmt, ...) return (retval); } +hidden_def(ebegin) static void _eend (int col, einfo_color_t color, const char *msg) { @@ -648,6 +686,7 @@ int eend (int retval, const char *fmt, ...) return (retval); } +hidden_def(eend) int ewend (int retval, const char *fmt, ...) { @@ -662,11 +701,13 @@ int ewend (int retval, const char *fmt, ...) return (retval); } +hidden_def(ewend) void ebracket (int col, einfo_color_t color, const char *msg) { _eend (col, color, msg); } +hidden_def(ebracket) void eindent (void) { @@ -691,6 +732,7 @@ void eindent (void) snprintf (num, 10, "%08d", amount); setenv ("RC_EINDENT", num, 1); } +hidden_def(eindent) void eoutdent (void) { @@ -718,6 +760,7 @@ void eoutdent (void) setenv ("RC_EINDENT", num, 1); } } +hidden_def(eoutdent) int einfovn (const char *fmt, ...) { @@ -736,6 +779,7 @@ int einfovn (const char *fmt, ...) return (retval); } +hidden_def(einfovn) int ewarnvn (const char *fmt, ...) { @@ -754,6 +798,7 @@ int ewarnvn (const char *fmt, ...) return (retval); } +hidden_def(ewarnvn) int einfov (const char *fmt, ...) { @@ -774,6 +819,7 @@ int einfov (const char *fmt, ...) return (retval); } +hidden_def(einfov) int ewarnv (const char *fmt, ...) { @@ -795,6 +841,7 @@ int ewarnv (const char *fmt, ...) return (retval); } +hidden_def(ewarnv) int ebeginv (const char *fmt, ...) { @@ -817,6 +864,7 @@ int ebeginv (const char *fmt, ...) return (retval); } +hidden_def(ebeginv) int eendv (int retval, const char *fmt, ...) { @@ -830,6 +878,7 @@ int eendv (int retval, const char *fmt, ...) return (retval); } +hidden_def(eendv) int ewendv (int retval, const char *fmt, ...) { @@ -843,15 +892,18 @@ int ewendv (int retval, const char *fmt, ...) return (retval); } +hidden_def(ewendv) void eindentv (void) { if (is_env ("RC_VERBOSE", "yes")) eindent (); } +hidden_def(eindentv) void eoutdentv (void) { if (is_env ("RC_VERBOSE", "yes")) eoutdent (); } +hidden_def(eoutdentv) diff --git a/src/librc.h b/src/librc.h index 66d67776..5791fed4 100644 --- a/src/librc.h +++ b/src/librc.h @@ -41,23 +41,9 @@ #include "rc-misc.h" #include "strlist.h" -/* internal alias trickery! we dont want internal relocs! */ -#if defined(__ELF__) && defined(__GNUC__) -# define __hidden_asmname(name) __hidden_asmname1 (__USER_LABEL_PREFIX__, name) -# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) -# define __hidden_asmname2(prefix, name) #prefix name -# define __hidden_proto(name, internal) \ - extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ - __attribute__ ((visibility ("hidden"))); -# define __hidden_ver(local, internal, name) \ - extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \ - extern __typeof (name) __EI_##name __attribute__((alias (__hidden_asmname1 (,#local)))) -# define librc_hidden_proto(name) __hidden_proto(name, __RC_##name) -# define librc_hidden_def(name) __hidden_ver(__RC_##name, name, name); -#else -# define librc_hidden_proto(name) -# define librc_hidden_def(name) -#endif +#include "hidden-visibility.h" +#define librc_hidden_proto(x) hidden_proto(x) +#define librc_hidden_def(x) hidden_def(x) librc_hidden_proto(rc_allow_plug) librc_hidden_proto(rc_config_env) -- cgit v1.2.3