1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-06-06 11:41:02 +03:00

Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>

* sysdeps/unix/sysv/linux/alpha/speed.c (speeds): Add entry for
 	460800 baud.

	* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add
 	alpha/ptrace.h.
	* sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h: New file.

	* sysdeps/libm-ieee754/s_scalbnf.c: Call __scalbnf instead of
 	scalbnf.

	* sysdeps/generic/sigset.h (__sigismember, __sigaddset,
 	__sigdelset): Add declaration to keep ANSI compilers quiet.

	* sysdeps/alpha/__math.h (cabs): Remove underscores from struct
 	__cabs_complex member names in call to __hypot().

	* sysdeps/alpha/copysign.S, sysdeps/alpha/fabs.S: New files.

	* sysdeps/alpha/divrem.h: Renamed from sysdeps/alpha/divrem.S to avoid
 	name collision with math library.

	* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
	sysdeps/alpha/divqu.S, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
	sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S: Include divrem.h instead
	of divrem.S.

	* sysdeps/unix/alpha/sysdep.h: Include regdef.h.  Define LEAF macro
	to simplify declaration of leaf functions.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-setjmp.S, sysdeps/alpha/ffs.S,
 	sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
 	sysdeps/alpha/udiv_qrnnd.S, sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/pipe.S,
 	sysdeps/unix/sysv/linux/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Remove include of regdef.h.
  	sysdep.h includes it now. Replace ENTRY by LEAF with appropriate
 	framesize declaration.  Replace "lda pv,sym/jsr pv" by "jsr sym".

	* sysdeps/unix/sysv/linux/alpha/sysdep.h (NO_UNDERSCORES): Don't
	define.

	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Added getsockopt,
	ptrace, and sysctl.

	* sysdeps/unix/sysv/linux/alpha/profil-counter.h: File removed.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Modify to support
 	dynamic recognition of platform type.
	(_bus_base): New function.

	* sysdeps/unix/sysv/linux/alpha/llseek.S: New file.

	* sunrpc/rpc/rpc.h, sunrpc/rpc/svc.h: Avoid nested comments since
 	they produce ugly warnings by gcc.

	* posix/sys/types.h [__USE_MISC]: Add typedef for ulong.

Wed Mar 27 10:26:21 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: Must establish global pointer before
 	address of __sigsetjmp_aux can be loaded.
This commit is contained in:
Roland McGrath 1996-05-23 05:33:49 +00:00
parent fa0bc87c32
commit 510ca033d6
42 changed files with 586 additions and 246 deletions

View File

@ -1,3 +1,74 @@
Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/speed.c (speeds): Add entry for
460800 baud.
* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.
* sysdeps/unix/sysv/linux/Makefile (headers): Add
alpha/ptrace.h.
* sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h: New file.
* sysdeps/libm-ieee754/s_scalbnf.c: Call __scalbnf instead of
scalbnf.
* sysdeps/generic/sigset.h (__sigismember, __sigaddset,
__sigdelset): Add declaration to keep ANSI compilers quiet.
* sysdeps/alpha/__math.h (cabs): Remove underscores from struct
__cabs_complex member names in call to __hypot().
* sysdeps/alpha/copysign.S, sysdeps/alpha/fabs.S: New files.
* sysdeps/alpha/divrem.h: Renamed from sysdeps/alpha/divrem.S to avoid
name collision with math library.
* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
sysdeps/alpha/divqu.S, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S: Include divrem.h instead
of divrem.S.
* sysdeps/unix/alpha/sysdep.h: Include regdef.h. Define LEAF macro
to simplify declaration of leaf functions.
* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
sysdeps/alpha/bsd-setjmp.S, sysdeps/alpha/ffs.S,
sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
sysdeps/alpha/udiv_qrnnd.S, sysdeps/unix/sysv/linux/alpha/brk.S,
sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
sysdeps/unix/sysv/linux/alpha/pipe.S,
sysdeps/unix/sysv/linux/sigsuspend.S,
sysdeps/unix/sysv/linux/alpha/syscall.S,
sysdeps/unix/sysv/linux/alpha/sysdep.S: Remove include of regdef.h.
sysdep.h includes it now. Replace ENTRY by LEAF with appropriate
framesize declaration. Replace "lda pv,sym/jsr pv" by "jsr sym".
* sysdeps/unix/sysv/linux/alpha/sysdep.h (NO_UNDERSCORES): Don't
define.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Added getsockopt,
ptrace, and sysctl.
* sysdeps/unix/sysv/linux/alpha/profil-counter.h: File removed.
* sysdeps/unix/sysv/linux/alpha/ioperm.c: Modify to support
dynamic recognition of platform type.
(_bus_base): New function.
* sysdeps/unix/sysv/linux/alpha/llseek.S: New file.
* sunrpc/rpc/rpc.h, sunrpc/rpc/svc.h: Avoid nested comments since
they produce ugly warnings by gcc.
* posix/sys/types.h [__USE_MISC]: Add typedef for ulong.
Wed Mar 27 10:26:21 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/alpha/setjmp.S: Must establish global pointer before
address of __sigsetjmp_aux can be loaded.
Wed May 22 22:10:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> Wed May 22 22:10:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/canonicalize.c: New file. * stdlib/canonicalize.c: New file.

View File

