From 20365a315b4e1aaa786e3b470a709b65406395e7 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Fri, 27 Jul 2018 11:18:29 +0200 Subject: hurd: Fix some ld.so symbol override from libc ld.so symbols to be overriden by libc need to be extern to really get overriden. More fixes are needed to avoid the hidden attribute. * sysdeps/mach/hurd/Versions (libc): Make __access and __access_noerrno external so they can override the ld symbols. (ld): Make __access, __read, __sbrk, __strtoul_internal, __write, __writev, __open64, __access_noerrno extern so they can be overrided. * sysdeps/mach/hurd/i386/libc.abilist: Update accordingly. * sysdeps/mach/hurd/i386/ld.abilist: Update accordingly. --- ChangeLog | 9 +++++++++ sysdeps/mach/hurd/Versions | 19 ++++++++++++++----- sysdeps/mach/hurd/dl-sysdep.c | 5 ++++- sysdeps/mach/hurd/i386/ld.abilist | 4 ++++ sysdeps/mach/hurd/i386/libc.abilist | 1 + sysdeps/mach/hurd/i386/localplt.data | 4 ++-- 6 files changed, 34 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5556e82..61edfc5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2018-07-27 Samuel Thibault + + * sysdeps/mach/hurd/Versions (libc): Make __access and + __access_noerrno external so they can override the ld symbols. + (ld): Make __access, __read, __sbrk, __strtoul_internal, __write, + __writev, __open64, __access_noerrno extern so they can be overrided. + * sysdeps/mach/hurd/i386/libc.abilist: Update accordingly. + * sysdeps/mach/hurd/i386/ld.abilist: Update accordingly. + 2018-07-26 Carlos O'Donell * po/libc.pot: Regenerate. diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions index 7cab8e8..f69d5fe 100644 --- a/sysdeps/mach/hurd/Versions +++ b/sysdeps/mach/hurd/Versions @@ -1,11 +1,15 @@ libc { GLIBC_2.0 { # functions with a weak definition in the dynamic linker - __getcwd; __mmap; + __access; __getcwd; __mmap; + } + GLIBC_2.2.6 { + # functions with a weak definition in the dynamic linker + __writev; } GLIBC_PRIVATE { # Functions shared with the dynamic linker - __libc_read; __libc_write; __libc_lseek64; + __access_noerrno; __libc_read; __libc_write; __libc_lseek64; __libc_lock_self0; _dl_init_first; @@ -18,11 +22,16 @@ ld { __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; # functions that must be shared with libc - __close; __getcwd; __getpid; - __mmap; __open; __xstat64; __fxstat64; + __access; __close; __getcwd; __getpid; + __mmap; __open; __read; __sbrk; __strtoul_internal; + __write; __writev; __xstat64; __fxstat64; _exit; _hurd_intr_rpc_mach_msg; abort; } + GLIBC_2.2 { + # functions that must be shared with libc + __open64; + } GLIBC_2.2.6 { # this also must be shared with libc. __errno_location; @@ -31,7 +40,7 @@ ld { _dl_init_first; # functions that must be shared with libc - __libc_read; __libc_write; __libc_lseek64; + __access_noerrno; __libc_read; __libc_write; __libc_lseek64; __libc_lock_self0; } } diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index ec55c47..b72913d 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -275,7 +275,10 @@ _dl_sysdep_start_cleanup (void) /* Minimal open/close/mmap implementation sufficient for initial loading of shared libraries. These are weak definitions so that when the dynamic linker re-relocates itself to be user-visible (for -ldl), - it will get the user's definition (i.e. usually libc's). */ + it will get the user's definition (i.e. usually libc's). + + They also need to be set in the ld section of sysdeps/mach/hurd/Versions, to + be overridable, and in libc.abilist and ld.abilist to be checked. */ /* This macro checks that the function does not get renamed to be hidden: we do need these to be overridable by libc's. */ diff --git a/sysdeps/mach/hurd/i386/ld.abilist b/sysdeps/mach/hurd/i386/ld.abilist index 1437133..3a89b5a 100644 --- a/sysdeps/mach/hurd/i386/ld.abilist +++ b/sysdeps/mach/hurd/i386/ld.abilist @@ -5,6 +5,10 @@ GLIBC_2.2.6 __getpid F GLIBC_2.2.6 __libc_stack_end D 0x4 GLIBC_2.2.6 __mmap F GLIBC_2.2.6 __open F +GLIBC_2.2.6 __open64 F +GLIBC_2.2.6 __strtoul_internal F +GLIBC_2.2.6 __write F +GLIBC_2.2.6 __writev F GLIBC_2.2.6 __xstat64 F GLIBC_2.2.6 _dl_mcount F GLIBC_2.2.6 _hurd_intr_rpc_mach_msg F diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index 9a3aac7..64586d8 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -543,6 +543,7 @@ GLIBC_2.2.6 __wctrans_l F GLIBC_2.2.6 __wctype_l F GLIBC_2.2.6 __woverflow F GLIBC_2.2.6 __write F +GLIBC_2.2.6 __writev F GLIBC_2.2.6 __wuflow F GLIBC_2.2.6 __wunderflow F GLIBC_2.2.6 __xmknod F diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data index efcf4e4..69d3a25 100644 --- a/sysdeps/mach/hurd/i386/localplt.data +++ b/sysdeps/mach/hurd/i386/localplt.data @@ -27,7 +27,7 @@ ld.so: __open64 ? ld.so: __close ld.so: __read ? ld.so: __write ? -#ld.so: __writev +ld.so: __writev ld.so: __libc_lseek64 ld.so: __mmap ld.so: __fxstat64 @@ -37,7 +37,7 @@ ld.so: __xstat64 ld.so: __getpid #ld.so: __getcwd #ld.so: __sbrk -#ld.so: __strtoul_internal +ld.so: __strtoul_internal #ld.so: _exit ld.so: abort ld.so: _hurd_intr_rpc_mach_msg -- cgit v1.1