diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 10:33:23 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 10:33:23 +0000 |
commit | d57cb31910ca5c200e4172276749a7f8bd17ae3c (patch) | |
tree | ecdfae9860d80875fb91a74660ac014edbe312fc /sysdeps/unix | |
parent | ac782f9e9ab0a39a3054e4c97653fafa8ea47a62 (diff) | |
download | glibc-d57cb31910ca5c200e4172276749a7f8bd17ae3c.zip glibc-d57cb31910ca5c200e4172276749a7f8bd17ae3c.tar.gz glibc-d57cb31910ca5c200e4172276749a7f8bd17ae3c.tar.bz2 |
Miscellaneous sys/ucontext.h namespace fixes (bug 21457).
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.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/sys/ucontext.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/sys/ucontext.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/nios2/sys/ucontext.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h | 10 |
4 files changed, 9 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h index 280ec37..1f807b5 100644 --- a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h @@ -91,7 +91,7 @@ enum #endif /* Structure to describe FPU registers. */ -typedef struct fpregset +typedef struct { int __ctx(f_pcr); int __ctx(f_psr); diff --git a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h index 19c0ed9..d17aa71 100644 --- a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h @@ -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 { diff --git a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h index 4754657..09e473c 100644 --- a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h @@ -41,7 +41,7 @@ #endif /* Context to describe whole processor state. */ -typedef struct mcontext +typedef struct { int __ctx(version); unsigned long __ctx(regs)[32]; diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h index 2177487..54fe9df 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h @@ -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 */ |