about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-08-09 17:51:26 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-08-09 17:51:26 +0000
commit3d452dabd1f063bdf251825a3ba5d68461921def (patch)
treeaa689bf631d6f15121ef98d8afa630067013e980
parent3016149819268b14660f791b971910ccc2cc13e5 (diff)
downloadglibc-3d452dabd1f063bdf251825a3ba5d68461921def.tar.gz
glibc-3d452dabd1f063bdf251825a3ba5d68461921def.tar.xz
glibc-3d452dabd1f063bdf251825a3ba5d68461921def.zip
Fix uc_* namespace (bug 21457).
The standard members of ucontext_t, in all standard versions with that
type, are uc_link, uc_sigmask, uc_stack and uc_mcontext.

The uc_* namespace is mostly reserved for additions to the structure.
However, in XPG4.2, it's only reserved when <ucontext.h> is included,
not when <signal.h> is included, while <signal.h> is required to
define ucontext_t (but not allowed to make visible other symbols from
<ucontext.h>).  Thus, nonstandard members should avoid uc_* names.
Some already do use __uc_*, but others don't; most architectures (all
except ia64, I think) have a member uc_flags and some have additional
members beyond that.

This patch makes nonstandard members have an __ prefix unless
__USE_MISC is defined.  Members whose names indicate they are solely
padding / reserved for future use are renamed unconditionally to use
the __glibc_reserved1 naming convention.

This is part of the preparation for a revised version of the
mcontext_t / sigcontext patch to be able to eliminate all 13 of the
miscellaneous XFAILs in conform/Makefile, rather than only 11 of them
as at present (at least one further fix on top of this one will be
needed for that as well).