@ -64,6 +64,7 @@ __BEGIN_DECLS
#ifdef __USE_MISC #ifdef __USE_MISC
/* Old compatibility names for C types. */ /* Old compatibility names for C types. */
typedef unsigned long int ulong;
typedef unsigned short int ushort; typedef unsigned short int ushort;
typedef unsigned int uint; typedef unsigned int uint;
#endif #endif

View File

@ -56,7 +56,9 @@
* Uncomment-out the next line if you are building the rpc library with * Uncomment-out the next line if you are building the rpc library with
* DES Authentication (see the README file in the secure_rpc/ directory). * DES Authentication (see the README file in the secure_rpc/ directory).
*/ */
/*#include <rpc/auth_des.h> /* protocol for des style cred */ #if 0
#include <rpc/auth_des.h> /* protocol for des style cred */
#endif
/* Server side only remote procedure callee */ /* Server side only remote procedure callee */
#include <rpc/svc.h> /* service manager and multiplexer */ #include <rpc/svc.h> /* service manager and multiplexer */

View File

@ -151,7 +151,7 @@ struct svc_req {
* u_long prog; * u_long prog;
* u_long vers; * u_long vers;
* void (*dispatch)(); * void (*dispatch)();
* int protocol; /* like TCP or UDP, zero means do not register * int protocol; like TCP or UDP, zero means do not register
*/ */
extern bool_t svc_register(); extern bool_t svc_register();

View File

@ -46,7 +46,7 @@ extern __inline double
cabs (struct __cabs_complex __z) cabs (struct __cabs_complex __z)
{ {
extern double __hypot (double, double); extern double __hypot (double, double);
return __hypot(__z.__x, __z.__y); return __hypot(__z.x, __z.y);
} }
#endif #endif

View File

@ -34,18 +34,15 @@ holds the return address of the function's caller (selfpc and frompc,
respectively in gmon.c language...). */ respectively in gmon.c language...). */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
# include <regdef.h>
#endif
#undef ret /* discard `ret' as defined in sysdep.h */ #undef ret /* discard `ret' as defined in sysdep.h */
.set noat .set noat
.set noreorder .set noreorder
ENTRY(_mcount) LEAF(_mcount, 0xb0)
.prologue 0
subq sp, 0xb0, sp subq sp, 0xb0, sp
stq a0, 0x00(sp) stq a0, 0x00(sp)
mov ra, a0 # a0 = caller-pc mov ra, a0 # a0 = caller-pc

View File

@ -24,11 +24,6 @@ caller-saved (call-used) registers (except for argument registers
a1-a5). */ a1-a5). */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
# include <regdef.h>
#endif
/* /*
* These offsets should match with "struct bb" declared in gcc/libgcc2.c. * These offsets should match with "struct bb" declared in gcc/libgcc2.c.
@ -40,12 +35,19 @@ a1-a5). */
.set noreorder .set noreorder
ENTRY(__bb_init_func) ENTRY(__bb_init_func)
.prologue 0
ldq t0, ZERO_WORD(a0) /* t0 <- blocks->zero_word */ ldq t0, ZERO_WORD(a0) /* t0 <- blocks->zero_word */
beq t0, init /* not initialized yet -> */ beq t0, init /* not initialized yet -> */
ret ret
.end __bb_init_func
init: subq sp, 0x38, sp LEAF(init, 0x38)
subq sp, 0x38, sp
.prologue 0
stq pv, 0x30(sp) stq pv, 0x30(sp)
br pv, 1f br pv, 1f
1: ldgp gp, 0(pv) 1: ldgp gp, 0(pv)
@ -81,5 +83,5 @@ init: subq sp, 0x38, sp
leave: ldq pv, 0x30(sp) leave: ldq pv, 0x30(sp)
addq sp, 0x38, sp addq sp, 0x38, sp
ret ret
.end __bb_init_func .end init

View File

@ -23,8 +23,8 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
ENTRY (setjmp) ENTRY(setjmp)
lda $27, __sigsetjmp /* Load address to jump to. */ lda $27, __sigsetjmp /* Load address to jump to. */
bis $31, 1, $17 /* Pass a second argument of one. */ bis $31, 1, $17 /* Pass a second argument of one. */
jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp. */ jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp. */
.end setjmp .end setjmp

View File

