Remove ARM __ASSUME_SIGFRAME_V2

Message ID Pine.LNX.4.64.1406210059310.1155@digraph.polyomino.org.uk
State Committed
Headers

Commit Message

Joseph Myers June 21, 2014, 12:59 a.m. UTC
  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.
  

Comments

Will Newton June 23, 2014, 1:21 p.m. UTC | #1
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
  

Patch

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