From 7a8f45e302b4518da518b48ab54ab43249d606f1 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 2 Apr 2018 22:07:28 +0000 Subject: [PATCH] hurd: Avoid some libc.so PLTs * hurd/catch-signal.c (hurd_catch_signal): Rename to __hurd_catch_signal. (hurd_catch_signal): New strong alias. (hurd_safe_memset, hurd_safe_copyout, hurd_safe_copyin): Call __hurd_catch_signal instead of hurd_catch_signal. * hurd/exc2signal.c (_hurd_exception2signal): Add hidden def. * hurd/hurdexec.c (_hurd_init): Add hidden def. * hurd/hurdinit.c (_hurd_init): Add hidden def. * hurd/hurdsig.c: Include . (_hurd_thread_sigstate): Add hidden def. (_hurd_internal_post_signal): Use __mutex_unlock instead of mutex_unlock. * hurd/intern-fd.c (_hurd_intern_fd): Add hidden def. * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Add hidden def. * hurd/path-lookup.c (hurd_file_name_path_lookup): Rename to __hurd_file_name_path_lookup. (hurd_file_name_path_lookup): New strong alias. (file_name_path_lookup): Call __hurd_file_name_path_lookup instead of hurd_file_name_path_lookup. * mach/errstring.c (mach_error_type): Add hidden def. * mach/msg-destroy.c (__mach_msg_destroy): Add hidden def. * mach/mutex-init.c (__mutex_init): Add hidden def. * mach/spin-lock.c (__spin_lock_locked, __spin_lock, __spin_unlock, __spin_try_lock, __mutex_lock, __mutex_trylock): Add hidden defs. * mach/spin-solid.c (__spin_lock_solid): Add hidden def. * sysdeps/mach/hurd/getcwd.c (_hurd_canonicalize_directory_name_internal): Rename to __hurd_canonicalize_directory_name_internal. (_hurd_canonicalize_directory_name_internal): New strong alias. (__canonicalize_directory_name_internal, __getcwd): Call __hurd_canonicalize_directory_name_internal instead of _hurd_canonicalize_directory_name_internal. * sysdeps/mach/hurd/mig-reply.c: Include . (__mig_get_reply_port, __mig_dealloc_reply_port, __mig_init): Add hidden defs. * sysdeps/hurd/include/hurd.h: New file. * sysdeps/hurd/include/hurd/fd.h: New file. * sysdeps/hurd/include/hurd/signal.h: New file. * sysdeps/mach/include/lock-intern.h: New file. * sysdeps/mach/include/mach.h: New file. * sysdeps/mach/include/mach/mig_support.h: New file. * sysdeps/mach/include/mach_error.h: New file. --- ChangeLog | 42 +++++++++++++++++++++++++ hurd/catch-signal.c | 27 ++++++++-------- hurd/exc2signal.c | 1 + hurd/hurdexec.c | 1 + hurd/hurdinit.c | 1 + hurd/hurdsig.c | 4 ++- hurd/intern-fd.c | 1 + hurd/intr-msg.c | 1 + hurd/path-lookup.c | 27 ++++++++-------- mach/errstring.c | 1 + mach/msg-destroy.c | 1 + mach/mutex-init.c | 1 + mach/spin-lock.c | 6 ++++ mach/spin-solid.c | 1 + sysdeps/hurd/include/hurd.h | 5 +++ sysdeps/hurd/include/hurd/fd.h | 4 +++ sysdeps/hurd/include/hurd/signal.h | 6 ++++ sysdeps/mach/hurd/getcwd.c | 9 +++--- sysdeps/mach/hurd/mig-reply.c | 4 +++ sysdeps/mach/include/lock-intern.h | 12 +++++++ sysdeps/mach/include/mach.h | 4 +++ sysdeps/mach/include/mach/mig_support.h | 6 ++++ sysdeps/mach/include/mach_error.h | 4 +++ 23 files changed, 138 insertions(+), 31 deletions(-) create mode 100644 sysdeps/hurd/include/hurd.h create mode 100644 sysdeps/hurd/include/hurd/fd.h create mode 100644 sysdeps/hurd/include/hurd/signal.h create mode 100644 sysdeps/mach/include/lock-intern.h create mode 100644 sysdeps/mach/include/mach.h create mode 100644 sysdeps/mach/include/mach/mig_support.h create mode 100644 sysdeps/mach/include/mach_error.h diff --git a/ChangeLog b/ChangeLog index c0433c9013..b0256e9d81 100644 --- a/ChangeLog +++ b/ChangeLog @@ -345,6 +345,48 @@ * sysdeps/unix/clock_nanosleep.c (__clock_nanosleep): Call __clock_gettime and __nanosleep instead of clock_gettime and nanosleep. + * hurd/catch-signal.c (hurd_catch_signal): Rename to + __hurd_catch_signal. + (hurd_catch_signal): New strong alias. + (hurd_safe_memset, hurd_safe_copyout, hurd_safe_copyin): Call + __hurd_catch_signal instead of hurd_catch_signal. + * hurd/exc2signal.c (_hurd_exception2signal): Add hidden def. + * hurd/hurdexec.c (_hurd_init): Add hidden def. + * hurd/hurdinit.c (_hurd_init): Add hidden def. + * hurd/hurdsig.c: Include . + (_hurd_thread_sigstate): Add hidden def. + (_hurd_internal_post_signal): Use __mutex_unlock instead of + mutex_unlock. + * hurd/intern-fd.c (_hurd_intern_fd): Add hidden def. + * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Add hidden def. + * hurd/path-lookup.c (hurd_file_name_path_lookup): Rename to + __hurd_file_name_path_lookup. + (hurd_file_name_path_lookup): New strong alias. + (file_name_path_lookup): Call __hurd_file_name_path_lookup instead of + hurd_file_name_path_lookup. + * mach/errstring.c (mach_error_type): Add hidden def. + * mach/msg-destroy.c (__mach_msg_destroy): Add hidden def. + * mach/mutex-init.c (__mutex_init): Add hidden def. + * mach/spin-lock.c (__spin_lock_locked, __spin_lock, __spin_unlock, + __spin_try_lock, __mutex_lock, __mutex_trylock): Add hidden defs. + * mach/spin-solid.c (__spin_lock_solid): Add hidden def. + * sysdeps/mach/hurd/getcwd.c + (_hurd_canonicalize_directory_name_internal): Rename to + __hurd_canonicalize_directory_name_internal. + (_hurd_canonicalize_directory_name_internal): New strong alias. + (__canonicalize_directory_name_internal, __getcwd): Call + __hurd_canonicalize_directory_name_internal instead of + _hurd_canonicalize_directory_name_internal. + * sysdeps/mach/hurd/mig-reply.c: Include . + (__mig_get_reply_port, __mig_dealloc_reply_port, __mig_init): Add + hidden defs. + * sysdeps/hurd/include/hurd.h: New file. + * sysdeps/hurd/include/hurd/fd.h: New file. + * sysdeps/hurd/include/hurd/signal.h: New file. + * sysdeps/mach/include/lock-intern.h: New file. + * sysdeps/mach/include/mach.h: New file. + * sysdeps/mach/include/mach/mig_support.h: New file. + * sysdeps/mach/include/mach_error.h: New file. * sysdeps/mach/hurd/localplt.data: New file. diff --git a/hurd/catch-signal.c b/hurd/catch-signal.c index b1e373992b..56ce86532d 100644 --- a/hurd/catch-signal.c +++ b/hurd/catch-signal.c @@ -22,10 +22,10 @@ #include error_t -hurd_catch_signal (sigset_t sigset, - unsigned long int first, unsigned long int last, - error_t (*operate) (struct hurd_signal_preemptor *), - sighandler_t handler) +__hurd_catch_signal (sigset_t sigset, + unsigned long int first, unsigned long int last, + error_t (*operate) (struct hurd_signal_preemptor *), + sighandler_t handler) { /* We need to restore the signal mask, because otherwise the signal-handling code will have blocked the caught signal and for @@ -73,6 +73,7 @@ hurd_catch_signal (sigset_t sigset, return error; } +strong_alias (__hurd_catch_signal, hurd_catch_signal) error_t @@ -83,9 +84,9 @@ hurd_safe_memset (void *dest, int byte, size_t nbytes) memset (dest, byte, nbytes); return 0; } - return hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), - (vm_address_t) dest, (vm_address_t) dest + nbytes, - &operate, SIG_ERR); + return __hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), + (vm_address_t) dest, (vm_address_t) dest + nbytes, + &operate, SIG_ERR); } @@ -97,9 +98,9 @@ hurd_safe_copyout (void *dest, const void *src, size_t nbytes) memcpy (dest, src, nbytes); return 0; } - return hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), - (vm_address_t) dest, (vm_address_t) dest + nbytes, - &operate, SIG_ERR); + return __hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), + (vm_address_t) dest, (vm_address_t) dest + nbytes, + &operate, SIG_ERR); } error_t @@ -110,9 +111,9 @@ hurd_safe_copyin (void *dest, const void *src, size_t nbytes) memcpy (dest, src, nbytes); return 0; } - return hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), - (vm_address_t) src, (vm_address_t) src + nbytes, - &operate, SIG_ERR); + return __hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), + (vm_address_t) src, (vm_address_t) src + nbytes, + &operate, SIG_ERR); } error_t diff --git a/hurd/exc2signal.c b/hurd/exc2signal.c index 73abb93baf..10aa1ca4cf 100644 --- a/hurd/exc2signal.c +++ b/hurd/exc2signal.c @@ -68,3 +68,4 @@ _hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) break; } } +libc_hidden_def (_hurd_exception2signal) diff --git a/hurd/hurdexec.c b/hurd/hurdexec.c index 027fa5a3ee..732c9ec34b 100644 --- a/hurd/hurdexec.c +++ b/hurd/hurdexec.c @@ -435,3 +435,4 @@ _hurd_exec_paths (task_t task, file_t file, free (env); return err; } +libc_hidden_def (_hurd_exec_paths) diff --git a/hurd/hurdinit.c b/hurd/hurdinit.c index cc018a43ce..6af1ddf610 100644 --- a/hurd/hurdinit.c +++ b/hurd/hurdinit.c @@ -110,6 +110,7 @@ _hurd_init (int flags, char **argv, assume the availability of the POSIX.1 services we provide. */ RUN_HOOK (_hurd_subinit, ()); } +libc_hidden_def (_hurd_init) #include diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index 101dd76be1..31e8d336e3 100644 --- a/hurd/hurdsig.c +++ b/hurd/hurdsig.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -120,6 +121,7 @@ _hurd_thread_sigstate (thread_t thread) __mutex_unlock (&_hurd_siglock); return ss; } +libc_hidden_def (_hurd_thread_sigstate) /* Signal delivery itself is on this page. */ @@ -1018,7 +1020,7 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss, || ss->actions[signo].sa_handler == SIG_IGN || ss->actions[signo].sa_handler == SIG_DFL)) { - mutex_unlock (&_hurd_siglock); + __mutex_unlock (&_hurd_siglock); goto deliver_pending; } __spin_unlock (&ss->lock); diff --git a/hurd/intern-fd.c b/hurd/intern-fd.c index 970800fd09..3b00824cc1 100644 --- a/hurd/intern-fd.c +++ b/hurd/intern-fd.c @@ -47,3 +47,4 @@ _hurd_intern_fd (io_t port, int flags, int dealloc) return fd; } +libc_hidden_def (_hurd_intern_fd) diff --git a/hurd/intr-msg.c b/hurd/intr-msg.c index 5495edc08d..2f83ac6ce7 100644 --- a/hurd/intr-msg.c +++ b/hurd/intr-msg.c @@ -422,3 +422,4 @@ _hurd_intr_rpc_mach_msg (mach_msg_header_t *msg, return err; } +libc_hidden_def (_hurd_intr_rpc_mach_msg) diff --git a/hurd/path-lookup.c b/hurd/path-lookup.c index 389a8ccd1b..5607d5809c 100644 --- a/hurd/path-lookup.c +++ b/hurd/path-lookup.c @@ -87,16 +87,16 @@ file_name_path_scan (const char *file_name, const char *path, if it is looked up using a prefix from PATH, *PREFIXED_NAME is set to malloced storage containing the prefixed name. */ error_t -hurd_file_name_path_lookup (error_t (*use_init_port) - (int which, error_t (*operate) (mach_port_t)), - file_t (*get_dtable_port) (int fd), - error_t (*lookup) - (file_t dir, const char *name, int flags, mode_t mode, - retry_type *do_retry, string_t retry_name, - mach_port_t *result), - const char *file_name, const char *path, - int flags, mode_t mode, - file_t *result, char **prefixed_name) +__hurd_file_name_path_lookup (error_t (*use_init_port) + (int which, error_t (*operate) (mach_port_t)), + file_t (*get_dtable_port) (int fd), + error_t (*lookup) + (file_t dir, const char *name, int flags, mode_t mode, + retry_type *do_retry, string_t retry_name, + mach_port_t *result), + const char *file_name, const char *path, + int flags, mode_t mode, + file_t *result, char **prefixed_name) { error_t scan_lookup (const char *name) { @@ -106,6 +106,7 @@ hurd_file_name_path_lookup (error_t (*use_init_port) } return file_name_path_scan (file_name, path, scan_lookup, prefixed_name); } +strong_alias (__hurd_file_name_path_lookup, hurd_file_name_path_lookup) file_t file_name_path_lookup (const char *file_name, const char *path, @@ -114,9 +115,9 @@ file_name_path_lookup (const char *file_name, const char *path, error_t err; file_t result; - err = hurd_file_name_path_lookup (&_hurd_ports_use, &__getdport, 0, - file_name, path, flags, mode, - &result, prefixed_name); + err = __hurd_file_name_path_lookup (&_hurd_ports_use, &__getdport, 0, + file_name, path, flags, mode, + &result, prefixed_name); return err ? (__hurd_fail (err), MACH_PORT_NULL) : result; } diff --git a/mach/errstring.c b/mach/errstring.c index c00b02c2a6..3e665e6f7a 100644 --- a/mach/errstring.c +++ b/mach/errstring.c @@ -59,6 +59,7 @@ mach_error_type(mach_error_t err) || sub >= errors[system].max_sub ) return( "(?/?)" ); return( errors[system].subsystem[sub].subsys_name ); } +libc_hidden_def (mach_error_type) boolean_t mach_error_full_diag = FALSE; diff --git a/mach/msg-destroy.c b/mach/msg-destroy.c index bc7dd558e9..7429ecbc2d 100644 --- a/mach/msg-destroy.c +++ b/mach/msg-destroy.c @@ -189,6 +189,7 @@ __mach_msg_destroy (mach_msg_header_t *msg) } weak_alias (__mach_msg_destroy, mach_msg_destroy) +libc_hidden_def (__mach_msg_destroy) static void mach_msg_destroy_port (mach_port_t port, mach_msg_type_name_t type) diff --git a/mach/mutex-init.c b/mach/mutex-init.c index 776fec5506..a8f238c722 100644 --- a/mach/mutex-init.c +++ b/mach/mutex-init.c @@ -24,3 +24,4 @@ __mutex_init (void *lock) { *(int *)lock = LLL_INITIALIZER; } +libc_hidden_def (__mutex_init) diff --git a/mach/spin-lock.c b/mach/spin-lock.c index 1b1e69c8d6..888eb9d708 100644 --- a/mach/spin-lock.c +++ b/mach/spin-lock.c @@ -3,7 +3,13 @@ #include "spin-lock.h" weak_alias (__spin_lock_init, spin_lock_init); +libc_hidden_def (__spin_lock_locked); weak_alias (__spin_lock_locked, spin_lock_locked); +libc_hidden_def (__spin_lock); weak_alias (__spin_lock, spin_lock); +libc_hidden_def (__spin_unlock); weak_alias (__spin_unlock, spin_unlock); +libc_hidden_def (__spin_try_lock); weak_alias (__spin_try_lock, spin_try_lock); +libc_hidden_def (__mutex_lock); +libc_hidden_def (__mutex_trylock); diff --git a/mach/spin-solid.c b/mach/spin-solid.c index 6612885167..db1bcd0750 100644 --- a/mach/spin-solid.c +++ b/mach/spin-solid.c @@ -26,3 +26,4 @@ __spin_lock_solid (spin_lock_t *lock) __swtch_pri (0); } weak_alias (__spin_lock_solid, spin_lock_solid); +libc_hidden_def (__spin_lock_solid) diff --git a/sysdeps/hurd/include/hurd.h b/sysdeps/hurd/include/hurd.h new file mode 100644 index 0000000000..f740e9de0f --- /dev/null +++ b/sysdeps/hurd/include/hurd.h @@ -0,0 +1,5 @@ +#ifndef _HURD_H +#include_next +libc_hidden_proto (_hurd_exec_paths) +libc_hidden_proto (_hurd_init) +#endif diff --git a/sysdeps/hurd/include/hurd/fd.h b/sysdeps/hurd/include/hurd/fd.h new file mode 100644 index 0000000000..b22f0c59f4 --- /dev/null +++ b/sysdeps/hurd/include/hurd/fd.h @@ -0,0 +1,4 @@ +#ifndef _HURD_FD_H +#include_next +libc_hidden_proto (_hurd_intern_fd) +#endif diff --git a/sysdeps/hurd/include/hurd/signal.h b/sysdeps/hurd/include/hurd/signal.h new file mode 100644 index 0000000000..fbd01bb80d --- /dev/null +++ b/sysdeps/hurd/include/hurd/signal.h @@ -0,0 +1,6 @@ +#ifndef _HURD_SIGNAL_H +#include_next +libc_hidden_proto (_hurd_exception2signal) +libc_hidden_proto (_hurd_intr_rpc_mach_msg) +libc_hidden_proto (_hurd_thread_sigstate) +#endif diff --git a/sysdeps/mach/hurd/getcwd.c b/sysdeps/mach/hurd/getcwd.c index f6ca3dd9e3..c30b7c507b 100644 --- a/sysdeps/mach/hurd/getcwd.c +++ b/sysdeps/mach/hurd/getcwd.c @@ -37,7 +37,7 @@ a slash to indicate that it is relative to some unknown root directory. */ char * -_hurd_canonicalize_directory_name_internal (file_t thisdir, +__hurd_canonicalize_directory_name_internal (file_t thisdir, char *buf, size_t size) { @@ -282,6 +282,7 @@ _hurd_canonicalize_directory_name_internal (file_t thisdir, cleanup (); return NULL; } +strong_alias (__hurd_canonicalize_directory_name_internal, _hurd_canonicalize_directory_name_internal) char * __canonicalize_directory_name_internal (const char *thisdir, char *buf, @@ -291,7 +292,7 @@ __canonicalize_directory_name_internal (const char *thisdir, char *buf, file_t port = __file_name_lookup (thisdir, 0, 0); if (port == MACH_PORT_NULL) return NULL; - result = _hurd_canonicalize_directory_name_internal (port, buf, size); + result = __hurd_canonicalize_directory_name_internal (port, buf, size); __mach_port_deallocate (__mach_task_self (), port); return result; } @@ -306,8 +307,8 @@ __getcwd (char *buf, size_t size) { char *cwd = __USEPORT (CWDIR, - _hurd_canonicalize_directory_name_internal (port, - buf, size)); + __hurd_canonicalize_directory_name_internal (port, + buf, size)); if (cwd && cwd[0] != '/') { /* `cwd' is an unknown root directory. */ diff --git a/sysdeps/mach/hurd/mig-reply.c b/sysdeps/mach/hurd/mig-reply.c index ddad12e070..8350354500 100644 --- a/sysdeps/mach/hurd/mig-reply.c +++ b/sysdeps/mach/hurd/mig-reply.c @@ -16,6 +16,7 @@ . */ #include +#include #include /* These functions are called by MiG-generated code. */ @@ -34,6 +35,7 @@ __mig_get_reply_port (void) return __hurd_local_reply_port; } weak_alias (__mig_get_reply_port, mig_get_reply_port) +libc_hidden_def (__mig_get_reply_port) /* Called by MiG to deallocate the reply port. */ void @@ -47,6 +49,7 @@ __mig_dealloc_reply_port (mach_port_t arg) MACH_PORT_RIGHT_RECEIVE, -1); } weak_alias (__mig_dealloc_reply_port, mig_dealloc_reply_port) +libc_hidden_def (__mig_dealloc_reply_port) /* Called by mig interfaces when done with a port. Used to provide the same interface as needed when a custom allocator is used. */ @@ -66,3 +69,4 @@ __mig_init (void *stack) /* Do nothing. */ } weak_alias (__mig_init, mig_init) +libc_hidden_def (__mig_init) diff --git a/sysdeps/mach/include/lock-intern.h b/sysdeps/mach/include/lock-intern.h new file mode 100644 index 0000000000..d0767ab37b --- /dev/null +++ b/sysdeps/mach/include/lock-intern.h @@ -0,0 +1,12 @@ +#ifndef _LOCK_INTERN_H +#include +libc_hidden_proto (__spin_lock_locked) +libc_hidden_proto (__spin_lock) +libc_hidden_proto (__spin_lock_solid) +libc_hidden_proto (__spin_unlock) +libc_hidden_proto (__spin_try_lock) +libc_hidden_proto (__mutex_init) +libc_hidden_proto (__mutex_lock) +libc_hidden_proto (__mutex_unlock) +libc_hidden_proto (__mutex_trylock) +#endif diff --git a/sysdeps/mach/include/mach.h b/sysdeps/mach/include/mach.h new file mode 100644 index 0000000000..1f77100b6e --- /dev/null +++ b/sysdeps/mach/include/mach.h @@ -0,0 +1,4 @@ +#ifndef _MACH_H +#include_next +libc_hidden_proto (__mach_msg_destroy) +#endif diff --git a/sysdeps/mach/include/mach/mig_support.h b/sysdeps/mach/include/mach/mig_support.h new file mode 100644 index 0000000000..7b9015d7e7 --- /dev/null +++ b/sysdeps/mach/include/mach/mig_support.h @@ -0,0 +1,6 @@ +#ifndef _MACH_MIG_SUPPORT_H +#include_next +libc_hidden_proto (__mig_get_reply_port) +libc_hidden_proto (__mig_dealloc_reply_port) +libc_hidden_proto (__mig_init) +#endif diff --git a/sysdeps/mach/include/mach_error.h b/sysdeps/mach/include/mach_error.h new file mode 100644 index 0000000000..91463eb672 --- /dev/null +++ b/sysdeps/mach/include/mach_error.h @@ -0,0 +1,4 @@ +#ifndef _MACH_ERROR_ +#include_next +libc_hidden_proto (mach_error_type) +#endif