This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Fix hppa local PLT entries for sigprocmask (bug 18124)
- From: Carlos O'Donell <carlos at redhat dot com>
- To: Joseph Myers <joseph at codesourcery dot com>, libc-alpha at sourceware dot org
- Date: Thu, 15 Feb 2018 11:42:38 -0800
- Subject: Re: Fix hppa local PLT entries for sigprocmask (bug 18124)
- Authentication-results: sourceware.org; auth=none
- References: <alpine.DEB.2.20.1802151656150.20178@digraph.polyomino.org.uk>
On 02/15/2018 08:56 AM, Joseph Myers wrote:
> When adding/updating localplt.data for various architectures to get
> the compilation tests passing everywhere, I generally made it reflect
> the existing state of what local PLT entries were actually seen,
> rather than an ideal state with as few as possible such entries,
> mainly for functions that are intended to be interposable.
>
> This patch eliminates some local PLT entries for hppa by using
> __sigprocmask instead of sigprocmask in getcontext and setcontext.
> The specific case of sigprocmask called by setcontext is the third of
> four items in bug 18124 (the other three have already been fixed for
> 2.26 or earlier releases). Note that hppa-specific localplt.data
> entries for __sigsetjmp, _IO_funlockfile and __errno_location remain,
> but the causes / fixes are less immediately obvious from source
> inspection.
>
> Tested (compilation tests only) with build-many-glibcs.py for
> hppa-linux-gnu.
>
> 2018-02-15 Joseph Myers <joseph@codesourcery.com>
>
> [BZ #18124]
> * sysdeps/hppa/bsd-setjmp.S: Include <sysdep.h>.
> (setjmp): Use HIDDEN_JUMPTARGET with __sigsetjmp.
> * sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext): Call
> __sigprocmask instead of sigprocmask.
> * sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext):
> Likewise.
> * sysdeps/unix/sysv/linux/hppa/localplt.data: Remove entries for
> __sigsetjmp and sigprocmask.
LGTM.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> diff --git a/sysdeps/unix/sysv/linux/hppa/getcontext.S b/sysdeps/unix/sysv/linux/hppa/getcontext.S
> index 4261f60..b8f978f 100644
> --- a/sysdeps/unix/sysv/linux/hppa/getcontext.S
> +++ b/sysdeps/unix/sysv/linux/hppa/getcontext.S
> @@ -160,7 +160,7 @@ ENTRY(__getcontext)
> /* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask); */
> ldo oSIGMASK(%r26), %r24
> copy %r0, %r25
> - bl sigprocmask, %r2
> + bl __sigprocmask, %r2
> ldi SIG_BLOCK, %r26
>
> /* Epilogue */
> diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data b/sysdeps/unix/sysv/linux/hppa/localplt.data
> index 3279c0a..5f3475d 100644
> --- a/sysdeps/unix/sysv/linux/hppa/localplt.data
> +++ b/sysdeps/unix/sysv/linux/hppa/localplt.data
> @@ -8,7 +8,6 @@ libc.so: memalign
> libc.so: realloc
> libc.so: __sigsetjmp
> libc.so: _IO_funlockfile
> -libc.so: sigprocmask
> libc.so: __errno_location
> libm.so: matherr
> libpthread.so: __errno_location
> diff --git a/sysdeps/unix/sysv/linux/hppa/setcontext.S b/sysdeps/unix/sysv/linux/hppa/setcontext.S
> index 8dc0ecf..d5ebc7c 100644
> --- a/sysdeps/unix/sysv/linux/hppa/setcontext.S
> +++ b/sysdeps/unix/sysv/linux/hppa/setcontext.S
> @@ -43,7 +43,7 @@ ENTRY(__setcontext)
> /* sigprocmask(SIG_BLOCK, &ucp->uc_sigmask, NULL); */
> copy %r0, %r24
> ldo oSIGMASK(%r3), %r25
> - bl sigprocmask, %r2
> + bl __sigprocmask, %r2
> ldi SIG_SETMASK, %r26
>
> comib,<>,n 0,%ret0,.Lerror
>
--
Cheers,
Carlos.