Miscellaneous sys/ucontext.h namespace fixes (bug 21457).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 28 Jun 2017 10:33:23 +0000 (10:33 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 28 Jun 2017 10:33:23 +0000 (10:33 +0000)
This patch fixes various miscellaneous namespace issues in
sys/ucontext.h headers.

Some struct tags are removed where the structs also have *_t typedef
names, while other struct tags without such names are renamed to start
__; the changes are noted in NEWS as they can affect C++ name mangling
(although there seems to be little if any external use of these types,
at least based on checking codesearch.debian.net).  For powerpc,
pointers to struct pt_regs (not defined in this header) are changed to
point to struct __ctx(pt_regs), so in the __USE_MISC case those struct
fields continue to point to the existing struct pt_regs type for
maximum compatibility, while when that's a namespace issue they point
to a struct __pt_regs type which is always an incomplete struct.

Tested for affected architectures with build-many-glibcs.py.

[BZ #21457]
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (fpregset_t): Remove
struct tag.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (fpregset_t):
Likewise.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (mcontext_t):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (pt_regs):
Declare struct type with __ctx.
[__WORDSIZE != 32] (mcontext_t): Use __ctx with pt_regs struct
tag.
(ucontext_t) [__WORDSIZE == 32]: Use __ctx with pt_regs struct tag
and regs field name.

ChangeLog
NEWS
sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
sysdeps/unix/sysv/linux/mips/sys/ucontext.h
sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h

index ce38369..7bcff3b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2017-06-28  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #21457]
+       * sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (fpregset_t): Remove
+       struct tag.
+       * sysdeps/unix/sysv/linux/mips/sys/ucontext.h (fpregset_t):
+       Likewise.
+       * sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (mcontext_t):
+       Likewise.
+       * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (pt_regs):
+       Declare struct type with __ctx.
+       [__WORDSIZE != 32] (mcontext_t): Use __ctx with pt_regs struct
+       tag.
+       (ucontext_t) [__WORDSIZE == 32]: Use __ctx with pt_regs struct tag
+       and regs field name.
+
 2017-06-27  Joseph Myers  <joseph@codesourcery.com>
 
        * elf/loadtest.c (OUT): Define using do { } while (0).
diff --git a/NEWS b/NEWS
index b8deb9c..22c43f5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -97,6 +97,11 @@ Version 2.26
 * The ucontext_t type no longer has the name struct ucontext.  This changes
   the C++ name mangling for interfaces involving this type.
 
+* On M68k GNU/Linux and MIPS GNU/Linux, the fpregset_t type no longer has
+  the name struct fpregset.  On Nios II GNU/Linux, the mcontext_t type no
+  longer has the name struct mcontext.  This changes the C++ name mangling
+  for interfaces involving those types.
+
 * The synchronization that pthread_spin_unlock performs has been changed
   to now be equivalent to a C11 atomic store with release memory order to
   the spin lock's memory location.  This ensures correct synchronization
index 280ec37..1f807b5 100644 (file)
@@ -91,7 +91,7 @@ enum
 #endif
 
 /* Structure to describe FPU registers.  */
-typedef struct fpregset
+typedef struct
 {
   int __ctx(f_pcr);
   int __ctx(f_psr);
index 19c0ed9..d17aa71 100644 (file)
@@ -50,7 +50,7 @@ typedef greg_t gregset_t[__NGREG];
 #endif
 
 /* Container for all FPU registers.  */
-typedef struct fpregset {
+typedef struct {
        union {
                double  __ctx(fp_dregs)[__NFPREG];
                struct {
index 4754657..09e473c 100644 (file)
@@ -41,7 +41,7 @@
 #endif
 
 /* Context to describe whole processor state.  */
-typedef struct mcontext
+typedef struct
   {
     int __ctx(version);
     unsigned long __ctx(regs)[32];
index 2177487..54fe9df 100644 (file)
@@ -31,6 +31,8 @@
 # define __ctx(fld) __ ## fld
 #endif
 
+struct __ctx(pt_regs);
+
 #if __WORDSIZE == 32
 
 /* Number of general registers.  */
@@ -117,7 +119,7 @@ typedef struct {
        int             __pad0;
        unsigned long   __ctx(handler);
        unsigned long   __ctx(oldmask);
-       struct pt_regs  *__ctx(regs);
+       struct __ctx(pt_regs)   *__ctx(regs);
        gregset_t       __ctx(gp_regs);
        fpregset_t      __ctx(fp_regs);
 /*
@@ -145,8 +147,6 @@ typedef struct {
 
 #endif
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
@@ -179,7 +179,7 @@ typedef struct ucontext_t
      */
     int uc_pad[7];
     union uc_regs_ptr {
-      struct pt_regs *regs;
+      struct __ctx(pt_regs) *__ctx(regs);
       mcontext_t *uc_regs;
     } uc_mcontext;
     sigset_t    uc_sigmask;
@@ -190,4 +190,6 @@ typedef struct ucontext_t
 #endif
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */