aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/siglist.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/siglist.c')
-rw-r--r--sysdeps/unix/sysv/linux/siglist.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/siglist.c b/sysdeps/unix/sysv/linux/siglist.c
index a10b273..d14a1b9 100644
--- a/sysdeps/unix/sysv/linux/siglist.c
+++ b/sysdeps/unix/sysv/linux/siglist.c
@@ -18,28 +18,58 @@
#include <stddef.h>
#include <signal.h>
+#include <sizes.h>
-const char * const __new_sys_siglist[NSIG] =
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+# define SYS_SIGLIST __new_sys_siglist
+# define SYS_SIGABBREV __new_sys_sigabbrev
+#else
+# define SYS_SIGLIST _sys_siglist
+# define SYS_SIGABBREV _sys_sigabbrev
+#endif
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".data; .globl __old_sys_siglist; __old_sys_siglist:");
+#endif
+
+const char *const SYS_SIGLIST[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] desc,
#include "siglist.h"
#undef init_sig
};
-const char * const __new_sys_sigabbrev[NSIG] =
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".type __old_sys_siglist,@object;.size __old_sys_siglist,"
+ OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
+
+asm (".data; .globl __old_sys_sigabbrev; __old_sys_sigabbrev:");
+#endif
+
+const char *const SYS_SIGABBREV[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] abbrev,
#include "siglist.h"
#undef init_sig
};
-#ifdef DO_VERSIONING
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".type __old_sys_sigabbrev,@object;.size __old_sys_sigabbrev,"
+ OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
+
+extern const char *const *__old_sys_siglist;
+extern const char *const *__old_sys_sigabbrev;
+
+strong_alias (__old_sys_siglist, _old_sys_siglist)
+symbol_version (__old_sys_siglist, _sys_siglist, GLIBC_2.0);
+symbol_version (_old_sys_siglist, sys_siglist, GLIBC_2.0);
+symbol_version (__old_sys_sigabbrev, sys_sigabbrev, GLIBC_2.0);
+
strong_alias (__new_sys_siglist, _new_sys_siglist)
default_symbol_version (__new_sys_siglist, _sys_siglist, GLIBC_2.1);
default_symbol_version (_new_sys_siglist, sys_siglist, GLIBC_2.1);
default_symbol_version (__new_sys_sigabbrev, sys_sigabbrev, GLIBC_2.1);
#else
-weak_alias(__new_sys_siglist, _sys_siglist)
-weak_alias(__new_sys_siglist, sys_siglist)
-weak_alias(__new_sys_sigabbrev, sys_sigabbrev)
+weak_alias (_sys_siglist, sys_siglist)
+weak_alias (_sys_sigabbrev, sys_sigabbrev)
#endif