@ -1,7 +1,6 @@
/* Low-level statistical profiling support function. Mostly POSIX.1 version. /* Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by David Mosberger <davidm@azstarnet.com>
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by David Mosberger <davidm@azstarnet.com>
The GNU C Library is free software; you can redistribute it and/or 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 modify it under the terms of the GNU Library General Public License as
@ -18,11 +17,13 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <asm/sigcontext.h> #include <sysdep.h>
void ENTRY(__copysign)
profil_counter (int signal, long a1, long a2, long a3, long a4, long a5, .prologue 0
struct sigcontext_struct sc) cpys $f17,$f16,$f0
{ ret
profil_count((void *) sc.sc_pc);
} .end __copysign
weak_alias(__copysign, copysign)

View File

@ -3,4 +3,4 @@
#define SIGNED 1 #define SIGNED 1
#define FUNC_NAME __divl #define FUNC_NAME __divl
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 0 #define SIGNED 0
#define FUNC_NAME __divlu #define FUNC_NAME __divlu
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 1 #define SIGNED 1
#define FUNC_NAME __divq #define FUNC_NAME __divq
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 0 #define SIGNED 0
#define FUNC_NAME __divqu #define FUNC_NAME __divqu
#include "divrem.S" #include "divrem.h"

View File

@ -103,10 +103,29 @@ clobbered (assembly temporary), anything else must be saved. */
.ent FUNC_NAME .ent FUNC_NAME
.globl FUNC_NAME .globl FUNC_NAME
#define FRAME_SIZE 0x30
.align 5 .align 5
FUNC_NAME: FUNC_NAME:
# define FRAME_SIZE 0x30 #ifdef PROF
.frame sp,FRAME_SIZE,ra,0 lda sp, -0x18(sp)
stq ra, 0x00(sp)
stq pv, 0x08(sp)
stq gp, 0x10(sp)
br AT, 1f
1: ldgp gp, 0(AT)
lda AT, _mcount
mov retaddr, ra
jsr AT, (AT), _mcount
ldq ra, 0x00(sp)
ldq pv, 0x08(sp)
ldq gp, 0x10(sp)
lda sp, 0x18(sp)
#endif
.frame sp, FRAME_SIZE, ra, 0
lda sp,-FRAME_SIZE(sp) lda sp,-FRAME_SIZE(sp)
.prologue 1 .prologue 1
stq arg1,0x00(sp) stq arg1,0x00(sp)

27
sysdeps/alpha/fabs.S Normal file
View File

@ -0,0 +1,27 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Mosberger <davidm@azstarnet.com>
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
ENTRY(fabs)
.prologue 0
cpys $f31,$f16,$f0
ret
.end fabs

View File

@ -22,11 +22,6 @@ Cambridge, MA 02139, USA. */
architecture. */ architecture. */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
#include <regdef.h>
#endif
.set noreorder .set noreorder
.set noat .set noat

View File

@ -17,22 +17,18 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
#include <regdef.h>
#endif
ENTRY(__htonl) ENTRY(__htonl)
extlh a0,5,t1 # t1 = dd000000 .prologue 0
zap a0,0xfd,t2 # t2 = 0000cc00 extlh a0, 5, t1 # t1 = dd000000
sll t2,5,t2 # t2 = 00198000 zap a0, 0xfd, t2 # t2 = 0000cc00
s8addl t2,t1,t1 # t1 = ddcc0000 sll t2, 5, t2 # t2 = 00198000
zap a0,0xfb,t2 # t2 = 00bb0000 s8addl t2, t1, t1 # t1 = ddcc0000
srl t2,8,t2 # t2 = 0000bb00 zap a0, 0xfb, t2 # t2 = 00bb0000
extbl a0,3,v0 # v0 = 000000aa srl t2, 8, t2 # t2 = 0000bb00
or t1,v0,v0 # v0 = ddcc00aa extbl a0, 3, v0 # v0 = 000000aa
or t2,v0,v0 # v0 = ddccbbaa or t1, v0, v0 # v0 = ddcc00aa
or t2, v0, v0 # v0 = ddccbbaa
ret ret
.end __htonl .end __htonl

View File

@ -17,16 +17,12 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
#include <regdef.h>
#endif
ENTRY(__htons) ENTRY(__htons)
extwh a0,7,t1 # t1 = bb00 .prologue 0
extbl a0,1,v0 # v0 = 00aa extwh a0, 7, t1 # t1 = bb00
bis v0,t1,v0 # v0 = bbaa extbl a0, 1, v0 # v0 = 00aa
bis v0, t1, v0 # v0 = bbaa
ret ret
.end __htons .end __htons

View File

@ -35,16 +35,13 @@ For correctness consider that:
*/ */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
#include <regdef.h>
#endif
.set noreorder .set noreorder
.set noat .set noat
ENTRY(memchr) ENTRY(memchr)
.prologue 0
beq a2, not_found beq a2, not_found
ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned)
addq a0, a2, t4 addq a0, a2, t4

View File

@ -3,4 +3,4 @@
#define SIGNED 1 #define SIGNED 1
#define FUNC_NAME __reml #define FUNC_NAME __reml
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 0 #define SIGNED 0
#define FUNC_NAME __remlu #define FUNC_NAME __remlu
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 1 #define SIGNED 1
#define FUNC_NAME __remq #define FUNC_NAME __remq
#include "divrem.S" #include "divrem.h"

View File

@ -3,4 +3,4 @@
#define SIGNED 0 #define SIGNED 0
#define FUNC_NAME __remqu #define FUNC_NAME __remqu
#include "divrem.S" #include "divrem.h"

View File

@ -22,9 +22,12 @@ Cambridge, MA 02139, USA. */
reliably access the stack or frame pointers, so we pass them in as reliably access the stack or frame pointers, so we pass them in as
extra arguments. */ extra arguments. */
ENTRY (__sigsetjmp) ENTRY (__sigsetjmp)
ldgp $29, 0($27) ldgp $29, 0($27)
lda $27, __sigsetjmp_aux/* Load address to jump to. */ .prologue 1
bis $30, $30, $18 /* Pass SP as 3rd arg. */
bis $15, $15, $19 /* Pass FP as 4th arg. */ lda $27, __sigsetjmp_aux /* Load address to jump to. */
jmp $31, ($27), __sigsetjmp_aux /* Call __sigsetjmp_aux. */ bis $30, $30, $18 /* Pass SP as 3rd arg. */
bis $15, $15, $19 /* Pass FP as 4th arg. */
jmp $31, ($27), __sigsetjmp_aux /* Call __sigsetjmp_aux. */
.end __sigsetjmp .end __sigsetjmp

