mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	* Versions.def (libm): Add GLIBC_2.1.3. ISO C99 TR1 changes various fe* functions to return an error value. * math/Versions [GLIBC_2.1.3]: Add feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fegetenv, fesetenv, and feupdateenv. * sysdeps/alpha/fpu/fclrexcpt.c: Return value and add alias. * sysdeps/alpha/fpu/fegetenv.c: Likewise. * sysdeps/alpha/fpu/fesetenv.c: Likewise. * sysdeps/alpha/fpu/feupdateenv.c: Likewise. * sysdeps/alpha/fpu/fgetexcptflg.c: Likewise. * sysdeps/alpha/fpu/fraiseexcpt.c: Likewise. * sysdeps/alpha/fpu/fsetexcptflg.c: Likewise. * sysdeps/arm/fpu/fclrexcpt.c: Likewise. * sysdeps/arm/fpu/fegetenv.c: Likewise. * sysdeps/arm/fpu/fesetenv.c: Likewise. * sysdeps/arm/fpu/fraiseexcpt.c: Likewise. * sysdeps/arm/fpu/fsetexcptflg.c: Likewise. * sysdeps/generic/fclrexcpt.c: Likewise. * sysdeps/generic/fegetenv.c: Likewise. * sysdeps/generic/fesetenv.c: Likewise. * sysdeps/generic/feupdateenv.c: Likewise. * sysdeps/generic/fgetexcptflg.c: Likewise. * sysdeps/generic/fraiseexcpt.c: Likewise. * sysdeps/generic/fsetexcptflg.c: Likewise. * sysdeps/i386/fpu/fclrexcpt.c: Likewise. * sysdeps/i386/fpu/fegetenv.c: Likewise. * sysdeps/i386/fpu/fesetenv.c: Likewise. * sysdeps/i386/fpu/feupdateenv.c: Likewise. * sysdeps/i386/fpu/fgetexcptflg.c: Likewise. * sysdeps/i386/fpu/fraiseexcpt.c: Likewise. * sysdeps/i386/fpu/fsetexcptflg.c: Likewise. * sysdeps/m68k/fpu/fclrexcpt.c: Likewise. * sysdeps/m68k/fpu/fegetenv.c: Likewise. * sysdeps/m68k/fpu/fesetenv.c: Likewise. * sysdeps/m68k/fpu/feupdateenv.c: Likewise. * sysdeps/m68k/fpu/fgetexcptflg.c: Likewise. * sysdeps/m68k/fpu/fraiseexcpt.c: Likewise. * sysdeps/m68k/fpu/fsetexcptflg.c: Likewise. * sysdeps/mips/fclrexcpt.c: Likewise. * sysdeps/mips/fegetenv.c: Likewise. * sysdeps/mips/fesetenv.c: Likewise. * sysdeps/mips/feupdateenv.c: Likewise. * sysdeps/mips/fgetexcptflg.c: Likewise. * sysdeps/powerpc/fclrexcpt.c: Likewise. * sysdeps/powerpc/fegetenv.c: Likewise. * sysdeps/powerpc/fesetenv.c: Likewise. * sysdeps/powerpc/feupdateenv.c: Likewise. * sysdeps/powerpc/fgetexcptflg.c: Likewise. * sysdeps/powerpc/fraiseexcpt.c: Likewise. * sysdeps/powerpc/fsetexcptflg.c: Likewise. * sysdeps/sparc/fpu/fclrexcpt.c: Likewise. * sysdeps/sparc/fpu/fegetenv.c: Likewise. * sysdeps/sparc/fpu/fesetenv.c: Likewise. * sysdeps/sparc/fpu/feupdateenv.c: Likewise. * sysdeps/sparc/fpu/fgetexcptflg.c: Likewise. * sysdeps/sparc/fpu/fraiseexcpt.c: Likewise. * sysdeps/sparc/fpu/fsetexcptflg.c: Likewise. * math/fenv.h: Adjust prototypes.: Likewise. * manual/arith.texi: Adjust documentation for these changes. * manual/arith.texi: Document feraiseexcept. * sysdeps/powerpc/fegetenv.c: Moved to... * sysdeps/powerpc/fpu/fegetenv.c: ...here. * sysdeps/powerpc/fegetround.c: Moved to... * sysdeps/powerpc/fpu/fegetround.c: ...here. * sysdeps/powerpc/feholdexcpt.c: Moved to... * sysdeps/powerpc/fpu/feholdexcpt.c: ...here. * sysdeps/powerpc/fesetenv.c: Moved to... * sysdeps/powerpc/fpu/fesetenv.c: ...here. * sysdeps/powerpc/fenv_libc.h: Moved to... * sysdeps/powerpc/fpu/fenv_libc.h: ...here. * sysdeps/powerpc/feupdateenv.c: Moved to... * sysdeps/powerpc/fpu/feupdateenv.c: ...here. * sysdeps/powerpc/fgetexcptflg.c: Moved to... * sysdeps/powerpc/fpu/fgetexcptflg.c: ...here. * sysdeps/powerpc/fraiseexcpt.c: Moved to... * sysdeps/powerpc/fpu/fraiseexcpt.c: ...here. * sysdeps/powerpc/fsetexcptflg.c: Moved to... * sysdeps/powerpc/fpu/fsetexcptflg.c: ...here. * sysdeps/powerpc/ftestexcept.c: Moved to... * sysdeps/powerpc/fpu/ftestexcept.c: ...here. * sysdeps/powerpc/fesetround.c: Moved to... * sysdeps/powerpc/fpu/fesetround.c: ...here * sysdeps/powerpc/fenv_const.c: Moved to... * sysdeps/powerpc/fpu/fenv_const.c: ...here. 1999-10-29 Jakub Jelinek <jakub@redhat.com> * stdlib/longlong.h: Avoid UDIV_TIME redefinition. * sysdeps/sparc/sparc32/dl-machine.h: Fix loading of SPARC v8plus libraries from statically linked programs. * sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: POSIX 199309 fix for sigaction on SPARC. Patches by David S. Miller <davem@redhat.com>. * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: Declare gregset_t and other required structures and defines for SPARC 64bit ABI as well, not only 32bit ABI. 1999-10-31 Andreas Jaeger <aj@suse.de> * sysdeps/sparc/sparc64/fpu/bits/huge_val.h: Replace __USE_ISOC9X by __USE_ISOC99 and update comments. * math/complex.h: Update comments for ISO C99. * math/fenv.h: Likewise. * math/test-fenv.c: Likewise. * math/tgmath.h: Likewise. * libio/stdio.h: Likewise. * posix/sys/types.h: Likewise. * sysdeps/generic/inttypes.h: Likewise. * sysdeps/generic/stdint.h: Likewise. 1999-10-31 Ulrich Drepper <drepper@cygnus.com>
		
			
				
	
	
		
			270 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
 | |
