This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Remove ARM __ASSUME_SIGFRAME_V2


On 21 June 2014 01:59, Joseph S. Myers <joseph@codesourcery.com> wrote:
> This patch removes ARM __ASSUME_SIGFRAME_V2 now that the
> 2.6.18-and-later signal frame layout can be assumed, renaming the
> affected functions accordingly now only one version of them is needed
> in glibc.  (sigrestorer.S did not in fact include <kernel-features.h>
> and it appears that, unlike other such cases, it didn't get the header
> indirectly, so the v1 functions would have been compiled in even when
> sigaction.c didn't reference them.)
>
> (alpha and hppa also have architecture-specific __ASSUME_* macros that
> should now be removed: __ASSUME_FDATASYNC and __ASSUME_LWS_CAS
> respectively.  I don't have any plans to do anything on that myself.)
>
> Tested on ARM and committed.
>
> 2014-06-21  Joseph Myers  <joseph@codesourcery.com>
>
>         * sysdeps/unix/sysv/linux/arm/kernel-features.h
>         (__ASSUME_SIGFRAME_V2): Remove macro.
>         * sysdeps/unix/sysv/linux/arm/sigrestorer.S: Update comment.
>         [!__ASSUME_SIGFRAME_V2]: Remove conditional code.
>         (__default_sa_restorer_v2): Rename to __default_sa_restorer.
>         (__default_rt_sa_restorer_v2): Rename to __default_rt_sa_restorer.
>         * sysdeps/unix/sysv/linux/arm/sigaction.c (__default_sa_restorer):
>         Declare as function.  Remove conditional macro definitions.
>         (__default_rt_sa_restorer): Likewise.
>         (__default_sa_restorer_v1): Remove declaration.
>         (__default_sa_restorer_v2): Likewise.
>         (__default_rt_sa_restorer_v1): Likewise.
>         (__default_rt_sa_restorer_v2): Likewise.
>         * sysdeps/unix/sysv/linux/arm/Versions (GLIBC_PRIVATE): Remove
>         __default_sa_restorer_v1, __default_rt_sa_restorer_v1,
>         __default_sa_restorer_v2 and __default_rt_sa_restorer_v2.

This looks ok to me.

> diff --git a/sysdeps/unix/sysv/linux/arm/Versions b/sysdeps/unix/sysv/linux/arm/Versions
> index b0e9a4c..a251b0f 100644
> --- a/sysdeps/unix/sysv/linux/arm/Versions
> +++ b/sysdeps/unix/sysv/linux/arm/Versions
> @@ -10,7 +10,5 @@ libc {
>    GLIBC_PRIVATE {
>      # A copy of sigaction lives in libpthread, and needs these.
>      __default_sa_restorer; __default_rt_sa_restorer;
> -    __default_sa_restorer_v1; __default_rt_sa_restorer_v1;
> -    __default_sa_restorer_v2; __default_rt_sa_restorer_v2;
>    }
>  }
> diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
> index 354f2ca..e755741 100644
> --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
> @@ -17,9 +17,6 @@
>     License along with the GNU C Library.  If not, see
>     <http://www.gnu.org/licenses/>.  */
>
> -/* The signal frame layout changed in 2.6.18.  */
> -#define __ASSUME_SIGFRAME_V2   1
> -
>  /* Support for the recvmmsg syscall was added in 2.6.33.  */
>  #if __LINUX_KERNEL_VERSION >= 0x020621
>  # define __ASSUME_RECVMMSG_SYSCALL     1
> diff --git a/sysdeps/unix/sysv/linux/arm/sigaction.c b/sysdeps/unix/sysv/linux/arm/sigaction.c
> index 21df885..e1d87cb 100644
> --- a/sysdeps/unix/sysv/linux/arm/sigaction.c
> +++ b/sysdeps/unix/sysv/linux/arm/sigaction.c
> @@ -30,22 +30,8 @@
>
>  #define SA_RESTORER    0x04000000
>
> -extern void __default_sa_restorer_v1(void);
> -extern void __default_sa_restorer_v2(void);
> -extern void __default_rt_sa_restorer_v1(void);
> -extern void __default_rt_sa_restorer_v2(void);
> -#ifdef __ASSUME_SIGFRAME_V2
> -# define __default_sa_restorer __default_sa_restorer_v2
> -# define __default_rt_sa_restorer __default_rt_sa_restorer_v2
> -#else
> -# include <ldsodefs.h>
> -# define __default_sa_restorer (GLRO(dl_osversion) >= 0x020612 \
> -                                ? __default_sa_restorer_v2     \
> -                                : __default_sa_restorer_v1)
> -# define __default_rt_sa_restorer (GLRO(dl_osversion) >= 0x020612      \
> -                                   ? __default_rt_sa_restorer_v2       \
> -                                   : __default_rt_sa_restorer_v1)
> -#endif
> +extern void __default_sa_restorer (void);
> +extern void __default_rt_sa_restorer (void);
>
>  /* When RT signals are in use we need to use a different return stub.  */
>  #define choose_restorer(flags)                                 \
> diff --git a/sysdeps/unix/sysv/linux/arm/sigrestorer.S b/sysdeps/unix/sysv/linux/arm/sigrestorer.S
> index 566c04a..e1698d3 100644
> --- a/sysdeps/unix/sysv/linux/arm/sigrestorer.S
> +++ b/sysdeps/unix/sysv/linux/arm/sigrestorer.S
> @@ -28,10 +28,7 @@
>
>     Start the unwind tables at least one instruction before the signal
>     trampoline, because the unwinder will assume we are returning after
> -   a call site.
> -
> -   Because the signal frame layout changed in 2.6.18, we provide two
> -   copies of these functions with different unwind information.  */
> +   a call site.  */
>
>  /* Used in ENTRY.  */
>  #undef cfi_startproc
> @@ -60,58 +57,28 @@
>         cfi_offset (r14, OFFSET + 14 * 4); \
>         cfi_offset (r15, OFFSET + 15 * 4)
>
> -#ifndef __ASSUME_SIGFRAME_V2
> -#define OFFSET 12
> -       .fnstart
> -       .save {r0-r15}
> -       .pad #OFFSET
> -       nop
> -ENTRY(__default_sa_restorer_v1)
> -       CFI
> -       mov     r7, $SYS_ify(sigreturn)
> -       swi     0x0
> -       .fnend
> -END(__default_sa_restorer_v1)
> -#undef OFFSET
> -#endif /* __ASSUME_SIGFRAME_V2 */
> -
>  #define OFFSET 32
>         .fnstart
>         .save {r0-r15}
>         .pad #OFFSET
>         nop
> -ENTRY(__default_sa_restorer_v2)
> +ENTRY(__default_sa_restorer)
>         CFI
>         mov     r7, $SYS_ify(sigreturn)
>         swi     0x0
>         .fnend
> -END(__default_sa_restorer_v2)
> -#undef OFFSET
> -
> -#ifndef __ASSUME_SIGFRAME_V2
> -#define OFFSET 168
> -       .fnstart
> -       .save {r0-r15}
> -       .pad #OFFSET
> -       nop
> -ENTRY(__default_rt_sa_restorer_v1)
> -       CFI
> -       mov     r7, $SYS_ify(rt_sigreturn)
> -       swi     0x0
> -       .fnend
> -END(__default_rt_sa_restorer_v1)
> +END(__default_sa_restorer)
>  #undef OFFSET
> -#endif /* __ASSUME_SIGFRAME_V2 */
>
>  #define OFFSET 160
>         .fnstart
>         .save {r0-r15}
>         .pad #OFFSET
>         nop
> -ENTRY(__default_rt_sa_restorer_v2)
> +ENTRY(__default_rt_sa_restorer)
>         CFI
>         mov     r7, $SYS_ify(rt_sigreturn)
>         swi     0x0
>         .fnend
> -END(__default_rt_sa_restorer_v2)
> +END(__default_rt_sa_restorer)
>  #undef OFFSET
>
> --
> Joseph S. Myers
> joseph@codesourcery.com



-- 
Will Newton
Toolchain Working Group, Linaro


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]