* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Don't include
authorrth <rth>
Sun, 1 Mar 1998 01:18:53 +0000 (01:18 +0000)
committerrth <rth>
Sun, 1 Mar 1998 01:18:53 +0000 (01:18 +0000)
        kernel_termios.h.
        * sysdeps/unix/sysv/linux/sparc/bits/termios.h (CBAUD, CIBAUD): Fix.
        Clean up random whitespace.
        * sysdeps/unix/sysv/linux/sparc/sparc32/brk.c: Tidy the asm.
        * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Use std on the args.
        * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S: Fix use of .bss.
        * sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h: New file.

ChangeLog
sysdeps/unix/sysv/linux/sparc/bits/ioctls.h
sysdeps/unix/sysv/linux/sparc/bits/termios.h
sysdeps/unix/sysv/linux/sparc/sparc32/brk.c
sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S

index e03023d..46fe838 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
-1998-03-01  Richard Henderson  <rth@cygnus.com>
+1998-03-01 09:11  Richard Henderson  <rth@cygnus.com>
+
+       * sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Don't include
+       kernel_termios.h.
+       * sysdeps/unix/sysv/linux/sparc/bits/termios.h (CBAUD, CIBAUD): Fix.
+       Clean up random whitespace.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/brk.c: Tidy the asm.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Use std on the args.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S: Fix use of .bss.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h: New file.
+
+1998-03-01 08:31  Richard Henderson  <rth@cygnus.com>
 
        * shlib-versions: Match alpha*.
        * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add adjtimex.
index 1a8d5f6..b0759ef 100644 (file)
@@ -22,7 +22,6 @@
 
 /* Use the definitions from the kernel header files.  */
 #include <asm/ioctls.h>
-#include <kernel_termios.h>
 
 /* Oh well, this is necessary since the kernel data structure is
    different from the user-level version.  */
index c797f49..9b2cd48 100644 (file)
@@ -47,11 +47,8 @@ struct termios
 #define VSWTC    7
 #define VSTART   8
 #define VSTOP    9
-
-
-
 #define VSUSP    10
-#define VDSUSP   11  /* SunOS POSIX nicety I do believe... */
+#define VDSUSP   11            /* SunOS POSIX nicety I do believe... */
 #define VREPRINT 12
 #define VDISCARD 13
 #define VWERASE  14
@@ -109,12 +106,12 @@ struct termios
 #define FFDLY  0x00008000
 #define   FF0  0x00000000
 #define   FF1  0x00008000
-#define PAGEOUT 0x00010000  /* SUNOS specific */
-#define WRAP    0x00020000  /* SUNOS specific */
+#define PAGEOUT 0x00010000     /* SUNOS specific */
+#define WRAP    0x00020000     /* SUNOS specific */
 
 /* c_cflag bit meaning */
-#define CBAUD  0x0000000f
-#define  B0    0x00000000   /* hang up */
+#define CBAUD  0x0000100f
+#define  B0    0x00000000      /* hang up */
 #define  B50   0x00000001
 #define  B75   0x00000002
 #define  B110  0x00000003
@@ -143,15 +140,14 @@ struct termios
 #define PARODD 0x00000200
 #define HUPCL  0x00000400
 #define CLOCAL 0x00000800
-/* We'll never see these speeds with the Zilogs' but for completeness... */
 #define CBAUDEX 0x00010000
 #define  B57600  0x00010001
 #define  B115200 0x00010002
 #define  B230400 0x00010003
 #define  B460800 0x00010004
-#define CIBAUD   0x000f0000  /* input baud rate (not used) */
-#define CMSPAR   010000000000          /* mark or space (stick) parity */
-#define CRTSCTS          0x80000000  /* flow control */
+#define CIBAUD 0x100f0000      /* input baud rate (not used) */
+#define CMSPAR 0x40000000      /* mark or space (stick) parity */
+#define CRTSCTS        0x80000000      /* flow control */
 
 /* c_lflag bits */
 #define ISIG   0x00000001
@@ -166,7 +162,7 @@ struct termios
 #define ECHOCTL        0x00000200
 #define ECHOPRT        0x00000400
 #define ECHOKE 0x00000800
-#define DEFECHO 0x00001000  /* SUNOS thing, what is it? */
+#define DEFECHO 0x00001000     /* SUNOS thing, what is it? */
 #define FLUSHO 0x00002000
 #define PENDIN 0x00004000
 #define IEXTEN 0x00008000
index 8f079bf..7e784ca 100644 (file)
@@ -1,5 +1,5 @@
 /* brk system call for Linux/SPARC.
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
 
@@ -35,13 +35,12 @@ __brk (void *addr)
 {
   void *newbrk, *scratch;
 
-  asm ("mov %1, %%g1\n\t"
-       "mov %2, %%o0\n\t"
-       "t 0x10\n\t"
-       "mov %%o0, %0\n\t"
-       : "=r" (newbrk)
-       : "0" (__NR_brk), "r" (addr)
-       : "g1", "o0");
+  {
+    register void *o0 __asm__("%o0") = addr;
+    register int g1 __asm__("%g1") = __NR_brk;
+    __asm ("t 0x10" : "=r"(o0) : "r"(g1), "0"(o0) : "cc");
+    newbrk = o0;
+  }
 
   __curbrk = newbrk;
 
index 8d6fd77..db8eb4e 100644 (file)
@@ -48,18 +48,11 @@ ENTRY (__socket)
 
        /* Drop up to 6 arguments (recvfrom) into the memory allocated by
           the caller for varargs, since that's really what we have.  */
-       st %o0, [%sp + 68 + 0]
-       st %o1, [%sp + 68 + 4]
+       std %o0, [%sp + 68 + 0]
 #if NARGS > 2
-       st %o2, [%sp + 68 + 8]
-#if NARGS > 3
-       st %o3, [%sp + 68 + 12]
+       std %o2, [%sp + 68 + 8]
 #if NARGS > 4
-       st %o4, [%sp + 68 + 16]
-#if NARGS > 5
-       st %o5, [%sp + 68 + 20]
-#endif
-#endif
+       std %o4, [%sp + 68 + 16]
 #endif
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h
new file mode 100644 (file)
index 0000000..d672a94
--- /dev/null
@@ -0,0 +1,172 @@
+/* Copyright (C) 1998 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>
+
+/*
+ * 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 19.
+ */
+#define NGREG   19
+
+typedef int greg_t;
+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
+
+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 /* sys/ucontext.h */
index d62a28f..e871e1e 100644 (file)
@@ -1,6 +1,6 @@
 /* Define errno */
 
-       .bss
+.section .bss
        .globl  errno
        .align  4
 errno: .space  4