Tested for x86_64, and with build-many-glibcs.py.

	[BZ #21457]
	* sysdeps/arm/sys/ucontext.h (__ctx): Move undefine further down.
	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
	__glibc_reserved1.
	* sysdeps/generic/sys/ucontext.h (__ctx): New macro.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/i386/sys/ucontext.h (__ctx): Move undefine further down.
	(__ctxt): Likewise.
	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
	__glibc_reserved1.
	* sysdeps/m68k/sys/ucontext.h (__ctx): Move undefine further down.
	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
	__glibc_reserved1.
	* sysdeps/mips/sys/ucontext.h (__ctx): Move undefine further down.
	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
	__glibc_reserved1.
	* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h (__ctx): New
	macro.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (__ctx): New macro.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/arm/sys/ucontext.h (__ctx): New macro.
	(ucontext_t): Use __ctx with uc_flags and uc_regspace.
	* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (__ctx): New macro.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (__ctx): Move
	undefine further down.
	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
	__glibc_reserved1.
	* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (__ctx): Move
	undefine further down.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (__ctx): Move
	undefine further down.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (ucontext_t): Use
	__ctx with uc_flags, uc_regs_ptr, uc_regs and uc_reg_space.
	Rename uc_pad to __glibc_reserved1.
	* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (__ctx): Move
	undefine further down.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (__ctx): Move undefine
	further down.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Use
	__ctx with uc_flags.
	* sysdeps/unix/sysv/linux/tile/sys/ucontext.h (__ctx): New macro.
	(ucontext_t): Use __ctx with uc_flags.
	* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (ucontext_t): Use
	__ctx with uc_flags.
-rw-r--r--ChangeLog53
-rw-r--r--sysdeps/arm/sys/ucontext.h8
-rw-r--r--sysdeps/generic/sys/ucontext.h10
-rw-r--r--sysdeps/i386/sys/ucontext.h10
-rw-r--r--sysdeps/m68k/sys/ucontext.h8
-rw-r--r--sysdeps/mips/sys/ucontext.h10
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sys/ucontext.h10
-rw-r--r--sysdeps/unix/sysv/linux/arm/sys/ucontext.h12
-rw-r--r--sysdeps/unix/sysv/linux/hppa/sys/ucontext.h10
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sys/ucontext.h8
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/ucontext.h6
-rw-r--r--sysdeps/unix/sysv/linux/nios2/sys/ucontext.h6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h11
-rw-r--r--sysdeps/unix/sysv/linux/s390/sys/ucontext.h6
-rw-r--r--sysdeps/unix/sysv/linux/sh/sys/ucontext.h6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sys/ucontext.h4
-rw-r--r--sysdeps/unix/sysv/linux/tile/sys/ucontext.h10
-rw-r--r--sysdeps/unix/sysv/linux/x86/sys/ucontext.h4
19 files changed, 152 insertions, 50 deletions
diff --git a/ChangeLog b/ChangeLog
index 3c205310e1..f636bc0c6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,56 @@
+2017-08-09  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #21457]
+	* sysdeps/arm/sys/ucontext.h (__ctx): Move undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+	__glibc_reserved1.
+	* sysdeps/generic/sys/ucontext.h (__ctx): New macro.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/i386/sys/ucontext.h (__ctx): Move undefine further down.
+	(__ctxt): Likewise.
+	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+	__glibc_reserved1.
+	* sysdeps/m68k/sys/ucontext.h (__ctx): Move undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+	__glibc_reserved1.
+	* sysdeps/mips/sys/ucontext.h (__ctx): Move undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+	__glibc_reserved1.
+	* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h (__ctx): New
+	macro.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (__ctx): New macro.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/arm/sys/ucontext.h (__ctx): New macro.
+	(ucontext_t): Use __ctx with uc_flags and uc_regspace.
+	* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (__ctx): New macro.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (__ctx): Move
+	undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+	__glibc_reserved1.
+	* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (__ctx): Move
+	undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (__ctx): Move
+	undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (ucontext_t): Use
+	__ctx with uc_flags, uc_regs_ptr, uc_regs and uc_reg_space.
+	Rename uc_pad to __glibc_reserved1.
+	* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (__ctx): Move
+	undefine further down.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (__ctx): Move undefine
+	further down.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Use
+	__ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/tile/sys/ucontext.h (__ctx): New macro.
+	(ucontext_t): Use __ctx with uc_flags.
+	* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (ucontext_t): Use
+	__ctx with uc_flags.
+
 2017-08-09  Florian Weimer  <fweimer@redhat.com>
 
 	[BZ #21932]
diff --git a/sysdeps/arm/sys/ucontext.h b/sysdeps/arm/sys/ucontext.h
index 464a353a51..da749a96da 100644
--- a/sysdeps/arm/sys/ucontext.h
+++ b/sysdeps/arm/sys/ucontext.h
@@ -95,17 +95,17 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[5];
+    long int __glibc_reserved1[5];
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/generic/sys/ucontext.h b/sysdeps/generic/sys/ucontext.h
index e4679d3d94..ec5ab943cc 100644
--- a/sysdeps/generic/sys/ucontext.h
+++ b/sysdeps/generic/sys/ucontext.h
@@ -31,14 +31,22 @@
 
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/i386/sys/ucontext.h b/sysdeps/i386/sys/ucontext.h
index be8c7e5408..27f5e48559 100644
--- a/sysdeps/i386/sys/ucontext.h
+++ b/sysdeps/i386/sys/ucontext.h
@@ -122,18 +122,18 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-#undef __ctxt
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[5];
+    long int __glibc_reserved1[5];
   } ucontext_t;
 
+#undef __ctx
+#undef __ctxt
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/m68k/sys/ucontext.h b/sysdeps/m68k/sys/ucontext.h
index 00c4af417a..9d2b2c6c2c 100644
--- a/sysdeps/m68k/sys/ucontext.h
+++ b/sysdeps/m68k/sys/ucontext.h
@@ -106,8 +106,6 @@ typedef struct
   gregset_t __ctx(gregs);
 } mcontext_t;
 
-#undef __ctx
-
 #ifdef __USE_MISC
 # define MCONTEXT_VERSION 1
 #endif
@@ -115,12 +113,14 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
-  unsigned long int uc_flags;
+  unsigned long int __ctx(uc_flags);
   struct ucontext_t *uc_link;
   sigset_t uc_sigmask;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  long int uc_filler[201];
+  long int __glibc_reserved1[201];
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/mips/sys/ucontext.h b/sysdeps/mips/sys/ucontext.h
index d69656b5dc..8248f5935d 100644
--- a/sysdeps/mips/sys/ucontext.h
+++ b/sysdeps/mips/sys/ucontext.h
@@ -156,21 +156,21 @@ typedef struct
   fpregset_t __ctx(fpregs);
 } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
 #if _MIPS_SIM == _ABIO32
-  unsigned long int uc_flags;
+  unsigned long int __ctx(uc_flags);
 #else
-  __uint64_t uc_flags;
+  __uint64_t __ctx(uc_flags);
 #endif
   struct ucontext_t *uc_link;
   sigset_t uc_sigmask;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  int uc_filler[48];
