add hidden visibility support to libeinfo as well

This commit is contained in:
Mike Frysinger 2007-04-13 14:18:38 +00:00
parent a822d2d118
commit 1c82d53247
4 changed files with 94 additions and 23 deletions

View File

@ -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

28
src/hidden-visibility.h Normal file
View File

@ -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

View File

@ -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)

View File

@ -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)