View File

@ -29,11 +29,6 @@ architecture:
binary search needs). */ binary search needs). */
#include <sysdep.h> #include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
#else
#include <regdef.h>
#endif
.set noreorder .set noreorder
.set noat .set noat

View File

@ -19,15 +19,15 @@
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
# MA 02111-1307, USA. # MA 02111-1307, USA.
#include <sysdep.h>
.set noreorder .set noreorder
.set noat .set noat
.text
.align 3 .text
.globl __udiv_qrnnd
.ent __udiv_qrnnd LEAF(__udiv_qrnnd, 0)
__udiv_qrnnd:
.frame $30,0,$26,0
.prologue 0 .prologue 0
#define cnt $2 #define cnt $2
#define tmp $3 #define tmp $3

View File

@ -50,6 +50,10 @@ typedef unsigned long int __sigset_t;
call we know fails with EINVAL (kludge city!), so as to avoid referring call we know fails with EINVAL (kludge city!), so as to avoid referring
to `errno' in this file (sigh). */ to `errno' in this file (sigh). */
extern __sigismember (__const __sigset_t *, int);
extern __sigaddset (__sigset_t *, int);
extern __sigdelset (__sigset_t *, int);
#ifndef _EXTERN_INLINE #ifndef _EXTERN_INLINE
#define _EXTERN_INLINE extern __inline #define _EXTERN_INLINE extern __inline
#endif #endif

View File

