aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/sigaction.h17
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sys/ucontext.h37
2 files changed, 49 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
index 0797a5cbf4..d00990569f 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
@@ -1,5 +1,5 @@
/* The proper definitions for Linux/SPARC sigaction.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 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
@@ -24,8 +24,21 @@
/* Structure describing the action to be taken when a signal arrives. */
struct sigaction
{
- /* Signal handler. */
+ /* Signal handler. */
+#ifdef __USE_POSIX199309
+ union
+ {
+ /* Used if SA_SIGINFO is not set. */
+ __sighandler_t sa_handler;
+ /* Used if SA_SIGINFO is set. */
+ void (*sa_sigaction) (int, siginfo_t *, void *);
+ }
+ __sigaction_handler;
+# define sa_handler __sigaction_handler.sa_handler
+# define sa_sigaction __sigaction_handler.sa_sigaction
+#else
__sighandler_t sa_handler;
+#endif
/* Additional set of signals to be blocked. */
__sigset_t sa_mask;
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
index 03ec8ae791..58295ff5b1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
@@ -85,7 +85,7 @@ typedef struct ucontext {
mcontext_t uc_mcontext;
} ucontext_t;
-#else /* __WORDSIZE == 32 */
+#endif /* __WORDISIZE == 64 */
/*
* Location of the users' stored registers relative to R0.
@@ -117,11 +117,24 @@ typedef struct ucontext {
* 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 19.
+ * but that the ABI defines it absolutely to be 21 (resp. 19).
*/
-#define NGREG 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];
/*
@@ -182,6 +195,24 @@ struct fq
#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 */