diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-17 20:17:49 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-17 20:17:49 +0000 |
commit | c21d37deb268afc45fbc5bba1a97f87afd0bf656 (patch) | |
tree | dc6313af5eaa7e05c0b127130a8d32b24f02625d /sysdeps/unix/syscall-template.S | |
parent | 90dd591393a03d023be06a33acfb42c1b328b0fa (diff) | |
download | glibc-c21d37deb268afc45fbc5bba1a97f87afd0bf656.tar.gz glibc-c21d37deb268afc45fbc5bba1a97f87afd0bf656.tar.xz glibc-c21d37deb268afc45fbc5bba1a97f87afd0bf656.zip |
Create hidden aliases for non-libc syscalls automatically.
The syscall wrappers mechanism automatically creates hidden aliases for syscalls with libc_hidden_def / libc_hidden_weak. The use of libc_hidden_* has the side-effect that for syscall wrappers in non-libc libraries those aliases are not created. In turn, this means that three mq_* syscalls in sysdeps/unix/sysv/linux/syscalls.list list the __GI_* names explicitly. The use of libc_hidden_* dates back to the original introduction of that support in 2002-08-03 Roland McGrath <roland@redhat.com> * sysdeps/unix/make-syscalls.sh: Generate libc_hidden_def or libc_hidden_weak for every system call symbol defined. (predating the non-libc syscalls in question) and I see no reason for excluding non-libc syscalls. This patch changes the code to use hidden_def / hidden_weak (via a wrapper syscall_hidden_def in the case where the argument is itself a macro, so that the argument gets expanded before concatenation with __GI_), so avoiding the need to specify the hidden aliases explicitly in this case. Tested for x86_64 and x86 (testsuite, and that disassembly of installed stripped shared libraries is unchanged by the patch; the mq_* symbols change from weak to strong, which is of no significance and two of them will shortly change back to weak as part of a fix for bug 18545). * sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Use hidden_def and hidden_weak instead of libc_hidden_def and libc_hidden_weak. (top level): Refer to hidden_def in comment. * sysdeps/unix/syscall-template.S (syscall_hidden_def): New macro. Use it instead of libc_hidden_def. * sysdeps/unix/sysv/linux/syscalls.list (mq_timedsend): Do not specify __GI_* name explicitly. (mq_timedreceive): Likewise. (mq_setattr): Likewise.
Diffstat (limited to 'sysdeps/unix/syscall-template.S')
-rw-r--r-- | sysdeps/unix/syscall-template.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S index 62ebe027b6..e86e6a73b9 100644 --- a/sysdeps/unix/syscall-template.S +++ b/sysdeps/unix/syscall-template.S @@ -47,6 +47,9 @@ # include <sysdep.h> #endif +/* This indirection is needed so that SYMBOL gets macro-expanded. */ +#define syscall_hidden_def(SYMBOL) hidden_def (SYMBOL) + #define T_PSEUDO(SYMBOL, NAME, N) PSEUDO (SYMBOL, NAME, N) #define T_PSEUDO_NOERRNO(SYMBOL, NAME, N) PSEUDO_NOERRNO (SYMBOL, NAME, N) #define T_PSEUDO_ERRVAL(SYMBOL, NAME, N) PSEUDO_ERRVAL (SYMBOL, NAME, N) @@ -84,4 +87,4 @@ T_PSEUDO_END (SYSCALL_SYMBOL) #endif -libc_hidden_def (SYSCALL_SYMBOL) +syscall_hidden_def (SYSCALL_SYMBOL) |