@ -31,9 +31,9 @@ huge = 1.0e+30,
tiny = 1.0e-30; tiny = 1.0e-30;
#ifdef __STDC__ #ifdef __STDC__
float scalbnf (float x, int n) float __scalbnf (float x, int n)
#else #else
float scalbn (x,n) float __scalbnf (x,n)
float x; int n; float x; int n;
#endif #endif
{ {

View File

@ -20,20 +20,42 @@ Cambridge, MA 02139, USA. */
#ifdef ASSEMBLER #ifdef ASSEMBLER
#ifdef __linux__
# include <alpha/regdef.h>
#else
# include <regdef.h>
#endif
#ifdef __STDC__
#define LEAF(name, framesize) \
.globl name; \
.align 3; \
.ent name, 0; \
name##: \
.frame sp, framesize, ra
#else
#define LEAF(name, framesize) \
.globl name; \
.align 3; \
.ent name, 0; \
name/**/: \
.frame sp, framesize, ra
#endif
#ifdef __STDC__ #ifdef __STDC__
#define ENTRY(name) \ #define ENTRY(name) \
.globl name; \ .globl name; \
.align 3; \ .align 3; \
.ent name,0; \ .ent name, 0; \
name##: \ name##: \
.frame sp,0,ra .frame sp, 0, ra
#else #else
#define ENTRY(name) \ #define ENTRY(name) \
.globl name; \ .globl name; \
.align 3; \ .align 3; \
.ent name,0; \ .ent name, 0; \
name/**/: \ name/**/: \
.frame sp,0,ra .frame sp, 0, ra
#endif #endif
/* Note that while it's better structurally, going back to set errno /* Note that while it's better structurally, going back to set errno
@ -45,17 +67,16 @@ Cambridge, MA 02139, USA. */
.align 3; \ .align 3; \
.ent name,0; \ .ent name,0; \
\ \
1: br gp,2f; \ 1: br gp, 2f; \
2: ldgp gp,0(gp); \ 2: ldgp gp, 0(gp); \
lda pv,syscall_error; \ jmp zero, syscall_error; \
jmp zero,(pv); \
\ \
name##: \ name##: \
ldi v0,SYS_ify(syscall_name); \ ldi v0, SYS_ify(syscall_name); \
.set noat; \ .set noat; \
call_pal PAL_callsys; \ call_pal PAL_callsys; \
.set at; \ .set at; \
bne a3,1b; \ bne a3, 1b; \
3: 3:
#else #else
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
@ -63,17 +84,16 @@ name##: \
.align 3; \ .align 3; \
.ent name,0; \ .ent name,0; \
\ \
1: br gp,2f; \ 1: br gp, 2f; \
2: ldgp gp,0(gp); \ 2: ldgp gp, 0(gp); \
lda pv,syscall_error; \ jmp zero, syscall_error; \
jmp zero,(pv); \
\ \
name/**/: \ name/**/: \
ldi v0,SYS_ify(syscall_name); \ ldi v0, SYS_ify(syscall_name); \
.set noat; \ .set noat; \
call_pal PAL_callsys; \ call_pal PAL_callsys; \
.set at; \ .set at; \
bne a3,1b; \ bne a3, 1b; \
3: 3:
#endif #endif

View File

@ -0,0 +1,18 @@
#ifndef __alpha_ptrace_h__
#define __alpha_ptrace_h__
/*
* Mostly for OSF/1 compatibility.
*/
#define REG_BASE 0
#define NGP_REGS 32
#define NFP_REGS 32
#define GPR_BASE REG_BASE
#define FPR_BASE (GPR_BASE+NGP_REGS)
#define PC (FPR_BASE+NFP_REGS)
#define SPR_PS (PC+1)
#define NPTRC_REGS (SPR_PS+1)
#endif /* __alpha_ptrace_h__ */

View File

@ -36,24 +36,23 @@ __curbrk:
.quad _end .quad _end
.text .text
ENTRY(__brk) LEAF(__brk, 0)
ldgp gp, 0(t12) ldgp gp, 0(t12)
.prologue 1 .prologue 1
ldi v0, __NR_brk ldi v0, __NR_brk
call_pal PAL_callsys call_pal PAL_callsys
subq a0, v0, t0 subq a0, v0, t0
bne t0, error bne t0, error
/* Update __curbrk and return cleanly. */ /* Update __curbrk and return cleanly. */
stl a0, __curbrk stl a0, __curbrk
mov zero, v0 mov zero, v0
ret ret
/* What a horrible way to die. */ /* What a horrible way to die. */
error: ldi v0, ENOMEM error: ldi v0, ENOMEM
lda pv, syscall_error jmp zero, syscall_error
jmp zero,(pv)
.end __brk .end __brk

View File

@ -21,9 +21,10 @@ Cambridge, MA 02139, USA. */
#define GSI_IEEE_FP_CONTROL 45 #define GSI_IEEE_FP_CONTROL 45
.text .text
ENTRY(__ieee_get_fp_control)
LEAF(__ieee_get_fp_control, 8)
lda sp, -8(sp) lda sp, -8(sp)
.prologue 1 .prologue 0
mov sp, a1 mov sp, a1
ldi a0, GSI_IEEE_FP_CONTROL ldi a0, GSI_IEEE_FP_CONTROL
@ -36,8 +37,9 @@ ENTRY(__ieee_get_fp_control)
ret ret
error: lda sp, 8(sp) error: lda sp, 8(sp)
lda pv, syscall_error br gp, 1f
jmp zero,(pv) 1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end __ieee_get_fp_control .end __ieee_get_fp_control

View File

@ -20,10 +20,9 @@ Cambridge, MA 02139, USA. */
#define SSI_IEEE_FP_CONTROL 14 #define SSI_IEEE_FP_CONTROL 14
.text LEAF(__ieee_set_fp_control, 8)
ENTRY(__ieee_set_fp_control)
lda sp, -8(sp) lda sp, -8(sp)
.prologue 1 .prologue 0
stq a0, 0(sp) stq a0, 0(sp)
mov sp, a1 mov sp, a1
@ -36,8 +35,9 @@ ENTRY(__ieee_set_fp_control)
bne a3, error bne a3, error
ret ret
error: lda pv, syscall_error error: br gp, 1f
jmp zero,(pv) 1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end __ieee_set_fp_control .end __ieee_set_fp_control

View File

@ -35,31 +35,35 @@ I/O address space that's 512MB large!). */
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <asm/io.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/system.h> #include <asm/system.h>
#undef inb #define PATH_ALPHA_SYSTYPE "/etc/alpha_systype"
#undef inw #define PATH_CPUINFO "/proc/cpuinfo"
#undef inl
#undef outb
#undef outw
#undef outl
#define PATH_CPUINFO "/proc/cpuinfo"
#define MAX_PORT 0x10000 #define MAX_PORT 0x10000
#define vuip volatile unsigned int * #define vuip volatile unsigned int *
#define JENSEN_IO_BASE (IDENT_ADDR + 0x0300000000UL) #define JENSEN_IO_BASE (0xfffffc0300000000UL)
#define APECS_IO_BASE (IDENT_ADDR + 0x01c0000000UL) #define JENSEN_MEM (0xfffffc0200000000UL) /* sparse!! */
#define ALCOR_IO_BASE (IDENT_ADDR + 0x8580000000UL)
/*
* With respect to the I/O architecture, APECS and LCA are identical,
* so the following defines apply to LCA as well.
*/
#define APECS_IO_BASE (0xfffffc01c0000000UL)
#define APECS_DENSE_MEM (0xfffffc0300000000UL)
#define ALCOR_IO_BASE (0xfffffc8580000000UL)
#define ALCOR_DENSE_MEM (0xfffffc8600000000UL)
enum { enum {
IOSYS_JENSEN = 0, IOSYS_APECS = 1, IOSYS_ALCOR = 2 IOSYS_JENSEN = 0, IOSYS_APECS = 1, IOSYS_ALCOR = 2
@ -78,58 +82,75 @@ struct ioswtch {
static struct platform { static struct platform {
const char *name; const char *name;
int io_sys; int io_sys;
unsigned long bus_memory_base;
} platform[] = { } platform[] = {
{"Alcor", IOSYS_ALCOR}, {"Alcor", IOSYS_ALCOR, ALCOR_DENSE_MEM},
{"Avanti", IOSYS_APECS}, {"Avanti", IOSYS_APECS, APECS_DENSE_MEM},
{"Cabriolet", IOSYS_APECS}, {"Cabriolet", IOSYS_APECS, APECS_DENSE_MEM},
{"EB64+", IOSYS_APECS}, {"EB164", IOSYS_ALCOR, ALCOR_DENSE_MEM},
{"EB66", IOSYS_APECS}, {"EB64+", IOSYS_APECS, APECS_DENSE_MEM},
{"EB66P", IOSYS_APECS}, {"EB66", IOSYS_APECS, APECS_DENSE_MEM}, /* LCA same as APECS */
{"Jensen", IOSYS_JENSEN}, {"EB66P", IOSYS_APECS, APECS_DENSE_MEM}, /* LCA same as APECS */
{"Mustang", IOSYS_APECS}, {"Jensen", IOSYS_JENSEN, JENSEN_MEM},
{"Noname", IOSYS_APECS}, {"Mustang", IOSYS_APECS, APECS_DENSE_MEM},
{"Noname", IOSYS_APECS, APECS_DENSE_MEM}, /* LCA same as APECS */
}; };
static struct { static struct {
struct hae hae; struct hae {
unsigned long cache;
unsigned long * reg;
} hae;
unsigned long base; unsigned long base;
struct ioswtch * swp; struct ioswtch * swp;
int sys; int sys;
} io; } io;
static unsigned long bus_memory_base = -1;
extern void __sethae (unsigned long); /* we can't use asm/io.h */
static inline unsigned long static inline unsigned long
port_to_cpu_addr (unsigned long port, int iosys, int size) port_to_cpu_addr (unsigned long port, int iosys, int size)
{ {
if (iosys == IOSYS_JENSEN) { if (iosys == IOSYS_JENSEN)
return (port << 7) + ((size - 1) << 4) + io.base; {
} else { return (port << 7) + ((size - 1) << 4) + io.base;
return (port << 5) + ((size - 1) << 3) + io.base; }
} else
{
return (port << 5) + ((size - 1) << 3) + io.base;
}
} }
static inline void static inline void
inline_sethae (unsigned long addr, int iosys) inline_sethae (unsigned long addr, int iosys)
{ {
if (iosys == IOSYS_JENSEN) { if (iosys == IOSYS_JENSEN)
/* hae on the Jensen is bits 31:25 shifted right */ {
addr >>= 25; /* hae on the Jensen is bits 31:25 shifted right */
if (addr != io.hae.cache) { addr >>= 25;
__sethae (addr); if (addr != io.hae.cache)
io.hae.cache = addr; {
__sethae (addr);
io.hae.cache = addr;
}
} }
} else { else
unsigned long msb; {
unsigned long msb;
/* no need to set hae if msb is 0: */ /* no need to set hae if msb is 0: */
msb = addr & 0xf8000000; msb = addr & 0xf8000000;
if (msb && msb != io.hae.cache) { if (msb && msb != io.hae.cache)
__sethae (msb); {
io.hae.cache = msb; __sethae (msb);
io.hae.cache = msb;
}
} }
}
} }
@ -263,22 +284,56 @@ struct ioswtch ioswtch[] = {
}; };
/*
* Initialize I/O system. To determine what I/O system we're dealing
* with, we first try to read the value of symlink PATH_ALPHA_SYSTYPE,
* if that fails, we lookup the "system type" field in /proc/cpuinfo.
* If that fails as well, we give up.
*/
static int static int
init_iosys (void) init_iosys (void)
{ {
char name[256], value[256]; char systype[256];
FILE * fp; int i, n;
int i;
fp = fopen (PATH_CPUINFO, "r"); n = readlink(PATH_ALPHA_SYSTYPE, systype, sizeof(systype) - 1);
if (!fp) if (n > 0)
return -1; {
systype[n] = '\0';
}
else
{
char name[256];
FILE * fp;
while (fscanf (fp, "%256[^:]: %256[^\n]\n", name, value) == 2) { fp = fopen (PATH_CPUINFO, "r");
if (strncmp (name, "system type", 11) == 0) { if (!fp)
for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i) { return -1;
if (strcmp (platform[i].name, value) == 0) { while ((n = fscanf (fp, "%256[^:]: %256[^\n]\n", name, systype)) != EOF)
fclose (fp); {
if (n == 2 && strncmp (name, "system type", 11) == 0) {
break;
}
}
fclose(fp);
if (n == EOF)
{
/* this can happen if the format of /proc/cpuinfo changes... */
fprintf(stderr,
"ioperm.init_iosys(): Unable to determine system type.\n"
"\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n");
errno = ENODEV;
return -1;
}
}
/* translate systype name into i/o system: */
for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i)
{
if (strcmp (platform[i].name, systype) == 0)
{
bus_memory_base = platform[i].bus_memory_base;
io.sys = platform[i].io_sys; io.sys = platform[i].io_sys;
if (io.sys == IOSYS_JENSEN) if (io.sys == IOSYS_JENSEN)
io.swp = &ioswtch[0]; io.swp = &ioswtch[0];
@ -286,11 +341,10 @@ init_iosys (void)
io.swp = &ioswtch[1]; io.swp = &ioswtch[1];
return 0; return 0;
} }
}
} }
}
fclose (fp); /* systype is not a know platform name... */
errno = ENODEV; errno = EINVAL;
return -1; return -1;
} }
@ -305,49 +359,55 @@ _ioperm (unsigned long from, unsigned long num, int turn_on)
return -1; return -1;
/* this test isn't as silly as it may look like; consider overflows! */ /* this test isn't as silly as it may look like; consider overflows! */
if (from >= MAX_PORT || from + num > MAX_PORT) { if (from >= MAX_PORT || from + num > MAX_PORT)
errno = EINVAL; {
return -1; errno = EINVAL;
} return -1;
if (turn_on) {
if (!io.base) {
unsigned long base;
int fd;
io.hae.reg = 0; /* not used in user-level */
io.hae.cache = 0;
__sethae (io.hae.cache); /* synchronize with hw */
fd = open ("/dev/mem", O_RDWR);
if (fd < 0)
return fd;
switch (io.sys) {
case IOSYS_JENSEN: base = JENSEN_IO_BASE; break;
case IOSYS_APECS: base = APECS_IO_BASE; break;
case IOSYS_ALCOR: base = ALCOR_IO_BASE; break;
default:
errno = ENODEV;
return -1;
}
addr = port_to_cpu_addr (from, io.sys, 1);
addr &= PAGE_MASK;
len = port_to_cpu_addr (MAX_PORT, io.sys, 1) - addr;
io.base =
(unsigned long) __mmap (0, len, PROT_NONE, MAP_SHARED, fd, base);
close (fd);
if ((long) io.base == -1)
return -1;
} }
prot = PROT_READ | PROT_WRITE;
} else {
if (!io.base)
return 0; /* never was turned on... */
/* turnoff access to relevant pages: */ if (turn_on)
prot = PROT_NONE; {
} if (!io.base)
{
unsigned long base;
int fd;
io.hae.reg = 0; /* not used in user-level */
io.hae.cache = 0;
__sethae (io.hae.cache); /* synchronize with hw */
fd = open ("/dev/mem", O_RDWR);
if (fd < 0)
return fd;
switch (io.sys)
{
case IOSYS_JENSEN: base = JENSEN_IO_BASE; break;
case IOSYS_APECS: base = APECS_IO_BASE; break;
case IOSYS_ALCOR: base = ALCOR_IO_BASE; break;
default:
errno = ENODEV;
return -1;
}
addr = port_to_cpu_addr (from, io.sys, 1);
addr &= PAGE_MASK;
len = port_to_cpu_addr (MAX_PORT, io.sys, 1) - addr;
io.base =
(unsigned long) __mmap (0, len, PROT_NONE, MAP_SHARED, fd, base);
close (fd);
if ((long) io.base == -1)
return -1;
}
prot = PROT_READ | PROT_WRITE;
}
else
{
if (!io.base)
return 0; /* never was turned on... */
/* turnoff access to relevant pages: */
prot = PROT_NONE;
}
addr = port_to_cpu_addr (from, io.sys, 1); addr = port_to_cpu_addr (from, io.sys, 1);
addr &= PAGE_MASK; addr &= PAGE_MASK;
len = port_to_cpu_addr (from + num, io.sys, 1) - addr; len = port_to_cpu_addr (from + num, io.sys, 1) - addr;
@ -358,13 +418,15 @@ _ioperm (unsigned long from, unsigned long num, int turn_on)
int int
_iopl (unsigned int level) _iopl (unsigned int level)
{ {
if (level > 3) { if (level > 3)
{
errno = EINVAL; errno = EINVAL;
return -1; return -1;
} }
if (level) { if (level)
{
return _ioperm (0, MAX_PORT, 1); return _ioperm (0, MAX_PORT, 1);
} }
return 0; return 0;
} }
@ -430,6 +492,14 @@ _inl (unsigned long port)
} }
unsigned long
_bus_base(void)
{
if (!io.swp && init_iosys () < 0)
return -1;
return bus_memory_base;
}
weak_alias (_sethae, sethae); weak_alias (_sethae, sethae);
weak_alias (_ioperm, ioperm); weak_alias (_ioperm, ioperm);
weak_alias (_iopl, iopl); weak_alias (_iopl, iopl);
@ -439,3 +509,4 @@ weak_alias (_inl, inl);
weak_alias (_outb, outb); weak_alias (_outb, outb);
weak_alias (_outw, outw); weak_alias (_outw, outw);
weak_alias (_outl, outl); weak_alias (_outl, outl);
weak_alias (_bus_base, bus_base);

