diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-06-29 19:44:43 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-06-29 19:44:43 +0000 |
commit | e78dc67889c35d9a77e043930dc234005cdcbc76 (patch) | |
tree | ec7d0364019bb5cc0440d9bb08c290455c5ea127 /sysdeps/unix/sysv/linux | |
parent | 84d8c5bc8b4815bbdd4395f419aed047db3b67e3 (diff) | |
download | glibc-e78dc67889c35d9a77e043930dc234005cdcbc76.tar.gz |
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.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sys/ucontext.h | 267 |
2 files changed, 149 insertions, 119 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym index 544030ce8b..8a7cb5ab84 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 dc0d3169b5..9932ed4cac 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_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; |