|    This file is part of the GNU C Library.
 | |
| 
 | |
|    The GNU C Library is free software; you can redistribute it and/or
 | |
|    modify it under the terms of the GNU Library General Public License as
 | |
|    published by the Free Software Foundation; either version 2 of the
 | |
|    License, or (at your option) any later version.
 | |
| 
 | |
|    The GNU C Library is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|    Library General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU Library General Public
 | |
|    License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | |
|    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | |
|    Boston, MA 02111-1307, USA.  */
 | |
| 
 | |
| #ifndef _SYS_UCONTEXT_H
 | |
| #define _SYS_UCONTEXT_H	1
 | |
| 
 | |
| #include <features.h>
 | |
| #include <signal.h>
 | |
| #include <bits/wordsize.h>
 | |
| 
 | |
| #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
 | |
| 
 | |
| 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;
 | |
| };
 | |
| 
 | |
| 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;
 | |
| } mcontext_t;
 | |
| 
 | |
| typedef struct ucontext {
 | |
| 	struct ucontext		*uc_link;
 | |
| 	unsigned long		uc_flags;
 | |
| 	unsigned long		uc_sigmask;
 | |
| 	mcontext_t		uc_mcontext;
 | |
| } ucontext_t;
 | |
| 
 | |
| #endif /* __WORDISIZE == 64 */
 | |
| 
 | |
| /*
 | |
|  * 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)
 | |
| 
 | |
| /*
 | |
|  * A gregset_t is defined as an array type for compatibility with the reference
 | |
|  * source. This is important due to differences in the way the C language
 | |
|  * treats arrays and structures as parameters.
 | |
|  *
 | |
|  * Note that NGREG is really (sizeof (struct regs) / sizeof (greg_t)),
 | |
|  * but that the ABI defines it absolutely to be 21 (resp. 19).
 | |
|  */
 | |
| 
 | |
| #if __WORDSIZE == 64
 | |
| 
 | |
| #define REG_ASI	(19)
 | |
| #define REG_FPRS (20)
 | |
| 
 | |
| #define NGREG   21
 | |
| typedef long greg_t;
 | |
| 
 | |
| #else /* __WORDSIZE == 32 */
 | |
| 
 | |
| #define NGREG   19
 | |
| typedef int greg_t;
 | |