View File

@ -0,0 +1,49 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/* For compatibility only: a "long" is 64 bits on the Alpha, so
llseek() isn't really needed. But there are some programs out
there who may depend on it being around.
*/
#include <sysdep.h>
.text
ENTRY(llseek)
.prologue 0
mov a3, t0 /* save result address */
sll a1, 32, a1 /* build a 64 bit ofs out of 32 bit operands */
zap a2, 0xf0, a2
bis a2, a1, a1
mov a4, a2 /* shift down whence */
ldi v0, __NR_lseek
call_pal PAL_callsys
bne a3, error
stq v0, 0(t0)
ret
error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end llseek

View File

@ -21,7 +21,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
.text .text
ENTRY(__pipe) LEAF(__pipe, 0)
.prologue 0 .prologue 0
ldi v0, __NR_pipe ldi v0, __NR_pipe
@ -35,8 +35,7 @@ ENTRY(__pipe)
error: br gp, 1f error: br gp, 1f
1: ldgp gp, 0(gp) 1: ldgp gp, 0(gp)
lda pv, syscall_error jmp zero, syscall_error
jmp zero, (pv)
.end __pipe .end __pipe

View File

@ -42,6 +42,7 @@ static const speed_t speeds[] =
57600, 57600,
115200, 115200,
230400, 230400,
460800,
}; };

