public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Use ucontext_t not struct ucontext in linux-unwind.h files
@ 2017-06-27 13:57 Joseph Myers
  2017-06-27 17:55 ` Joseph Myers
  2017-07-10  8:42 ` Andreas Schwab
  0 siblings, 2 replies; 6+ messages in thread
From: Joseph Myers @ 2017-06-27 13:57 UTC (permalink / raw)
  To: gcc-patches

Current glibc no longer gives the ucontext_t type the tag struct
ucontext, to conform with POSIX namespace rules.  This requires
various linux-unwind.h files in libgcc, that were previously using
struct ucontext, to be fixed to use ucontext_t instead.  This is
similar to the removal of the struct siginfo tag from siginfo_t some
years ago.

This patch changes those files to use ucontext_t instead.  As the
standard name that should be unconditionally safe, so this is not
restricted to architectures supported by glibc, or conditioned on the
glibc version.

Testing compilation together with current glibc with glibc's
build-many-glibcs.py.  OK to commit (mainline and active release
branches) if that passes?

2017-06-27  Joseph Myers  <joseph@codesourcery.com>

	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
	config/pa/linux-unwind.h (pa32_fallback_frame_state),
	config/riscv/linux-unwind.h (riscv_fallback_frame_state),
	config/sh/linux-unwind.h (sh_fallback_frame_state),
	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
	ucontext_t instead of struct ucontext.

Index: libgcc/config/aarch64/linux-unwind.h
===================================================================
--- libgcc/config/aarch64/linux-unwind.h	(revision 249686)
+++ libgcc/config/aarch64/linux-unwind.h	(working copy)
@@ -55,7 +55,7 @@ aarch64_fallback_frame_state (struct _Unwind_Conte
   struct rt_sigframe
   {
     siginfo_t info;
-    struct ucontext uc;
+    ucontext_t uc;
   };
 
   struct rt_sigframe *rt_;
Index: libgcc/config/alpha/linux-unwind.h
===================================================================
--- libgcc/config/alpha/linux-unwind.h	(revision 249686)
+++ libgcc/config/alpha/linux-unwind.h	(working copy)
@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context
     {
       struct rt_sigframe {
 	siginfo_t info;
-	struct ucontext uc;
+	ucontext_t uc;
       } *rt_ = context->cfa;
       sc = &rt_->uc.uc_mcontext;
     }
Index: libgcc/config/bfin/linux-unwind.h
===================================================================
--- libgcc/config/bfin/linux-unwind.h	(revision 249686)
+++ libgcc/config/bfin/linux-unwind.h	(working copy)
@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context
 	void *puc;
 	char retcode[8];
 	siginfo_t info;
-	struct ucontext uc;
+	ucontext_t uc;
       } *rt_ = context->cfa;
 
       /* The void * cast is necessary to avoid an aliasing warning.
Index: libgcc/config/i386/linux-unwind.h
===================================================================
--- libgcc/config/i386/linux-unwind.h	(revision 249686)
+++ libgcc/config/i386/linux-unwind.h	(working copy)
@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Contex
   if (*(unsigned char *)(pc+0) == 0x48
       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
     {
-      struct ucontext *uc_ = context->cfa;
+      ucontext_t *uc_ = context->cfa;
       /* The void * cast is necessary to avoid an aliasing warning.
          The aliasing warning is correct, but should not be a problem
          because it does not alias anything.  */
@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *
 	siginfo_t *pinfo;
 	void *puc;
 	siginfo_t info;
