hurd: Make sure dl-sysdep.c defines proper symbol names

* sysdeps/mach/hurd/dl-sysdep.c (check_no_hidden): New macro.
	(__open, __close, __libc_read, __libc_write, __writev, __libc_lseek64,
	__mmap, __fxstat64, __xstat64, __access, __access_noerrno, __getpid,
	__getcwd, __sbrk, __strtoul_internal, _exit, abort): Use check_no_hidden
	to make sure that these symbols are defined.
This commit is contained in:
Samuel Thibault 2017-09-24 17:54:02 +02:00
parent 2f49ce7d62
commit 5e6f32531e
2 changed files with 33 additions and 7 deletions

View File

@ -1,3 +1,11 @@
2017-09-24 Samuel Thibault <samuel.thibault@ens-lyon.org>
* sysdeps/mach/hurd/dl-sysdep.c (check_no_hidden): New macro.
(__open, __close, __libc_read, __libc_write, __writev, __libc_lseek64,
__mmap, __fxstat64, __xstat64, __access, __access_noerrno, __getpid,
__getcwd, __sbrk, __strtoul_internal, _exit, abort): Use check_no_hidden
to make sure that these symbols are defined.
2017-09-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/ieee754/flt-32/s_asinhf.c: Include <libm-alias-float.h>.

View File

@ -292,6 +292,11 @@ _dl_sysdep_start_cleanup (void)
dynamic linker re-relocates itself to be user-visible (for -ldl),
it will get the user's definition (i.e. usually libc's). */
/* This macro checks that the function does not get renamed to be hidden: we do
need these to be overridable by libc's. */
#define check_no_hidden(name) \
static void __check_##name##_no_hidden(void) __attribute__((alias(#name)));
/* Open FILE_NAME and return a Hurd I/O for it in *PORT, or return an
error. If STAT is non-zero, stat the file into that stat buffer. */
static error_t
@ -347,6 +352,7 @@ open_file (const char *file_name, int flags,
return err;
}
check_no_hidden(__open);
int weak_function
__open (const char *file_name, int mode, ...)
{
@ -358,6 +364,7 @@ __open (const char *file_name, int mode, ...)
return (int)port;
}
check_no_hidden(__close);
int weak_function
__close (int fd)
{
@ -366,6 +373,7 @@ __close (int fd)
return 0;
}
check_no_hidden(__libc_read);
__ssize_t weak_function
__libc_read (int fd, void *buf, size_t nbytes)
{
@ -389,6 +397,7 @@ __libc_read (int fd, void *buf, size_t nbytes)
}
libc_hidden_weak (__libc_read)
check_no_hidden(__libc_write);
__ssize_t weak_function
__libc_write (int fd, const void *buf, size_t nbytes)
{
@ -406,6 +415,7 @@ __libc_write (int fd, const void *buf, size_t nbytes)
libc_hidden_weak (__libc_write)
/* This is only used for printing messages (see dl-misc.c). */
check_no_hidden(__writev);
__ssize_t weak_function
__writev (int fd, const struct iovec *iov, int niov)
{
@ -439,7 +449,7 @@ __writev (int fd, const struct iovec *iov, int niov)
return 0;
}
check_no_hidden(__libc_lseek64);
off64_t weak_function
__libc_lseek64 (int fd, off64_t offset, int whence)
{
@ -452,6 +462,7 @@ __libc_lseek64 (int fd, off64_t offset, int whence)
return offset;
}
check_no_hidden(__mmap);
void *weak_function
__mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
@ -514,6 +525,7 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
return (void *) mapaddr;
}
check_no_hidden(__fxstat64);
int weak_function
__fxstat64 (int vers, int fd, struct stat64 *buf)
{
@ -529,6 +541,7 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
}
libc_hidden_def (__fxstat64)
check_no_hidden(__xstat64);
int weak_function
__xstat64 (int vers, const char *file, struct stat64 *buf)
{
@ -551,12 +564,14 @@ libc_hidden_def (__xstat64)
whether debugging malloc is allowed even for SUID binaries. This
stub will always fail, which means that malloc-debugging is always
disabled for SUID binaries. */
check_no_hidden(__access);
int weak_function
__access (const char *file, int type)
{
errno = ENOSYS;
return -1;
}
check_no_hidden(__access_noerrno);
int weak_function
__access_noerrno (const char *file, int type)
{
@ -564,6 +579,7 @@ __access_noerrno (const char *file, int type)
return -1;
}
check_no_hidden(__getpid);
pid_t weak_function
__getpid (void)
{
@ -587,8 +603,8 @@ strong_alias (__getpid, __GI___getpid)
the functionality here. (We could, it just requires duplicating or
reusing getcwd.c's code but using our special lookup function as in
`open', above.) */
char *
weak_function
check_no_hidden(__getcwd);
char *weak_function
__getcwd (char *buf, size_t size)
{
errno = ENOSYS;
@ -597,8 +613,8 @@ __getcwd (char *buf, size_t size)
/* This is used by dl-tunables.c to strdup strings. We can just make this a
mere allocation. */
void *
weak_function
check_no_hidden(__sbrk);
void *weak_function
__sbrk (intptr_t increment)
{
vm_address_t addr;
@ -606,8 +622,8 @@ __sbrk (intptr_t increment)
return (void *) addr;
}
unsigned long int
weak_function
check_no_hidden(__strtoul_internal);
unsigned long int weak_function
__strtoul_internal (const char *nptr, char **endptr, int base, int group)
{
assert (base == 0 || base == 10);
@ -620,6 +636,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group)
strong_alias (__strtoul_internal, __GI___strtoul_internal)
strong_alias (__strtoul_internal, __GI_____strtoul_internal)
check_no_hidden(_exit);
void weak_function attribute_hidden
_exit (int status)
{
@ -640,6 +657,7 @@ strong_alias (_exit, __GI__exit)
# define ABORT_INSTRUCTION
#endif
check_no_hidden(abort);
void weak_function
abort (void)
{