View File

@ -0,0 +1,75 @@
/* Copyright (C) 1993 Free Software Foundation, Inc.
Contributed by Brendan Kehoe (brendan@zen.org).
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifndef _STATBUF_H
#define _STATBUF_H
#include <gnu/types.h>
/* Structure describing file characteristics. */
struct stat
{
int st_dev; /* Device. */
unsigned int st_ino; /* File serial number. */
unsigned int st_mode; /* File mode. */
unsigned int st_nlink; /* Link count. */
unsigned int st_uid; /* User ID of the file's owner. */
unsigned int st_gid; /* Group ID of the file's group.*/
int st_rdev; /* Device number, if device. */
long st_size; /* Size of file, in bytes. */
int st_atime; /* Time of last access. */
int st_atime_usec;
int st_mtime; /* Time of last modification. */
int st_mtime_usec;
int st_ctime; /* Time of last status change. */
int st_ctime_usec;
unsigned int st_blksize; /* Optimal block size for I/O. */
#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
int st_blocks; /* Number of 512-byte blocks allocated. */
unsigned int st_flags;
unsigned int st_gen;
};
/* Encoding of the file mode. */
#define __S_IFMT 0170000 /* These bits determine file type. */
/* File types. */
#define __S_IFDIR 0040000 /* Directory. */
#define __S_IFCHR 0020000 /* Character device. */
#define __S_IFBLK 0060000 /* Block device. */
#define __S_IFREG 0100000 /* Regular file. */
#define __S_IFIFO 0010000 /* FIFO. */
#define __S_IFLNK 0120000 /* Symbolic link. */
#define __S_IFSOCK 0140000 /* Socket. */
/* Protection bits. */
#define __S_ISUID 04000 /* Set user ID on execution. */
#define __S_ISGID 02000 /* Set group ID on execution. */
#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
#define __S_IREAD 0400 /* Read by owner. */
#define __S_IWRITE 0200 /* Write by owner. */
#define __S_IEXEC 0100 /* Execute by owner. */
#endif /* statbuf.h */