-	struct ucontext uc;
+	ucontext_t uc;
       } *rt_ = context->cfa;
       /* The void * cast is necessary to avoid an aliasing warning.
          The aliasing warning is correct, but should not be a problem
Index: libgcc/config/m68k/linux-unwind.h
===================================================================
--- libgcc/config/m68k/linux-unwind.h	(revision 249686)
+++ libgcc/config/m68k/linux-unwind.h	(working copy)
@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respect
 /* <sys/ucontext.h> is unfortunately broken right now.  */
 struct uw_ucontext {
 	unsigned long	  uc_flags;
-	struct ucontext  *uc_link;
+	ucontext_t	 *uc_link;
 	stack_t		  uc_stack;
 	mcontext_t	  uc_mcontext;
 	unsigned long	  uc_filler[80];
Index: libgcc/config/nios2/linux-unwind.h
===================================================================
--- libgcc/config/nios2/linux-unwind.h	(revision 249686)
+++ libgcc/config/nios2/linux-unwind.h	(working copy)
@@ -38,7 +38,7 @@ struct nios2_mcontext {
 
 struct nios2_ucontext {
   unsigned long uc_flags;
-  struct ucontext *uc_link;
+  ucontext_t *uc_link;
   stack_t uc_stack;
   struct nios2_mcontext uc_mcontext;
   sigset_t uc_sigmask;	/* mask last for extensibility */
Index: libgcc/config/pa/linux-unwind.h
===================================================================
--- libgcc/config/pa/linux-unwind.h	(revision 249686)
+++ libgcc/config/pa/linux-unwind.h	(working copy)
@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context
   struct sigcontext *sc;
   struct rt_sigframe {
     siginfo_t info;
-    struct ucontext uc;
+    ucontext_t uc;
   } *frame;
 
   /* rt_sigreturn trampoline:
Index: libgcc/config/riscv/linux-unwind.h
===================================================================
--- libgcc/config/riscv/linux-unwind.h	(revision 249686)
+++ libgcc/config/riscv/linux-unwind.h	(working copy)
@@ -42,7 +42,7 @@ riscv_fallback_frame_state (struct _Unwind_Context
   struct rt_sigframe
   {
     siginfo_t info;
-    struct ucontext uc;
+    ucontext_t uc;
   };
 
   struct rt_sigframe *rt_;
Index: libgcc/config/sh/linux-unwind.h
===================================================================
--- libgcc/config/sh/linux-unwind.h	(revision 249686)
+++ libgcc/config/sh/linux-unwind.h	(working copy)
@@ -82,7 +82,7 @@ sh_fallback_frame_state (struct _Unwind_Context *c
     {
       struct rt_sigframe {
 	siginfo_t info;
-	struct ucontext uc;
+	ucontext_t uc;
       } *rt_ = context->cfa;
       /* The void * cast is necessary to avoid an aliasing warning.
          The aliasing warning is correct, but should not be a problem
Index: libgcc/config/tilepro/linux-unwind.h
===================================================================
--- libgcc/config/tilepro/linux-unwind.h	(revision 249686)
+++ libgcc/config/tilepro/linux-unwind.h	(working copy)
@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context
   struct rt_sigframe {
     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
     siginfo_t info;
-    struct ucontext uc;
+    ucontext_t uc;
   } *rt_;
 
   /* Return if this is not a signal handler.  */
Index: libgcc/config/xtensa/linux-unwind.h
===================================================================
--- libgcc/config/xtensa/linux-unwind.h	(revision 249686)
+++ libgcc/config/xtensa/linux-unwind.h	(working copy)
@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Contex
 
   struct rt_sigframe {
     siginfo_t info;
-    struct ucontext uc;
+    ucontext_t uc;
   } *rt_;
 
   /* movi a2, __NR_rt_sigreturn; syscall */

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Use ucontext_t not struct ucontext in linux-unwind.h files
  2017-06-27 13:57 Use ucontext_t not struct ucontext in linux-unwind.h files Joseph Myers
@ 2017-06-27 17:55 ` Joseph Myers
  2017-06-28  7:31   ` Richard Biener
  2017-07-10  8:42 ` Andreas Schwab
  1 sibling, 1 reply; 6+ messages in thread
From: Joseph Myers @ 2017-06-27 17:55 UTC (permalink / raw)
  To: gcc-patches

On Tue, 27 Jun 2017, Joseph Myers wrote:

> Current glibc no longer gives the ucontext_t type the tag struct
> ucontext, to conform with POSIX namespace rules.  This requires
> various linux-unwind.h files in libgcc, that were previously using
> struct ucontext, to be fixed to use ucontext_t instead.  This is
> similar to the removal of the struct siginfo tag from siginfo_t some
> years ago.
> 
> This patch changes those files to use ucontext_t instead.  As the
> standard name that should be unconditionally safe, so this is not
> restricted to architectures supported by glibc, or conditioned on the
> glibc version.
> 
> Testing compilation together with current glibc with glibc's
> build-many-glibcs.py.  OK to commit (mainline and active release
> branches) if that passes?

That compilation testing has now passed (together with a couple of glibc 
patches, now committed, to fix the build with -Wmultistatement-macros).

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Use ucontext_t not struct ucontext in linux-unwind.h files
  2017-06-27 17:55 ` Joseph Myers
@ 2017-06-28  7:31   ` Richard Biener
  0 siblings, 0 replies; 6+ messages in thread
From: Richard Biener @ 2017-06-28  7:31 UTC (permalink / raw)
  To: Joseph Myers; +Cc: GCC Patches

On Tue, Jun 27, 2017 at 7:54 PM, Joseph Myers <joseph@codesourcery.com> wrote:
> On Tue, 27 Jun 2017, Joseph Myers wrote:
>
>> Current glibc no longer gives the ucontext_t type the tag struct
>> ucontext, to conform with POSIX namespace rules.  This requires
>> various linux-unwind.h files in libgcc, that were previously using
>> struct ucontext, to be fixed to use ucontext_t instead.  This is
>> similar to the removal of the struct siginfo tag from siginfo_t some
>> years ago.
>>
>> This patch changes those files to use ucontext_t instead.  As the
>> standard name that should be unconditionally safe, so this is not
>> restricted to architectures supported by glibc, or conditioned on the
>> glibc version.
>>
>> Testing compilation together with current glibc with glibc's
>> build-many-glibcs.py.  OK to commit (mainline and active release
>> branches) if that passes?

Ok to commit to trunk.  Please wait for a while before backporting to catch
non-glibc and ancient glibc issues.

Thanks,
Richard.

> That compilation testing has now passed (together with a couple of glibc
> patches, now committed, to fix the build with -Wmultistatement-macros).
>
> --
> Joseph S. Myers
> joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Use ucontext_t not struct ucontext in linux-unwind.h files
  2017-06-27 13:57 Use ucontext_t not struct ucontext in linux-unwind.h files Joseph Myers
  2017-06-27 17:55 ` Joseph Myers
@ 2017-07-10  8:42 ` Andreas Schwab
  2017-07-10 10:58   ` Joseph Myers
  1 sibling, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2017-07-10  8:42 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches

On Jun 27 2017, Joseph Myers <joseph@codesourcery.com> wrote:

> Testing compilation together with current glibc with glibc's
> build-many-glibcs.py.  OK to commit (mainline and active release
> branches) if that passes?

This still doesn't work on the gcc-6-branch:

In file included from ../../../libjava/prims.cc:26:0:
../../../libjava/prims.cc: In function 'void _Jv_catch_fpe(int, siginfo_t*, void*)':
./include/java-signal.h:33:26: error: invalid use of incomplete type 'struct _Jv_catch_fpe(int, siginfo_t*, void*)::ucontext'
   gregset_t &_gregs = _uc->uc_mcontext.gregs;    \
                          ^
../../../libjava/prims.cc:192:3: note: in expansion of macro 'HANDLE_DIVIDE_OVERFLOW'
   HANDLE_DIVIDE_OVERFLOW;
   ^~~~~~~~~~~~~~~~~~~~~~
./include/java-signal.h:32:10: note: forward declaration of 'struct _Jv_catch_fpe(int, siginfo_t*, void*)::ucontext'
   struct ucontext *_uc = (struct ucontext *)_p;    \
          ^
../../../libjava/prims.cc:192:3: note: in expansion of macro 'HANDLE_DIVIDE_OVERFLOW'
   HANDLE_DIVIDE_OVERFLOW;
   ^~~~~~~~~~~~~~~~~~~~~~
make[3]: *** [Makefile:9968: prims.lo] Error 1

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Use ucontext_t not struct ucontext in linux-unwind.h files
  2017-07-10  8:42 ` Andreas Schwab
@ 2017-07-10 10:58   ` Joseph Myers
  2017-07-10 11:02     ` Andreas Schwab
  0 siblings, 1 reply; 6+ messages in thread
From: Joseph Myers @ 2017-07-10 10:58 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gcc-patches

On Mon, 10 Jul 2017, Andreas Schwab wrote:

> On Jun 27 2017, Joseph Myers <joseph@codesourcery.com> wrote:
> 
> > Testing compilation together with current glibc with glibc's
> > build-many-glibcs.py.  OK to commit (mainline and active release
> > branches) if that passes?
> 
> This still doesn't work on the gcc-6-branch:

That seems like an issue with a different header, outside the scope of my 
patch (but for which it would be natural to apply similar changes to GCC 5 
and 6 branches).

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Use ucontext_t not struct ucontext in linux-unwind.h files
  2017-07-10 10:58   ` Joseph Myers
@ 2017-07-10 11:02     ` Andreas Schwab
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas Schwab @ 2017-07-10 11:02 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches

On Jul 10 2017, Joseph Myers <joseph@codesourcery.com> wrote:

> On Mon, 10 Jul 2017, Andreas Schwab wrote:
>
>> On Jun 27 2017, Joseph Myers <joseph@codesourcery.com> wrote:
>> 
>> > Testing compilation together with current glibc with glibc's
>> > build-many-glibcs.py.  OK to commit (mainline and active release
>> > branches) if that passes?
>> 
>> This still doesn't work on the gcc-6-branch:
>
> That seems like an issue with a different header, outside the scope of my 
> patch

It's the same error.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-07-10 11:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-27 13:57 Use ucontext_t not struct ucontext in linux-unwind.h files Joseph Myers
2017-06-27 17:55 ` Joseph Myers
2017-06-28  7:31   ` Richard Biener
2017-07-10  8:42 ` Andreas Schwab
2017-07-10 10:58   ` Joseph Myers
2017-07-10 11:02     ` Andreas Schwab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).