This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.
Various such changes and others are made to the SPARC header, which
was excluded from some previous patches because of its complexity.

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

2017-06-19  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.
	* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (__ctx): New macro.
	[__WORDSIZE == 64] (MC_TSTATE): Define only for [__USE_MISC].
	[__WORDSIZE == 64] (MC_PC): Likewise.
	[__WORDSIZE == 64] (MC_NPC): Likewise.
	[__WORDSIZE == 64] (MC_Y): Likewise.
	[__WORDSIZE == 64] (MC_G1): Likewise.
	[__WORDSIZE == 64] (MC_G2): Likewise.
	[__WORDSIZE == 64] (MC_G3): Likewise.
	[__WORDSIZE == 64] (MC_G4): Likewise.
	[__WORDSIZE == 64] (MC_G5): Likewise.
	[__WORDSIZE == 64] (MC_G6): Likewise.
	[__WORDSIZE == 64] (MC_G7): Likewise.
	[__WORDSIZE == 64] (MC_O0): Likewise.
	[__WORDSIZE == 64] (MC_O1): Likewise.
	[__WORDSIZE == 64] (MC_O2): Likewise.
	[__WORDSIZE == 64] (MC_O3): Likewise.
	[__WORDSIZE == 64] (MC_O4): Likewise.
	[__WORDSIZE == 64] (MC_O5): Likewise.
	[__WORDSIZE == 64] (MC_O6): Likewise.
	[__WORDSIZE == 64] (MC_O7): Likewise.
	[__WORDSIZE == 64] (MC_NGREG): Rename to __MC_NGREG and define to
	__MC_NGREG if [__USE_MISC].
	[__WORDSIZE == 64] (MC_MAXFPQ): Define only for [__USE_MISC].
	[__WORDSIZE == 64] (mc_gregset_t): Define using __MC_NGREG.
	[__WORDSIZE == 64] (struct mc_fq): Rename to struct __mc_fq.
	Define fields using __ctx.
	[__WORDSIZE == 64] (mc_fpu_t): Remove struct tag.  Define fields
	using __ctx.
	[__WORDSIZE == 64] (mcontext_t): Define fields using __ctx.
	(REG_PSR): Define only for [__USE_MISC].
	(REG_PC): Likewise.
	(REG_nPC): Likewise.
	(REG_Y): Likewise.
	(REG_G1): Likewise.
	(REG_G2): Likewise.
	(REG_G3): Likewise.
	(REG_G4): Likewise.
	(REG_G5): Likewise.
	(REG_G6): Likewise.
	(REG_G7): Likewise.
	(REG_O0): Likewise.
	(REG_O1): Likewise.
	(REG_O2): Likewise.
	(REG_O3): Likewise.
	(REG_O4): Likewise.
	(REG_O5): Likewise.
	(REG_O6): Likewise.
	(REG_O7): Likewise.
	[__WORDSIZE == 64] (REG_ASI): Define only for [__USE_MISC].
	[__WORDSIZE == 64] (REG_FPRS): Likewise.
	(NGREG): Rename to __NGREG and define to __NGREG if [__USE_MISC].
	(gregset_t): Define using __NGREG.
	(SPARC_MAXREGWINDOW): Rename to __SPARC_MAXREGWINDOW and define to
	__SPARC_MAXREGWINDOW if [__USE_MISC].
	(struct rwindow): Rename to struct __rwindow.  Define fields using
	__ctx.
	(rw_fp): Define only for [__USE_MISC].
	(rw_rtn): Likewise.
	(gwindows_t): Remove struct tag.  Define fields using __ctx and
	__SPARC_MAXREGWINDOW.
	(MAXFPQ): Define only for [__USE_MISC].
	(struct fpq): Rename to struct __fpq.  Define fields using __ctx.
	(struct fq): Rename to struct __fq.  Define fields using __ctx.
	(FPU_REGS_TYPE): Define only for [__USE_MISC].
	(FPU_DREGS_TYPE): Likewise.
	(V7_FPU_FSR_TYPE): Likewise.
	(V9_FPU_FSR_TYPE): Likewise.
	(V9_FPU_FPRS_TYPE): Likewise.
	[__WORDSIZE == 64] (fpregset_t): Remove struct tag.  Define fields
	using __ctx.
	[__WORDSIZE != 64] (fpregset_t): Likewise.
	[__WORDSIZE != 64] (xrs_t): Define fields using __ctx.
	[__WORDSIZE != 64] (XRS_ID): Define only for [__USE_MISC].
	[__WORDSIZE != 64] (mcontext_t): Define fields using __ctx.
	Rename field filler to __glibc_reserved1.
	* sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
	(MC_FILLER): Remove.