View File

@ -41,21 +41,20 @@ Cambridge, MA 02139, USA. */
*/ */
1: br gp,2f LEAF(__syscall, 0)
2: ldgp gp,0(gp) bis a0, a0, v0 # Syscall number -> v0
jmp zero,syscall_error bis a1, a1, a0 # arg1-arg5 -> a0-a4
bis a2, a2, a1
bis a3, a3, a2
ENTRY (__syscall) bis a4, a4, a3
bis a0,a0,v0 # Syscall number -> v0 bis a5, a5, a4
bis a1,a1,a0 # arg1-arg5 -> a0-a4
bis a2,a2,a1
bis a3,a3,a2
bis a4,a4,a3
bis a5,a5,a4
call_pal PAL_callsys # Invoke system call call_pal PAL_callsys # Invoke system call
bne a3,1b bne a3, error
ret ret
error: br gp, 2f
2: ldgp gp, 0(gp)
jmp zero, syscall_error
weak_alias(__syscall, syscall) weak_alias(__syscall, syscall)

View File

@ -33,13 +33,16 @@ bind - bind 3 __bind bind
connect - connect 3 __connect connect connect - connect 3 __connect connect
getpeername - getpeername 3 __getpeername getpeername getpeername - getpeername 3 __getpeername getpeername
getsockname - getsockname 3 __getsockname getsockname getsockname - getsockname 3 __getsockname getsockname
getsockopt - getsockopt 5 __getsockopt getsockopt
listen - listen 2 __listen listen listen - listen 2 __listen listen
recv - recv 4 __recv recv recv - recv 4 __recv recv
recvfrom - recvfrom 6 __recvfrom recvfrom recvfrom - recvfrom 6 __recvfrom recvfrom
recvmsg - recvmsg 3 __recvmsg recvmsg recvmsg - recvmsg 3 __recvmsg recvmsg
ptrace - ptrace 4 __ptrace ptrace
send - send 4 __send send send - send 4 __send send
sendmsg - sendmsg 3 __sendmsg sendmsg sendmsg - sendmsg 3 __sendmsg sendmsg
sendto - sendto 6 __sendto sendto sendto - sendto 6 __sendto sendto
setsockopt - setsockopt 5 __setsockopt setsockopt setsockopt - setsockopt 5 __setsockopt setsockopt
shutdown - shutdown 2 __shutdown shutdown shutdown - shutdown 2 __shutdown shutdown
socketpair - socketpair 4 __socketpair socketpair socketpair - socketpair 4 __socketpair socketpair
sysctl - _sysctl 6 sysctl

View File

@ -20,11 +20,12 @@ Cambridge, MA 02139, USA. */
#define _ERRNO_H #define _ERRNO_H
#include <errnos.h> #include <errnos.h>
ENTRY(syscall_error) LEAF(syscall_error, 0)
.prologue 1
/* Store return value in errno... */ /* Store return value in errno... */
ldgp gp, 0(t12) ldgp gp, 0(t12)
lda t0, errno stl v0, errno
stl v0, 0(t0)
/* And just kick back a -1. */ /* And just kick back a -1. */
ldi v0, -1 ldi v0, -1

View File

@ -17,9 +17,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
/* In the Linux ELF and ECOFF worlds, C symbols are asm symbols. */
#define NO_UNDERSCORES
#ifdef ASSEMBLER #ifdef ASSEMBLER
#include <asm/pal.h> #include <asm/pal.h>