This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Remove ARM __ASSUME_SIGFRAME_V2
- From: Will Newton <will dot newton at linaro dot org>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: libc-alpha <libc-alpha at sourceware dot org>
- Date: Mon, 23 Jun 2014 14:21:20 +0100
- Subject: Re: Remove ARM __ASSUME_SIGFRAME_V2
- Authentication-results: sourceware.org; auth=none
- References: <Pine dot LNX dot 4 dot 64 dot 1406210059310 dot 1155 at digraph dot polyomino dot org dot uk>
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