mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-12 16:20:06 +00: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:
parent
84d8c5bc8b
commit
e78dc67889
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>
|
||||
|
||||
* 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
|
||||
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.
|
||||
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
|
||||
|
@ -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))
|
||||
|
@ -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];
|
||||
typedef mc_greg_t mc_gregset_t[__MC_NGREG];
|
||||
|
||||
#define MC_MAXFPQ 16
|
||||
struct mc_fq {
|
||||
unsigned long *mcfq_addr;
|
||||
unsigned int mcfq_insn;
|
||||
#ifdef __USE_MISC
|
||||
# define MC_MAXFPQ 16
|
||||
#endif
|
||||
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 {
|
||||
mc_gregset_t mc_gregs;
|
||||
mc_greg_t mc_fp;
|
||||
mc_greg_t mc_i7;
|
||||
mc_fpu_t mc_fpregs;
|
||||
union {
|
||||
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 __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_t {
|
||||
@ -97,25 +107,27 @@ typedef struct ucontext_t {
|
||||
* 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_t {
|
||||
|
||||
#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;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user