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.
This commit is contained in:
Joseph Myers 2017-08-09 17:51:26 +00:00
parent 3016149819
commit 3d452dabd1
19 changed files with 152 additions and 50 deletions

View File

@ -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]

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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;

View File

@ -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 */

View File

@ -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;