From dba2bdbe75bcb62e62133b7c4a807a2c45c098a7 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 2 Apr 2018 19:07:52 +0000 Subject: [PATCH] hurd: Avoid some PLTs in libc and librt * hurd/hurdauth.c (_S_msg_add_auth): Call __vm_allocate and __vm_deallocate instead of vm_allocate and vm_deallocate. * hurd/hurdmsg.c (_S_msg_set_env_variable): Call __setenv instead of setenv. * hurd/hurdprio.c (_hurd_priority_which_map): Call __geteuid instead of geteuid. * hurd/path-lookup.c (file_name_path_scan): Call __strdup instead of strdup. * hurd/siginfo.c: Include . (_hurd_siginfo_handler): Call _IO_puts instead of puts. * hurd/xattr.c (_hurd_xattr_get, _hurd_xattr_set): Call __munmap instead of munmap. * io/fts.c (fts_build): Call __dirfd instead of dirfd. * mach/devstream.c: Include . (dealloc_ref): Call __mach_port_deallocate instead of mach_port_deallocate. (mach_open_devstream): Call _IO_fopencookie instead of fopencookie. Call __mach_port_deallocate instead of mach_port_deallocate. * stdlib/canonicalize.c (__realpath): Call __pathconf instead of pathconf. * sysdeps/mach/hurd/ifreq.c (__ifreq): Call __munmap instead of munmap. * sysdeps/mach/hurd/ifreq.h (__if_freereq): Likewise. * sysdeps/mach/hurd/ptrace.c (ptrace): Call __kill instead of kill. * sysdeps/mach/hurd/sendfile64.c (sendfile64): Call __munmap instead of munmap. * sysdeps/mach/hurd/socketpair.c (__socketpair): Call __close instead of close. * sysdeps/posix/clock_getres.c (realtime_getres): Call __sysconf instead of sysconf. * sysdeps/pthread/timer_gettime.c (timer_gettime): Call __clock_gettime instead of clock_gettime. * sysdeps/pthread/timer_routines.c (thread_func): Likewise. * sysdeps/pthread/timer_settime.c (timer_settime): Likewise. * sysdeps/unix/bsd/gtty.c (gtty): Call __ioctl instead of ioctl. * sysdeps/unix/bsd/stty.c (stty): Likewise. * sysdeps/unix/bsd/tcflow.c (tcflow): Call __tcgetattr instead of tcgetattr. * sysdeps/unix/clock_nanosleep.c (__clock_nanosleep): Call __clock_gettime and __nanosleep instead of clock_gettime and nanosleep. --- ChangeLog | 42 ++++++++++++++++++++++++++++++++++++++++ hurd/hurdauth.c | 16 +++++++-------- hurd/hurdmsg.c | 2 +- hurd/hurdprio.c | 2 +- hurd/path-lookup.c | 2 +- hurd/siginfo.c | 3 ++- hurd/xattr.c | 6 +++--- io/fts.c | 2 +- mach/devstream.c | 13 +++++++------ stdlib/canonicalize.c | 2 +- sysdeps/mach/hurd/ifreq.c | 2 +- sysdeps/mach/hurd/ifreq.h | 2 +- sysdeps/mach/hurd/ptrace.c | 2 +- sysdeps/mach/hurd/sendfile64.c | 2 +- sysdeps/mach/hurd/socketpair.c | 2 +- sysdeps/posix/clock_getres.c | 2 +- sysdeps/pthread/timer_gettime.c | 2 +- sysdeps/pthread/timer_routines.c | 2 +- sysdeps/pthread/timer_settime.c | 4 ++-- sysdeps/unix/bsd/gtty.c | 2 +- sysdeps/unix/bsd/stty.c | 2 +- sysdeps/unix/bsd/tcflow.c | 2 +- sysdeps/unix/clock_nanosleep.c | 4 ++-- 23 files changed, 82 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index b3d009b..e63f987 100644 --- a/ChangeLog +++ b/ChangeLog @@ -305,6 +305,48 @@ (_init_routine): Call __pthread_attr_init and __pthread_attr_setstack instead of pthread_attr_init and pthread_attr_setstack. + * hurd/hurdauth.c (_S_msg_add_auth): Call __vm_allocate and + __vm_deallocate instead of vm_allocate and vm_deallocate. + * hurd/hurdmsg.c (_S_msg_set_env_variable): Call __setenv instead of + setenv. + * hurd/hurdprio.c (_hurd_priority_which_map): Call __geteuid instead + of geteuid. + * hurd/path-lookup.c (file_name_path_scan): Call __strdup instead of + strdup. + * hurd/siginfo.c: Include . + (_hurd_siginfo_handler): Call _IO_puts instead of puts. + * hurd/xattr.c (_hurd_xattr_get, _hurd_xattr_set): Call __munmap instead of + munmap. + * io/fts.c (fts_build): Call __dirfd instead of dirfd. + * mach/devstream.c: Include . + (dealloc_ref): Call __mach_port_deallocate instead of + mach_port_deallocate. + (mach_open_devstream): Call _IO_fopencookie instead of fopencookie. + Call __mach_port_deallocate instead of mach_port_deallocate. + * stdlib/canonicalize.c (__realpath): Call __pathconf instead of + pathconf. + * sysdeps/mach/hurd/ifreq.c (__ifreq): Call __munmap instead of + munmap. + * sysdeps/mach/hurd/ifreq.h (__if_freereq): Likewise. + * sysdeps/mach/hurd/ptrace.c (ptrace): Call __kill instead of kill. + * sysdeps/mach/hurd/sendfile64.c (sendfile64): Call __munmap instead + of munmap. + * sysdeps/mach/hurd/socketpair.c (__socketpair): Call __close instead + of close. + * sysdeps/posix/clock_getres.c (realtime_getres): Call __sysconf + instead of sysconf. + * sysdeps/pthread/timer_gettime.c (timer_gettime): Call + __clock_gettime instead of clock_gettime. + * sysdeps/pthread/timer_routines.c (thread_func): Likewise. + * sysdeps/pthread/timer_settime.c (timer_settime): Likewise. + * sysdeps/unix/bsd/gtty.c (gtty): Call __ioctl instead of ioctl. + * sysdeps/unix/bsd/stty.c (stty): Likewise. + * sysdeps/unix/bsd/tcflow.c (tcflow): Call __tcgetattr instead of + tcgetattr. + * sysdeps/unix/clock_nanosleep.c (__clock_nanosleep): Call + __clock_gettime and __nanosleep instead of clock_gettime and + nanosleep. + 2018-04-02 Agustina Arzille Amos Jeffries David Michael diff --git a/hurd/hurdauth.c b/hurd/hurdauth.c index ad315a2..1a7e67e 100644 --- a/hurd/hurdauth.c +++ b/hurd/hurdauth.c @@ -52,8 +52,8 @@ _S_msg_add_auth (mach_port_t me, int i, j, k; vm_size_t offset; - urp = vm_allocate (mach_task_self (), (vm_address_t *) newlistp, - nexist + nnew * sizeof (uid_t), 1); + urp = __vm_allocate (mach_task_self (), (vm_address_t *) newlistp, + nexist + nnew * sizeof (uid_t), 1); if (urp) return urp; @@ -75,10 +75,10 @@ _S_msg_add_auth (mach_port_t me, offset = (round_page (nexist + nnew * sizeof (uid_t)) - round_page (j * sizeof (uid_t))); if (offset) - vm_deallocate (mach_task_self (), - (vm_address_t) (*newlistp - + (nexist + nnew * sizeof (uid_t))), - offset); + __vm_deallocate (mach_task_self (), + (vm_address_t) (*newlistp + + (nexist + nnew * sizeof (uid_t))), + offset); *newlistlen = j; return 0; } @@ -136,8 +136,8 @@ _S_msg_add_auth (mach_port_t me, #define freeup(array, len) \ if (array) \ - vm_deallocate (mach_task_self (), (vm_address_t) array, \ - len * sizeof (uid_t)); + __vm_deallocate (mach_task_self (), (vm_address_t) array, \ + len * sizeof (uid_t)); freeup (genuids, ngenuids); freeup (auxuids, nauxuids); diff --git a/hurd/hurdmsg.c b/hurd/hurdmsg.c index 5759af3..63e5e81 100644 --- a/hurd/hurdmsg.c +++ b/hurd/hurdmsg.c @@ -344,7 +344,7 @@ _S_msg_set_env_variable (mach_port_t msgport, mach_port_t auth, { AUTHCHECK; - if (setenv (variable, value, replace)) /* XXX name space */ + if (__setenv (variable, value, replace)) /* XXX name space */ return errno; return 0; } diff --git a/hurd/hurdprio.c b/hurd/hurdprio.c index 5ff84b6..3783fe9 100644 --- a/hurd/hurdprio.c +++ b/hurd/hurdprio.c @@ -50,7 +50,7 @@ _hurd_priority_which_map (enum __priority_which which, int who, case PRIO_USER: if (who == 0) - who = geteuid (); + who = __geteuid (); err = __USEPORT (PROC, __proc_getallpids (port, &pids, &npids)); for (i = 0; !err && i < npids; ++i) { diff --git a/hurd/path-lookup.c b/hurd/path-lookup.c index d3906e1..389a8cc 100644 --- a/hurd/path-lookup.c +++ b/hurd/path-lookup.c @@ -63,7 +63,7 @@ file_name_path_scan (const char *file_name, const char *path, if (err == 0) { if (prefixed_name) - *prefixed_name = strdup (pfxed_name); + *prefixed_name = __strdup (pfxed_name); return 0; } if (!real_err && err != ENOENT) diff --git a/hurd/siginfo.c b/hurd/siginfo.c index 65d8e48..75e02d5 100644 --- a/hurd/siginfo.c +++ b/hurd/siginfo.c @@ -17,10 +17,11 @@ #include #include +#include void _hurd_siginfo_handler (int signo) { /* XXX */ - puts ("got a SIGINFO"); + _IO_puts ("got a SIGINFO"); } diff --git a/hurd/xattr.c b/hurd/xattr.c index c56bab0..23d9fcb 100644 --- a/hurd/xattr.c +++ b/hurd/xattr.c @@ -67,14 +67,14 @@ _hurd_xattr_get (io_t port, const char *name, void *value, size_t *size) if (value != NULL && *size < bufsz) { if (buf != value) - munmap (buf, bufsz); + __munmap (buf, bufsz); return -ERANGE; } if (buf != value && bufsz > 0) { if (value != NULL) memcpy (value, buf, bufsz); - munmap (buf, bufsz); + __munmap (buf, bufsz); } *size = bufsz; return 0; @@ -150,7 +150,7 @@ _hurd_xattr_set (io_t port, const char *name, const void *value, size_t size, return err; if (bufsz > 0) { - munmap (buf, bufsz); + __munmap (buf, bufsz); return ENODATA; } } diff --git a/io/fts.c b/io/fts.c index ad9d333..a30491c 100644 --- a/io/fts.c +++ b/io/fts.c @@ -680,7 +680,7 @@ fts_build (FTSOBJ *sp, int type) */ cderrno = 0; if (nlinks || type == BREAD) { - if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) { + if (fts_safe_changedir(sp, cur, __dirfd(dirp), NULL)) { if (nlinks && type == BREAD) cur->fts_errno = errno; cur->fts_flags |= FTS_DONTCHDIR; diff --git a/mach/devstream.c b/mach/devstream.c index 21d9f7b..505b657 100644 --- a/mach/devstream.c +++ b/mach/devstream.c @@ -22,6 +22,7 @@ #include #include #include +#include static ssize_t @@ -111,7 +112,7 @@ devstream_read (void *cookie, char *buffer, size_t to_read) static int dealloc_ref (void *cookie) { - if (mach_port_deallocate (mach_task_self (), (mach_port_t) cookie)) + if (__mach_port_deallocate (mach_task_self (), (mach_port_t) cookie)) { errno = EINVAL; return -1; @@ -130,13 +131,13 @@ mach_open_devstream (mach_port_t dev, const char *mode) return NULL; } - stream = fopencookie ((void *) dev, mode, - (cookie_io_functions_t) { write: devstream_write, - read: devstream_read, - close: dealloc_ref }); + stream = _IO_fopencookie ((void *) dev, mode, + (cookie_io_functions_t) { write: devstream_write, + read: devstream_read, + close: dealloc_ref }); if (stream == NULL) { - mach_port_deallocate (mach_task_self (), dev); + __mach_port_deallocate (mach_task_self (), dev); return NULL; } diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index 30825a9..4135f3f 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -68,7 +68,7 @@ __realpath (const char *name, char *resolved) #ifdef PATH_MAX path_max = PATH_MAX; #else - path_max = pathconf (name, _PC_PATH_MAX); + path_max = __pathconf (name, _PC_PATH_MAX); if (path_max <= 0) path_max = 1024; #endif diff --git a/sysdeps/mach/hurd/ifreq.c b/sysdeps/mach/hurd/ifreq.c index 1087782..70a906a 100644 --- a/sysdeps/mach/hurd/ifreq.c +++ b/sysdeps/mach/hurd/ifreq.c @@ -53,7 +53,7 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) if (len % sizeof (struct ifreq) != 0) { - munmap (data, len); + __munmap (data, len); errno = EGRATUITOUS; goto out; } diff --git a/sysdeps/mach/hurd/ifreq.h b/sysdeps/mach/hurd/ifreq.h index 3c20066..3ab8d85 100644 --- a/sysdeps/mach/hurd/ifreq.h +++ b/sysdeps/mach/hurd/ifreq.h @@ -28,5 +28,5 @@ static inline void __if_freereq (struct ifreq *ifreqs, int num_ifs) { - munmap (ifreqs, num_ifs * sizeof (struct ifreq)); + __munmap (ifreqs, num_ifs * sizeof (struct ifreq)); } diff --git a/sysdeps/mach/hurd/ptrace.c b/sysdeps/mach/hurd/ptrace.c index ac3059b..d0268a3 100644 --- a/sysdeps/mach/hurd/ptrace.c +++ b/sysdeps/mach/hurd/ptrace.c @@ -155,7 +155,7 @@ ptrace (enum __ptrace_request request, ... ) va_end (ap); /* SIGKILL always just terminates the task, so normal kill is just the same when traced. */ - return kill (pid, SIGKILL); + return __kill (pid, SIGKILL); case PTRACE_SINGLESTEP: /* This is a machine-dependent kernel RPC on diff --git a/sysdeps/mach/hurd/sendfile64.c b/sysdeps/mach/hurd/sendfile64.c index dfd9c45..f69ccd4 100644 --- a/sysdeps/mach/hurd/sendfile64.c +++ b/sysdeps/mach/hurd/sendfile64.c @@ -47,7 +47,7 @@ sendfile64 (int out_fd, int in_fd, off64_t *offset, size_t count) return 0; err = HURD_DPORT_USE (out_fd, __io_write (port, data, datalen, (off_t) -1, &nwrote)); - munmap (data, datalen); + __munmap (data, datalen); if (err == 0) { if (offset) diff --git a/sysdeps/mach/hurd/socketpair.c b/sysdeps/mach/hurd/socketpair.c index 85e0f74..3b18c67 100644 --- a/sysdeps/mach/hurd/socketpair.c +++ b/sysdeps/mach/hurd/socketpair.c @@ -82,7 +82,7 @@ __socketpair (int domain, int type, int protocol, int fds[2]) if (d2 < 0) { err = errno; - (void) close (d1); + (void) __close (d1); return __hurd_fail (err); } diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c index 8bc7e81..e7924e0 100644 --- a/sysdeps/posix/clock_getres.c +++ b/sysdeps/posix/clock_getres.c @@ -58,7 +58,7 @@ hp_timing_getres (struct timespec *res) static inline int realtime_getres (struct timespec *res) { - long int clk_tck = sysconf (_SC_CLK_TCK); + long int clk_tck = __sysconf (_SC_CLK_TCK); if (__glibc_likely (clk_tck != -1)) { diff --git a/sysdeps/pthread/timer_gettime.c b/sysdeps/pthread/timer_gettime.c index ef3019f..f5f060a 100644 --- a/sysdeps/pthread/timer_gettime.c +++ b/sysdeps/pthread/timer_gettime.c @@ -50,7 +50,7 @@ timer_gettime (timer_t timerid, struct itimerspec *value) { if (armed) { - clock_gettime (clock, &now); + __clock_gettime (clock, &now); if (timespec_compare (&now, &expiry) < 0) timespec_sub (&value->it_value, &expiry, &now); else diff --git a/sysdeps/pthread/timer_routines.c b/sysdeps/pthread/timer_routines.c index 25ccfad..c122467 100644 --- a/sysdeps/pthread/timer_routines.c +++ b/sysdeps/pthread/timer_routines.c @@ -376,7 +376,7 @@ thread_func (void *arg) /* This assumes that the elements of the list of one thread are all for the same clock. */ - clock_gettime (timer->clock, &now); + __clock_gettime (timer->clock, &now); while (1) { diff --git a/sysdeps/pthread/timer_settime.c b/sysdeps/pthread/timer_settime.c index 5c541ac..8a71a50 100644 --- a/sysdeps/pthread/timer_settime.c +++ b/sysdeps/pthread/timer_settime.c @@ -55,7 +55,7 @@ timer_settime (timer_t timerid, int flags, const struct itimerspec *value, if ((flags & TIMER_ABSTIME) == 0) { - clock_gettime (timer->clock, &now); + __clock_gettime (timer->clock, &now); have_now = 1; } @@ -80,7 +80,7 @@ timer_settime (timer_t timerid, int flags, const struct itimerspec *value, if (! have_now) { pthread_mutex_unlock (&__timer_mutex); - clock_gettime (timer->clock, &now); + __clock_gettime (timer->clock, &now); have_now = 1; pthread_mutex_lock (&__timer_mutex); timer_addref (timer); diff --git a/sysdeps/unix/bsd/gtty.c b/sysdeps/unix/bsd/gtty.c index 830de6d..77e2a72 100644 --- a/sysdeps/unix/bsd/gtty.c +++ b/sysdeps/unix/bsd/gtty.c @@ -22,5 +22,5 @@ int gtty (int fd, struct sgttyb *params) { - return ioctl (fd, TIOCGETP, (void *) params); + return __ioctl (fd, TIOCGETP, (void *) params); } diff --git a/sysdeps/unix/bsd/stty.c b/sysdeps/unix/bsd/stty.c index c89ab00..8a0bbde 100644 --- a/sysdeps/unix/bsd/stty.c +++ b/sysdeps/unix/bsd/stty.c @@ -22,5 +22,5 @@ int stty (int fd, const struct sgttyb *params) { - return ioctl (fd, TIOCSETP, (void *) params); + return __ioctl (fd, TIOCSETP, (void *) params); } diff --git a/sysdeps/unix/bsd/tcflow.c b/sysdeps/unix/bsd/tcflow.c index 7998e0c..3eb5f61 100644 --- a/sysdeps/unix/bsd/tcflow.c +++ b/sysdeps/unix/bsd/tcflow.c @@ -40,7 +40,7 @@ tcflow (int fd, int action) `write'. Is there another way to do this? */ struct termios attr; unsigned char c; - if (tcgetattr (fd, &attr) < 0) + if (__tcgetattr (fd, &attr) < 0) return -1; c = attr.c_cc[action == TCIOFF ? VSTOP : VSTART]; if (c != _POSIX_VDISABLE && write (fd, &c, 1) < 1) diff --git a/sysdeps/unix/clock_nanosleep.c b/sysdeps/unix/clock_nanosleep.c index 491ce02..97b3d6b 100644 --- a/sysdeps/unix/clock_nanosleep.c +++ b/sysdeps/unix/clock_nanosleep.c @@ -71,7 +71,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, assert (sizeof (sec) >= sizeof (now.tv_sec)); /* Get the current time for this clock. */ - if (__builtin_expect (clock_gettime (clock_id, &now), 0) != 0) + if (__builtin_expect (__clock_gettime (clock_id, &now), 0) != 0) return errno; /* Compute the difference. */ @@ -96,6 +96,6 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, /* Not supported. */ return ENOTSUP; - return __builtin_expect (nanosleep (req, rem), 0) ? errno : 0; + return __builtin_expect (__nanosleep (req, rem), 0) ? errno : 0; } weak_alias (__clock_nanosleep, clock_nanosleep) -- 2.7.4