| 
 | |
| #endif /* __WORDSIZE == 32 */
 | |
| 
 | |
| typedef greg_t  gregset_t[NGREG];
 | |
| 
 | |
| /*
 | |
|  * The following structures define how a register window can appear on the
 | |
|  * stack. This structure is available (when required) through the `gwins'
 | |
|  * field of an mcontext (nested within ucontext). SPARC_MAXWINDOW is the
 | |
|  * maximum number of outstanding regiters window defined in the SPARC
 | |
|  * architecture (*not* implementation).
 | |
|  */
 | |
| #define SPARC_MAXREGWINDOW	31	/* max windows in SPARC arch. */
 | |
| struct  rwindow
 | |
|   {
 | |
|     greg_t rw_local[8];			/* locals */
 | |
|     greg_t rw_in[8];			/* ins */
 | |
|   };
 | |
| 
 | |
| #define rw_fp   rw_in[6]		/* frame pointer */
 | |
| #define rw_rtn  rw_in[7]		/* return address */
 | |
| 
 | |
| typedef struct gwindows
 | |
|   {
 | |
|     int            wbcnt;
 | |
|     int           *spbuf[SPARC_MAXREGWINDOW];
 | |
|     struct rwindow wbuf[SPARC_MAXREGWINDOW];
 | |
|   } gwindows_t;
 | |
| 
 | |
| /*
 | |
|  * Floating point definitions.
 | |
|  */
 | |
| 
 | |
| #define MAXFPQ	16	/* max # of fpu queue entries currently supported */
 | |
| 
 | |
| /*
 | |
|  * struct fq defines the minimal format of a floating point instruction queue
 | |
|  * entry. The size of entries in the floating point queue are implementation
 | |
|  * dependent. The union FQu is guarenteed to be the first field in any ABI
 | |
|  * conformant system implementation. Any additional fields provided by an
 | |
|  * implementation should not be used applications designed to be ABI conformant. */
 | |
| 
 | |
| struct fpq
 | |
|   {
 | |
|     unsigned long *fpq_addr;		/* address */
 | |
|     unsigned long fpq_instr;		/* instruction */
 | |
|   };
 | |
| 
 | |
| struct fq
 | |
|   {
 | |
|     union				/* FPU inst/addr queue */
 | |
|       {
 | |
|         double whole;
 | |
|         struct fpq fpq;
 | |
|       } 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
 | |
| 
 | |
| #if __WORDSIZE == 64
 | |
| 
 | |
| typedef struct fpu
 | |
|   {
 | |
|     union {				/* FPU floating point regs */
 | |
|       unsigned		fpu_regs[32];	/* 32 singles */
 | |
|       double            fpu_dregs[16];	/* 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 */
 | |
|   } fpregset_t;
 | |
| 
 | |
| #else /* __WORDSIZE == 32 */
 | |
| 
 | |
| typedef struct fpu
 | |
|   {
 | |
|     union {				/* FPU floating point regs */
 | |
|       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 */
 | |
|   } fpregset_t;
 | |
| 
 | |
| /*
 | |
|  * The following structure is for associating extra register state with
 | |
|  * the ucontext structure and is kept within the uc_mcontext filler area.
 | |
|  *
 | |
|  * If (xrs_id == XRS_ID) then the xrs_ptr field is a valid pointer to
 | |
|  * extra register state. The exact format of the extra register state
 | |
|  * pointed to by xrs_ptr is platform-dependent.
 | |
|  *
 | |
|  * Note: a platform may or may not manage extra register state.
 | |
|  */
 | |
| typedef struct
 | |
|   {
 | |
|     unsigned int xrs_id;		/* indicates xrs_ptr validity */
 | |
|     void *       xrs_ptr;		/* ptr to extra reg state */
 | |
|   } xrs_t;
 | |
| 
 | |
| #define XRS_ID	0x78727300		/* the string "xrs" */
 | |
| 
 | |
| 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];
 | |
|   } mcontext_t;
 | |
| 
 | |
| 
 | |
| /* Userlevel context.  */
 | |
| typedef struct ucontext
 | |
|   {
 | |
|     unsigned long   uc_flags;
 | |
|     struct ucontext *uc_link;
 | |
|     unsigned long   uc_sigmask[4];	/* a svr4 sigset_t */
 | |
|     stack_t         uc_stack;
 | |
|     mcontext_t      uc_mcontext;
 | |
|     long            uc_filler[23];
 | |
|   } ucontext_t;
 | |
| 
 | |
| #endif /* __WORDSIZE == 32 */
 | |
| #endif /* sys/ucontext.h */
 |