mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
SPARC sys/ucontext.h namespace fixes (bug 21457).
This patch fixes various miscellaneous namespace issues in the SPARC sys/ucontext.h header. These are similar to changes made previous to other sys/ucontext.h headers, where the SPARC header was excluded from those previous patches because of its complexity. Tested for SPARC with build-many-glibcs.py. [BZ #21457] * 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.
This commit is contained in:
81
ChangeLog
81
ChangeLog
@@ -1,3 +1,84 @@
|
|||||||
|
2017-06-29 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #21457]
|
||||||
|
* 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.
|
||||||
|
|
||||||
2017-06-29 Florian Weimer <fweimer@redhat.com>
|
2017-06-29 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* stdio-common/tst-vfprintf-user-type.c (my_printf_function):
|
* stdio-common/tst-vfprintf-user-type.c (my_printf_function):
|
||||||
|
8
NEWS
8
NEWS
@@ -99,8 +99,12 @@ Version 2.26
|
|||||||
|
|
||||||
* On M68k GNU/Linux and MIPS GNU/Linux, the fpregset_t type no longer has
|
* 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
|
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
|
longer has the name struct mcontext. On SPARC GNU/Linux, the struct
|
||||||
for interfaces involving those types.
|
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
|
* The synchronization that pthread_spin_unlock performs has been changed
|
||||||
to now be equivalent to a C11 atomic store with release memory order to
|
to now be equivalent to a C11 atomic store with release memory order to
|
||||||
|
@@ -16,7 +16,6 @@ MC_GREGS offsetof (mcontext_t, gregs)
|
|||||||
MC_GWINS offsetof (mcontext_t, gwins)
|
MC_GWINS offsetof (mcontext_t, gwins)
|
||||||
MC_FPREGS offsetof (mcontext_t, fpregs)
|
MC_FPREGS offsetof (mcontext_t, fpregs)
|
||||||
MC_XRS offsetof (mcontext_t, xrs)
|
MC_XRS offsetof (mcontext_t, xrs)
|
||||||
MC_FILLER offsetof (mcontext_t, filler)
|
|
||||||
GREG_PSR (REG_PSR * sizeof(greg_t))
|
GREG_PSR (REG_PSR * sizeof(greg_t))
|
||||||
GREG_PC (REG_PC * sizeof(greg_t))
|
GREG_PC (REG_PC * sizeof(greg_t))
|
||||||
GREG_NPC (REG_nPC * sizeof(greg_t))
|
GREG_NPC (REG_nPC * sizeof(greg_t))
|
||||||
|
@@ -27,59 +27,69 @@
|
|||||||
#include <bits/wordsize.h>
|
#include <bits/wordsize.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define __ctx(fld) fld
|
||||||
|
#else
|
||||||
|
# define __ctx(fld) __ ## fld
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
|
|
||||||
#define MC_TSTATE 0
|
#define __MC_NGREG 19
|
||||||
#define MC_PC 1
|
#ifdef __USE_MISC
|
||||||
#define MC_NPC 2
|
# define MC_TSTATE 0
|
||||||
#define MC_Y 3
|
# define MC_PC 1
|
||||||
#define MC_G1 4
|
# define MC_NPC 2
|
||||||
#define MC_G2 5
|
# define MC_Y 3
|
||||||
#define MC_G3 6
|
# define MC_G1 4
|
||||||
#define MC_G4 7
|
# define MC_G2 5
|
||||||
#define MC_G5 8
|
# define MC_G3 6
|
||||||
#define MC_G6 9
|
# define MC_G4 7
|
||||||
#define MC_G7 10
|
# define MC_G5 8
|
||||||
#define MC_O0 11
|
# define MC_G6 9
|
||||||
#define MC_O1 12
|
# define MC_G7 10
|
||||||
#define MC_O2 13
|
# define MC_O0 11
|
||||||
#define MC_O3 14
|
# define MC_O1 12
|
||||||
#define MC_O4 15
|
# define MC_O2 13
|
||||||
#define MC_O5 16
|
# define MC_O3 14
|
||||||
#define MC_O6 17
|
# define MC_O4 15
|
||||||
#define MC_O7 18
|
# define MC_O5 16
|
||||||
#define MC_NGREG 19
|
# define MC_O6 17
|
||||||
|
# define MC_O7 18
|
||||||
|
# define MC_NGREG __MC_NGREG
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef unsigned long mc_greg_t;
|
typedef unsigned long mc_greg_t;
|
||||||
typedef mc_greg_t mc_gregset_t[MC_NGREG];
|
typedef mc_greg_t mc_gregset_t[__MC_NGREG];
|
||||||
|
|
||||||
#define MC_MAXFPQ 16
|
#ifdef __USE_MISC
|
||||||
struct mc_fq {
|
# define MC_MAXFPQ 16
|
||||||
unsigned long *mcfq_addr;
|
#endif
|
||||||
unsigned int mcfq_insn;
|
struct __mc_fq {
|
||||||
|
unsigned long *__ctx(mcfq_addr);
|
||||||
|
unsigned int __ctx(mcfq_insn);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mc_fpu {
|
|
||||||
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;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
mc_gregset_t mc_gregs;
|
union {
|
||||||
mc_greg_t mc_fp;
|
unsigned int __ctx(sregs)[32];
|
||||||
mc_greg_t mc_i7;
|
unsigned long __ctx(dregs)[32];
|
||||||
mc_fpu_t mc_fpregs;
|
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 __ctx(mc_gregs);
|
||||||
|
mc_greg_t __ctx(mc_fp);
|
||||||
|
mc_greg_t __ctx(mc_i7);
|
||||||
|
mc_fpu_t __ctx(mc_fpregs);
|
||||||
} mcontext_t;
|
} mcontext_t;
|
||||||
|
|
||||||
typedef struct ucontext_t {
|
typedef struct ucontext_t {
|
||||||
@@ -97,25 +107,27 @@ typedef struct ucontext_t {
|
|||||||
* Location of the users' stored registers relative to R0.
|
* 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].
|
* Usage is as an index into a gregset_t array or as u.u_ar0[XX].
|
||||||
*/
|
*/
|
||||||
#define REG_PSR (0)
|
#ifdef __USE_MISC
|
||||||
#define REG_PC (1)
|
# define REG_PSR (0)
|
||||||
#define REG_nPC (2)
|
# define REG_PC (1)
|
||||||
#define REG_Y (3)
|
# define REG_nPC (2)
|
||||||
#define REG_G1 (4)
|
# define REG_Y (3)
|
||||||
#define REG_G2 (5)
|
# define REG_G1 (4)
|
||||||
#define REG_G3 (6)
|
# define REG_G2 (5)
|
||||||
#define REG_G4 (7)
|
# define REG_G3 (6)
|
||||||
#define REG_G5 (8)
|
# define REG_G4 (7)
|
||||||
#define REG_G6 (9)
|
# define REG_G5 (8)
|
||||||
#define REG_G7 (10)
|
# define REG_G6 (9)
|
||||||
#define REG_O0 (11)
|
# define REG_G7 (10)
|
||||||
#define REG_O1 (12)
|
# define REG_O0 (11)
|
||||||
#define REG_O2 (13)
|
# define REG_O1 (12)
|
||||||
#define REG_O3 (14)
|
# define REG_O2 (13)
|
||||||
#define REG_O4 (15)
|
# define REG_O3 (14)
|
||||||
#define REG_O5 (16)
|
# define REG_O4 (15)
|
||||||
#define REG_O6 (17)
|
# define REG_O5 (16)
|
||||||
#define REG_O7 (18)
|
# define REG_O6 (17)
|
||||||
|
# define REG_O7 (18)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A gregset_t is defined as an array type for compatibility with the reference
|
* A gregset_t is defined as an array type for compatibility with the reference
|
||||||
@@ -128,20 +140,26 @@ typedef struct ucontext_t {
|
|||||||
|
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
|
|
||||||
#define REG_ASI (19)
|
# define __NGREG 21
|
||||||
#define REG_FPRS (20)
|
# ifdef __USE_MISC
|
||||||
|
# define REG_ASI (19)
|
||||||
|
# define REG_FPRS (20)
|
||||||
|
|
||||||
#define NGREG 21
|
# define NGREG __NGREG
|
||||||
|
# endif
|
||||||
typedef long greg_t;
|
typedef long greg_t;
|
||||||
|
|
||||||
#else /* __WORDSIZE == 32 */
|
#else /* __WORDSIZE == 32 */
|
||||||
|
|
||||||
#define NGREG 19
|
# define __NGREG 19
|
||||||
|
# ifdef __USE_MISC
|
||||||
|
# define NGREG __NGREG
|
||||||
|
# endif
|
||||||
typedef int greg_t;
|
typedef int greg_t;
|
||||||
|
|
||||||
#endif /* __WORDSIZE == 32 */
|
#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
|
* 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
|
* maximum number of outstanding regiters window defined in the SPARC
|
||||||
* architecture (*not* implementation).
|
* architecture (*not* implementation).
|
||||||
*/
|
*/
|
||||||
#define SPARC_MAXREGWINDOW 31 /* max windows in SPARC arch. */
|
# define __SPARC_MAXREGWINDOW 31 /* max windows in SPARC arch. */
|
||||||
struct rwindow
|
#ifdef __USE_MISC
|
||||||
|
# define SPARC_MAXREGWINDOW __SPARC_MAXREGWINDOW
|
||||||
|
#endif
|
||||||
|
struct __rwindow
|
||||||
{
|
{
|
||||||
greg_t rw_local[8]; /* locals */
|
greg_t __ctx(rw_local)[8]; /* locals */
|
||||||
greg_t rw_in[8]; /* ins */
|
greg_t __ctx(rw_in)[8]; /* ins */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define rw_fp rw_in[6] /* frame pointer */
|
#ifdef __USE_MISC
|
||||||
#define rw_rtn rw_in[7] /* return address */
|
# 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 __ctx(wbcnt);
|
||||||
int *spbuf[SPARC_MAXREGWINDOW];
|
int *__ctx(spbuf)[__SPARC_MAXREGWINDOW];
|
||||||
struct rwindow wbuf[SPARC_MAXREGWINDOW];
|
struct __rwindow __ctx(wbuf)[__SPARC_MAXREGWINDOW];
|
||||||
} gwindows_t;
|
} gwindows_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Floating point definitions.
|
* 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
|
* 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
|
* conformant system implementation. Any additional fields provided by an
|
||||||
* implementation should not be used applications designed to be ABI conformant. */
|
* implementation should not be used applications designed to be ABI conformant. */
|
||||||
|
|
||||||
struct fpq
|
struct __fpq
|
||||||
{
|
{
|
||||||
unsigned long *fpq_addr; /* address */
|
unsigned long *__ctx(fpq_addr); /* address */
|
||||||
unsigned long fpq_instr; /* instruction */
|
unsigned long __ctx(fpq_instr); /* instruction */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fq
|
struct __fq
|
||||||
{
|
{
|
||||||
union /* FPU inst/addr queue */
|
union /* FPU inst/addr queue */
|
||||||
{
|
{
|
||||||
double whole;
|
double __ctx(whole);
|
||||||
struct fpq fpq;
|
struct __fpq __ctx(fpq);
|
||||||
} FQu;
|
} __ctx(FQu);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FPU_REGS_TYPE unsigned
|
#ifdef __USE_MISC
|
||||||
#define FPU_DREGS_TYPE unsigned long long
|
# define FPU_REGS_TYPE unsigned
|
||||||
#define V7_FPU_FSR_TYPE unsigned
|
# define FPU_DREGS_TYPE unsigned long long
|
||||||
#define V9_FPU_FSR_TYPE unsigned long long
|
# define V7_FPU_FSR_TYPE unsigned
|
||||||
#define V9_FPU_FPRS_TYPE unsigned
|
# define V9_FPU_FSR_TYPE unsigned long long
|
||||||
|
# define V9_FPU_FPRS_TYPE unsigned
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
|
|
||||||
typedef struct fpu
|
typedef struct
|
||||||
{
|
{
|
||||||
union { /* FPU floating point regs */
|
union { /* FPU floating point regs */
|
||||||
unsigned fpu_regs[32]; /* 32 singles */
|
unsigned __ctx(fpu_regs)[32]; /* 32 singles */
|
||||||
double fpu_dregs[32]; /* 32 doubles */
|
double __ctx(fpu_dregs)[32]; /* 32 doubles */
|
||||||
long double fpu_qregs[16]; /* 16 quads */
|
long double __ctx(fpu_qregs)[16]; /* 16 quads */
|
||||||
} fpu_fr;
|
} __ctx(fpu_fr);
|
||||||
struct fq *fpu_q; /* ptr to array of FQ entries */
|
struct __fq *__ctx(fpu_q); /* ptr to array of FQ entries */
|
||||||
unsigned long fpu_fsr; /* FPU status register */
|
unsigned long __ctx(fpu_fsr); /* FPU status register */
|
||||||
unsigned char fpu_qcnt; /* # of entries in saved FQ */
|
unsigned char __ctx(fpu_qcnt); /* # of entries in saved FQ */
|
||||||
unsigned char fpu_q_entrysize; /* # of bytes per FQ entry */
|
unsigned char __ctx(fpu_q_entrysize); /* # of bytes per FQ entry */
|
||||||
unsigned char fpu_en; /* flag signifying fpu in use */
|
unsigned char __ctx(fpu_en); /* flag signifying fpu in use */
|
||||||
} fpregset_t;
|
} fpregset_t;
|
||||||
|
|
||||||
#else /* __WORDSIZE == 32 */
|
#else /* __WORDSIZE == 32 */
|
||||||
|
|
||||||
typedef struct fpu
|
typedef struct
|
||||||
{
|
{
|
||||||
union { /* FPU floating point regs */
|
union { /* FPU floating point regs */
|
||||||
__extension__ unsigned long long fpu_regs[32]; /* 32 singles */
|
__extension__ unsigned long long __ctx(fpu_regs)[32]; /* 32 singles */
|
||||||
double fpu_dregs[16]; /* 16 doubles */
|
double __ctx(fpu_dregs)[16]; /* 16 doubles */
|
||||||
} fpu_fr;
|
} __ctx(fpu_fr);
|
||||||
struct fq *fpu_q; /* ptr to array of FQ entries */
|
struct __fq *__ctx(fpu_q); /* ptr to array of FQ entries */
|
||||||
unsigned fpu_fsr; /* FPU status register */
|
unsigned __ctx(fpu_fsr); /* FPU status register */
|
||||||
unsigned char fpu_qcnt; /* # of entries in saved FQ */
|
unsigned char __ctx(fpu_qcnt); /* # of entries in saved FQ */
|
||||||
unsigned char fpu_q_entrysize; /* # of bytes per FQ entry */
|
unsigned char __ctx(fpu_q_entrysize); /* # of bytes per FQ entry */
|
||||||
unsigned char fpu_en; /* flag signifying fpu in use */
|
unsigned char __ctx(fpu_en); /* flag signifying fpu in use */
|
||||||
} fpregset_t;
|
} fpregset_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -244,19 +271,23 @@ typedef struct fpu
|
|||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned int xrs_id; /* indicates xrs_ptr validity */
|
unsigned int __ctx(xrs_id); /* indicates xrs_ptr validity */
|
||||||
void * xrs_ptr; /* ptr to extra reg state */
|
void * __ctx(xrs_ptr); /* ptr to extra reg state */
|
||||||
} xrs_t;
|
} xrs_t;
|
||||||
|
|
||||||
#define XRS_ID 0x78727300 /* the string "xrs" */
|
#ifdef __USE_MISC
|
||||||
|
# define XRS_ID 0x78727300 /* the string "xrs" */
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
gregset_t gregs; /* general register set */
|
gregset_t __ctx(gregs); /* general register set */
|
||||||
gwindows_t *gwins; /* POSSIBLE pointer to register windows */
|
gwindows_t *__ctx(gwins); /* POSSIBLE pointer to register
|
||||||
fpregset_t fpregs; /* floating point register set */
|
windows */
|
||||||
xrs_t xrs; /* POSSIBLE extra register state association */
|
fpregset_t __ctx(fpregs); /* floating point register set */
|
||||||
long filler[19];
|
xrs_t __ctx(xrs); /* POSSIBLE extra register state
|
||||||
|
association */
|
||||||
|
long __glibc_reserved1[19];
|
||||||
} mcontext_t;
|
} mcontext_t;
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user