* 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 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>
This commit is contained in:
Richard Henderson 1998-03-01 01:19:00 +00:00
parent 41df5ed40a
commit 489b7d4bfc
7 changed files with 204 additions and 34 deletions

View File

@ -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.

View 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. */

View File

@ -47,9 +47,6 @@ struct termios
#define VSWTC 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VDSUSP 11 /* SunOS POSIX nicety I do believe... */
#define VREPRINT 12
@ -113,7 +110,7 @@ struct termios
#define WRAP 0x00020000 /* SUNOS specific */
/* c_cflag bit meaning */
#define CBAUD 0x0000000f
#define CBAUD 0x0000100f
#define B0 0x00000000 /* hang up */
#define B50 0x00000001
#define B75 0x00000002
@ -143,14 +140,13 @@ 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 CIBAUD 0x100f0000 /* input baud rate (not used) */
#define CMSPAR 0x40000000 /* mark or space (stick) parity */
#define CRTSCTS 0x80000000 /* flow control */
/* c_lflag bits */

View 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;

View 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

View File

@ -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 */

View File

@ -1,6 +1,6 @@
/* Define errno */
.bss
.section .bss
.globl errno
.align 4
errno: .space 4