diff --git a/NEWS b/NEWS
index f81d02f..c9a364b 100644
--- a/NEWS
+++ b/NEWS
@@ -84,6 +84,15 @@ Version 2.26
 * The stack_t type no longer has the name struct sigaltstack.  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.  On SPARC GNU/Linux, the struct
+  mc_fq, struct rwindow, struct fpq and struct fq types are no longer
+  defined in sys/ucontext.h, the mc_fpu_t type no longer has the name struct
+  mc_fpu, the gwindows_t type no longer has the name struct gwindows and the
+  fpregset_t type no longer has the name struct fpu.  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
diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
index e6ecbe6..f2353f6 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 048e9a4..0e98482 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 af8d75c..faa3aca 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 b460f23..7d25fb8 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
   {
@@ -179,7 +179,7 @@ typedef struct ucontext
      */
     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
 #endif
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
index 544030c..8a7cb5a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
@@ -16,7 +16,6 @@ MC_GREGS	offsetof (mcontext_t, gregs)
 MC_GWINS	offsetof (mcontext_t, gwins)
 MC_FPREGS	offsetof (mcontext_t, fpregs)
 MC_XRS		offsetof (mcontext_t, xrs)
-MC_FILLER	offsetof (mcontext_t, filler)
 GREG_PSR	(REG_PSR * sizeof(greg_t))
 GREG_PC		(REG_PC * sizeof(greg_t))
 GREG_NPC	(REG_nPC * sizeof(greg_t))
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
index 7ce5f2b..4c3d29b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
@@ -27,59 +27,69 @@
 #include <bits/wordsize.h>
 
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 #if __WORDSIZE == 64
 
-#define MC_TSTATE	0
-#define MC_PC		1
-#define MC_NPC		2
-#define MC_Y		3
-#define MC_G1		4
-#define MC_G2		5
-#define MC_G3		6
-#define MC_G4		7
-#define MC_G5		8
-#define MC_G6		9
-#define MC_G7		10
-#define MC_O0		11
-#define MC_O1		12
-#define MC_O2		13
-#define MC_O3		14
-#define MC_O4		15
-#define MC_O5		16
-#define MC_O6		17
-#define MC_O7		18
-#define MC_NGREG	19
+#define __MC_NGREG	19
+#ifdef __USE_MISC
+# define MC_TSTATE	0
+# define MC_PC		1
+# define MC_NPC		2
+# define MC_Y		3
+# define MC_G1		4
+# define MC_G2		5
+# define MC_G3		6
+# define MC_G4		7
+# define MC_G5		8
+# define MC_G6		9
+# define MC_G7		10
+# define MC_O0		11
+# define MC_O1		12
+# define MC_O2		13
+# define MC_O3		14
+# define MC_O4		15
+# define MC_O5		16
+# define MC_O6		17
+# define MC_O7		18
+# define MC_NGREG	__MC_NGREG
+#endif
 
 typedef unsigned long mc_greg_t;
-typedef mc_greg_t mc_gregset_t[MC_NGREG];
-
-#define MC_MAXFPQ	16
-struct mc_fq {
-	unsigned long	*mcfq_addr;
-	unsigned int	mcfq_insn;
+typedef mc_greg_t mc_gregset_t[__MC_NGREG];
+
+#ifdef __USE_MISC
+# define MC_MAXFPQ	16
+#endif
+struct __mc_fq {
+	unsigned long	*__ctx(mcfq_addr);
+	unsigned int	__ctx(mcfq_insn);
 };
 
-struct mc_fpu {
+typedef struct {
 	union {
-		unsigned int	sregs[32];
-		unsigned long	dregs[32];
-		long double	qregs[16];
-	} mcfpu_fregs;
-	unsigned long	mcfpu_fsr;
-	unsigned long	mcfpu_fprs;
-	unsigned long	mcfpu_gsr;
-	struct mc_fq	*mcfpu_fq;
-	unsigned char	mcfpu_qcnt;
-	unsigned char	mcfpu_qentsz;
-	unsigned char	mcfpu_enab;
-};
-typedef struct mc_fpu mc_fpu_t;
+		unsigned int	__ctx(sregs)[32];
+		unsigned long	__ctx(dregs)[32];
+		long double	__ctx(qregs)[16];
+	} __ctx(mcfpu_fregs);
+	unsigned long	__ctx(mcfpu_fsr);
+	unsigned long	__ctx(mcfpu_fprs);
+	unsigned long	__ctx(mcfpu_gsr);
+	struct __mc_fq	*__ctx(mcfpu_fq);
+	unsigned char	__ctx(mcfpu_qcnt);
+	unsigned char	__ctx(mcfpu_qentsz);
+	unsigned char	__ctx(mcfpu_enab);
+} mc_fpu_t;
 
 typedef struct {
-	mc_gregset_t	mc_gregs;
-	mc_greg_t	mc_fp;
-	mc_greg_t	mc_i7;
-	mc_fpu_t	mc_fpregs;
+	mc_gregset_t	__ctx(mc_gregs);
+	mc_greg_t	__ctx(mc_fp);
+	mc_greg_t	__ctx(mc_i7);
+	mc_fpu_t	__ctx(mc_fpregs);
 } mcontext_t;
 
 typedef struct ucontext {
@@ -97,25 +107,27 @@ typedef struct ucontext {
  * Location of the users' stored registers relative to R0.
  * Usage is as an index into a gregset_t array or as u.u_ar0[XX].
  */
-#define REG_PSR (0)
-#define REG_PC  (1)
-#define REG_nPC (2)
-#define REG_Y   (3)
-#define REG_G1  (4)
-#define REG_G2  (5)
-#define REG_G3  (6)
-#define REG_G4  (7)
-#define REG_G5  (8)
-#define REG_G6  (9)
-#define REG_G7  (10)
-#define REG_O0  (11)
-#define REG_O1  (12)
-#define REG_O2  (13)
-#define REG_O3  (14)
-#define REG_O4  (15)
-#define REG_O5  (16)
-#define REG_O6  (17)
-#define REG_O7  (18)
+#ifdef __USE_MISC
+# define REG_PSR (0)
+# define REG_PC  (1)
+# define REG_nPC (2)
+# define REG_Y   (3)
+# define REG_G1  (4)
+# define REG_G2  (5)
+# define REG_G3  (6)
+# define REG_G4  (7)
+# define REG_G5  (8)
+# define REG_G6  (9)
+# define REG_G7  (10)
+# define REG_O0  (11)
+# define REG_O1  (12)
+# define REG_O2  (13)
+# define REG_O3  (14)
+# define REG_O4  (15)
+# define REG_O5  (16)
+# define REG_O6  (17)
+# define REG_O7  (18)
+#endif
 
 /*
  * A gregset_t is defined as an array type for compatibility with the reference
@@ -128,20 +140,26 @@ typedef struct ucontext {
 
 #if __WORDSIZE == 64
 
-#define REG_ASI	(19)
-#define REG_FPRS (20)
+# define __NGREG   21
+# ifdef __USE_MISC
+#  define REG_ASI	(19)
+#  define REG_FPRS (20)
 
-#define NGREG   21
+#  define NGREG   __NGREG
+# endif
 typedef long greg_t;
 
 #else /* __WORDSIZE == 32 */
 
-#define NGREG   19
+# define __NGREG   19
+# ifdef __USE_MISC
+#  define NGREG   __NGREG
+# endif
 typedef int greg_t;
 
 #endif /* __WORDSIZE == 32 */
 
-typedef greg_t  gregset_t[NGREG];
+typedef greg_t  gregset_t[__NGREG];
 
 /*
  * The following structures define how a register window can appear on the
@@ -150,28 +168,35 @@ typedef greg_t  gregset_t[NGREG];
  * maximum number of outstanding regiters window defined in the SPARC
  * architecture (*not* implementation).
  */
-#define SPARC_MAXREGWINDOW	31	/* max windows in SPARC arch. */
-struct  rwindow
+# define __SPARC_MAXREGWINDOW	31	/* max windows in SPARC arch. */
+#ifdef __USE_MISC
+# define SPARC_MAXREGWINDOW	__SPARC_MAXREGWINDOW
+#endif
+struct  __rwindow
   {
-    greg_t rw_local[8];			/* locals */
-    greg_t rw_in[8];			/* ins */
+    greg_t __ctx(rw_local)[8];			/* locals */
+    greg_t __ctx(rw_in)[8];			/* ins */
   };
 
-#define rw_fp   rw_in[6]		/* frame pointer */
-#define rw_rtn  rw_in[7]		/* return address */
+#ifdef __USE_MISC
+# define rw_fp   __ctx(rw_in)[6]		/* frame pointer */
+# define rw_rtn  __ctx(rw_in)[7]		/* return address */
+#endif
 
-typedef struct gwindows
+typedef struct
   {
-    int            wbcnt;
-    int           *spbuf[SPARC_MAXREGWINDOW];
-    struct rwindow wbuf[SPARC_MAXREGWINDOW];
+    int            __ctx(wbcnt);
+    int           *__ctx(spbuf)[__SPARC_MAXREGWINDOW];
+    struct __rwindow __ctx(wbuf)[__SPARC_MAXREGWINDOW];
   } gwindows_t;
 
 /*
  * Floating point definitions.
  */
 
-#define MAXFPQ	16	/* max # of fpu queue entries currently supported */
+#ifdef __USE_MISC
+# define MAXFPQ	16	/* max # of fpu queue entries currently supported */
+#endif
 
 /*
  * struct fq defines the minimal format of a floating point instruction queue
@@ -180,56 +205,58 @@ typedef struct gwindows
  * conformant system implementation. Any additional fields provided by an
  * implementation should not be used applications designed to be ABI conformant. */
 
-struct fpq
+struct __fpq
   {
-    unsigned long *fpq_addr;		/* address */
-    unsigned long fpq_instr;		/* instruction */
+    unsigned long *__ctx(fpq_addr);		/* address */
+    unsigned long __ctx(fpq_instr);		/* instruction */
   };
 
-struct fq
+struct __fq
   {
     union				/* FPU inst/addr queue */
       {
-        double whole;
-        struct fpq fpq;
-      } FQu;
+        double __ctx(whole);
+        struct __fpq __ctx(fpq);
+      } __ctx(FQu);
   };
 
-#define FPU_REGS_TYPE           unsigned
-#define FPU_DREGS_TYPE          unsigned long long
-#define V7_FPU_FSR_TYPE         unsigned
-#define V9_FPU_FSR_TYPE         unsigned long long
-#define V9_FPU_FPRS_TYPE        unsigned
+#ifdef __USE_MISC
+# define FPU_REGS_TYPE           unsigned
+# define FPU_DREGS_TYPE          unsigned long long
+# define V7_FPU_FSR_TYPE         unsigned
+# define V9_FPU_FSR_TYPE         unsigned long long
+# define V9_FPU_FPRS_TYPE        unsigned
+#endif
 
 #if __WORDSIZE == 64
 
-typedef struct fpu
+typedef struct
   {
     union {				/* FPU floating point regs */
-      unsigned		fpu_regs[32];	/* 32 singles */
-      double            fpu_dregs[32];	/* 32 doubles */
-      long double	fpu_qregs[16];  /* 16 quads */
-    } fpu_fr;
-    struct fq       *fpu_q;		/* ptr to array of FQ entries */
-    unsigned long   fpu_fsr;		/* FPU status register */
-    unsigned char   fpu_qcnt;		/* # of entries in saved FQ */
-    unsigned char   fpu_q_entrysize;	/* # of bytes per FQ entry */
-    unsigned char   fpu_en;		/* flag signifying fpu in use */
+      unsigned		__ctx(fpu_regs)[32];	/* 32 singles */
+      double            __ctx(fpu_dregs)[32];	/* 32 doubles */
+      long double	__ctx(fpu_qregs)[16];  /* 16 quads */
+    } __ctx(fpu_fr);
+    struct __fq     *__ctx(fpu_q);		/* ptr to array of FQ entries */
+    unsigned long   __ctx(fpu_fsr);		/* FPU status register */
+    unsigned char   __ctx(fpu_qcnt);		/* # of entries in saved FQ */
+    unsigned char   __ctx(fpu_q_entrysize);	/* # of bytes per FQ entry */
+    unsigned char   __ctx(fpu_en);		/* flag signifying fpu in use */
   } fpregset_t;
 
 #else /* __WORDSIZE == 32 */
 
-typedef struct fpu
+typedef struct
   {
     union {				/* FPU floating point regs */
-      __extension__ unsigned long long fpu_regs[32];	/* 32 singles */
-      double             fpu_dregs[16];	/* 16 doubles */
-    } fpu_fr;
-    struct fq       *fpu_q;		/* ptr to array of FQ entries */
-    unsigned        fpu_fsr;		/* FPU status register */
-    unsigned char   fpu_qcnt;		/* # of entries in saved FQ */
-    unsigned char   fpu_q_entrysize;	/* # of bytes per FQ entry */
-    unsigned char   fpu_en;		/* flag signifying fpu in use */
+      __extension__ unsigned long long __ctx(fpu_regs)[32];	/* 32 singles */
+      double             __ctx(fpu_dregs)[16];	/* 16 doubles */
+    } __ctx(fpu_fr);
+    struct __fq     *__ctx(fpu_q);		/* ptr to array of FQ entries */
+    unsigned        __ctx(fpu_fsr);		/* FPU status register */
+    unsigned char   __ctx(fpu_qcnt);		/* # of entries in saved FQ */
+    unsigned char   __ctx(fpu_q_entrysize);	/* # of bytes per FQ entry */
+    unsigned char   __ctx(fpu_en);		/* flag signifying fpu in use */
   } fpregset_t;
 
 /*
@@ -244,19 +271,23 @@ typedef struct fpu
  */
 typedef struct
   {
-    unsigned int xrs_id;		/* indicates xrs_ptr validity */
-    void *       xrs_ptr;		/* ptr to extra reg state */
+    unsigned int __ctx(xrs_id);		/* indicates xrs_ptr validity */
+    void *       __ctx(xrs_ptr);		/* ptr to extra reg state */
   } xrs_t;
 
-#define XRS_ID	0x78727300		/* the string "xrs" */
+#ifdef __USE_MISC
+# define XRS_ID	0x78727300		/* the string "xrs" */
+#endif
 
 typedef struct
   {
-    gregset_t   gregs;		/* general register set */
-    gwindows_t  *gwins;		/* POSSIBLE pointer to register windows */
-    fpregset_t  fpregs;		/* floating point register set */
-    xrs_t       xrs;		/* POSSIBLE extra register state association */
-    long        filler[19];
+    gregset_t   __ctx(gregs);		/* general register set */
+    gwindows_t  *__ctx(gwins);		/* POSSIBLE pointer to register
+					   windows */
+    fpregset_t  __ctx(fpregs);		/* floating point register set */
+    xrs_t       __ctx(xrs);		/* POSSIBLE extra register state
+					   association */
+    long        __glibc_reserved1[19];
   } mcontext_t;
 
 

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]