+  int __glibc_reserved1[48];
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
index 4f602fc166..62ba382f0d 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
@@ -46,14 +46,22 @@ typedef elf_fpregset_t	fpregset_t;
    during non-RT signal handlers).  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     sigset_t uc_sigmask;
     mcontext_t uc_mcontext;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
index bf95205140..af20177556 100644
--- a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
@@ -53,10 +53,16 @@ typedef fpreg_t fpregset_t[__NFPREG];
 /* A machine context is exactly a sigcontext.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     unsigned long __uc_osf_sigmask;
     stack_t uc_stack;
@@ -64,4 +70,6 @@ typedef struct ucontext_t
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
index 1083d66943..2abceef2a4 100644
--- a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
@@ -100,15 +100,23 @@ typedef struct _libc_fpstate fpregset_t;
    during non-RT signal handlers).  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
-    unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
+    unsigned long __ctx(uc_regspace)[128] __attribute__((__aligned__(8)));
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
index 2fd7e911f7..91b7b16fde 100644
--- a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
@@ -54,14 +54,22 @@ typedef struct fpregset
 /* Context to describe whole processor state.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
index 1f807b59aa..3d3e8d4b79 100644
--- a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
@@ -111,8 +111,6 @@ typedef struct
   fpregset_t __ctx(fpregs);
 } mcontext_t;
 
-#undef __ctx
-
 #ifdef __USE_MISC
 # define MCONTEXT_VERSION 2
 #endif
@@ -120,12 +118,14 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
-  unsigned long uc_flags;
+  unsigned long __ctx(uc_flags);
   struct ucontext_t *uc_link;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  unsigned long uc_filler[80];
+  unsigned long __glibc_reserved1[80];
   sigset_t uc_sigmask;
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
index d17aa719a3..27ae9a911f 100644
--- a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
@@ -110,16 +110,16 @@ typedef struct
   } mcontext_t;
 #endif
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
index 09e473cd2c..b6ad1a30e1 100644
--- a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
@@ -47,16 +47,16 @@ typedef struct
     unsigned long __ctx(regs)[32];
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
index 54fe9df601..3a5608260b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
@@ -150,7 +150,7 @@ typedef struct {
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
 #if __WORDSIZE == 32
@@ -177,13 +177,14 @@ typedef struct ucontext_t
      * old ucontext_t; it ensures that uc_mcontext.regs and uc_sigmask
      * are at the same offset as previously.
      */
-    int uc_pad[7];
-    union uc_regs_ptr {
+    int __glibc_reserved1[7];
+    union __ctx(uc_regs_ptr) {
       struct __ctx(pt_regs) *__ctx(regs);
-      mcontext_t *uc_regs;
+      mcontext_t *__ctx(uc_regs);
     } uc_mcontext;
     sigset_t    uc_sigmask;
-    char uc_reg_space[sizeof(mcontext_t) + 12];  /* last for extensibility */
+    /* last for extensibility */
+    char __ctx(uc_reg_space)[sizeof(mcontext_t) + 12];
 #else /* 64-bit */
     sigset_t    uc_sigmask;
     mcontext_t  uc_mcontext;  /* last for extensibility */
diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
index d6bf4d864a..88b74b66fc 100644
--- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
@@ -80,17 +80,17 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
index 2f42d3a054..c838d801d8 100644
--- a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
@@ -112,16 +112,16 @@ typedef struct
     unsigned int __ctx(ownedfp);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
index 9932ed4cac..9a3eacdeec 100644
--- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
@@ -94,7 +94,7 @@ typedef struct {
 
 typedef struct ucontext_t {
 	struct ucontext_t	*uc_link;
-	unsigned long		uc_flags;
+	unsigned long		__ctx(uc_flags);
 	unsigned long		__uc_sigmask;
 	mcontext_t		uc_mcontext;
 	stack_t			uc_stack;
@@ -294,7 +294,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long   uc_flags;
+    unsigned long   __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t	    uc_sigmask;
     stack_t         uc_stack;
diff --git a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
index fcbe3ffb9b..b70dae7768 100644
--- a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
@@ -59,14 +59,22 @@ enum
 /* A machine context is exactly a sigcontext.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
index f4f5c948de..6d8137e42e 100644
--- a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
@@ -141,7 +141,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
@@ -245,7 +245,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;