Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>
authorRoland McGrath <roland@gnu.org>
Thu, 23 May 1996 05:33:49 +0000 (05:33 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 23 May 1996 05:33:49 +0000 (05:33 +0000)
* 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.

42 files changed:
ChangeLog
posix/sys/types.h
sunrpc/rpc/rpc.h
sunrpc/rpc/svc.h
sysdeps/alpha/__math.h
sysdeps/alpha/_mcount.S
sysdeps/alpha/bb_init_func.S
sysdeps/alpha/bsd-setjmp.S
sysdeps/alpha/copysign.S [moved from sysdeps/unix/sysv/linux/alpha/profil-counter.h with 73% similarity]
sysdeps/alpha/divl.S
sysdeps/alpha/divlu.S
sysdeps/alpha/divq.S
sysdeps/alpha/divqu.S
sysdeps/alpha/divrem.h [moved from sysdeps/alpha/divrem.S with 92% similarity]
sysdeps/alpha/fabs.S [new file with mode: 0644]
sysdeps/alpha/ffs.S
sysdeps/alpha/htonl.S
sysdeps/alpha/htons.S
sysdeps/alpha/memchr.S
sysdeps/alpha/reml.S
sysdeps/alpha/remlu.S
sysdeps/alpha/remq.S
sysdeps/alpha/remqu.S
sysdeps/alpha/setjmp.S
sysdeps/alpha/strlen.S
sysdeps/alpha/udiv_qrnnd.S
sysdeps/generic/sigset.h
sysdeps/libm-ieee754/s_scalbnf.c
sysdeps/unix/alpha/sysdep.h
sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h [new file with mode: 0644]
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/ioperm.c
sysdeps/unix/sysv/linux/alpha/llseek.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/pipe.S
sysdeps/unix/sysv/linux/alpha/speed.c
sysdeps/unix/sysv/linux/alpha/statbuf.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/syscall.S
sysdeps/unix/sysv/linux/alpha/syscalls.list
sysdeps/unix/sysv/linux/alpha/sysdep.S
sysdeps/unix/sysv/linux/alpha/sysdep.h

index 03542f6..ebd7beb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * stdlib/canonicalize.c: New file.
index 8c65ae0..8265fa0 100644 (file)
@@ -64,6 +64,7 @@ __BEGIN_DECLS
 
 #ifdef __USE_MISC
 /* Old compatibility names for C types.  */
+typedef unsigned long int ulong;
 typedef unsigned short int ushort;
 typedef unsigned int uint;
 #endif
index 83a124a..d11e83e 100644 (file)
@@ -56,7 +56,9 @@
  *  Uncomment-out the next line if you are building the rpc library with    
  *  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 */
 #include <rpc/svc.h>           /* service manager and multiplexer */
index 3cb07ef..4f4f546 100644 (file)
@@ -151,7 +151,7 @@ struct svc_req {
  *     u_long prog;
  *     u_long vers;
  *     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();
 
index 9aea9d7..50d8ac3 100644 (file)
@@ -46,7 +46,7 @@ extern __inline double
 cabs (struct __cabs_complex __z)
 {
   extern double __hypot (double, double);
-  return __hypot(__z.__x, __z.__y);
+  return __hypot(__z.x, __z.y);
 }
 #endif
 
index 2d6e2ed..7944544 100644 (file)
@@ -34,18 +34,15 @@ holds the return address of the function's caller (selfpc and frompc,
 respectively in gmon.c language...). */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-# include <regdef.h>
-#endif
 
 #undef ret     /* discard `ret' as defined in sysdep.h */
 
        .set    noat
        .set    noreorder
 
-ENTRY(_mcount)
+LEAF(_mcount, 0xb0)
+       .prologue 0
+
        subq     sp, 0xb0, sp
        stq      a0, 0x00(sp)
        mov      ra, a0         # a0 = caller-pc
index 9bf985c..cd860b8 100644 (file)
@@ -24,11 +24,6 @@ caller-saved (call-used) registers (except for argument registers
 a1-a5). */
 
 #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.
@@ -40,12 +35,19 @@ a1-a5). */
        .set    noreorder
 
 ENTRY(__bb_init_func)
+       .prologue 0
+
        ldq     t0, ZERO_WORD(a0)       /* t0 <- blocks->zero_word */
        beq     t0, init                /* not initialized yet -> */
        ret
+       
+       .end __bb_init_func
+
 
+LEAF(init, 0x38)
+       subq    sp, 0x38, sp
+       .prologue 0
 
-init:  subq    sp, 0x38, sp
        stq     pv, 0x30(sp)
        br      pv, 1f
 1:     ldgp    gp, 0(pv)
@@ -81,5 +83,5 @@ init: subq    sp, 0x38, sp
 leave: ldq     pv, 0x30(sp)
        addq    sp, 0x38, sp
        ret
-       
-       .end __bb_init_func
+
+       .end init
index 470f7bc..113bc47 100644 (file)
@@ -23,8 +23,8 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-ENTRY (setjmp)
-       lda $27, __sigsetjmp    /* Load address to jump to.  */
-       bis $31, 1, $17         /* Pass a second argument of one.  */
-       jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp.  */
+ENTRY(setjmp)
+       lda     $27, __sigsetjmp        /* Load address to jump to.  */
+       bis     $31, 1, $17             /* Pass a second argument of one.  */
+       jmp     $31, ($27), __sigsetjmp /* Call __sigsetjmp.  */
        .end setjmp
similarity index 73%
rename from sysdeps/unix/sysv/linux/alpha/profil-counter.h
rename to sysdeps/alpha/copysign.S
index 6ab5a88..9e9dff3 100644 (file)
@@ -1,7 +1,6 @@
-/* Low-level statistical profiling support function.  Mostly POSIX.1 version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-Contributed by David Mosberger <davidm@azstarnet.com>
+/* 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
@@ -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,
 Cambridge, MA 02139, USA.  */
 
-#include <asm/sigcontext.h>
+#include <sysdep.h>
+
+ENTRY(__copysign)
+       .prologue 0
+       cpys    $f17,$f16,$f0
+       ret
+
+       .end __copysign
 
-void
-profil_counter (int signal, long a1, long a2, long a3, long a4, long a5,
-               struct sigcontext_struct sc)
-{
-  profil_count((void *) sc.sc_pc);
-}
+weak_alias(__copysign, copysign)
index 7dbb504..6990665 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         1
 #define FUNC_NAME      __divl
 
-#include "divrem.S"
+#include "divrem.h"
index 9cc71da..ee96c95 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         0
 #define FUNC_NAME      __divlu
 
-#include "divrem.S"
+#include "divrem.h"
index f7af8d6..bde3425 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         1
 #define FUNC_NAME      __divq
 
-#include "divrem.S"
+#include "divrem.h"
index faf2932..72dcf97 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         0
 #define FUNC_NAME      __divqu
 
-#include "divrem.S"
+#include "divrem.h"
similarity index 92%
rename from sysdeps/alpha/divrem.S
rename to sysdeps/alpha/divrem.h
index e6293bf..ee7f64e 100644 (file)
@@ -103,10 +103,29 @@ clobbered (assembly temporary), anything else must be saved.  */
        .ent FUNC_NAME
        .globl FUNC_NAME
 
+#define FRAME_SIZE     0x30
+
        .align 5
 FUNC_NAME:
-#      define FRAME_SIZE       0x30
-       .frame  sp,FRAME_SIZE,ra,0
+#ifdef PROF
+       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)
        .prologue 1
        stq     arg1,0x00(sp)
diff --git a/sysdeps/alpha/fabs.S b/sysdeps/alpha/fabs.S
new file mode 100644 (file)
index 0000000..88e64b4
--- /dev/null
@@ -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
index 7676b85..7cf6281 100644 (file)
@@ -22,11 +22,6 @@ Cambridge, MA 02139, USA.  */
 architecture.  */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-#include <regdef.h>
-#endif
 
         .set noreorder
         .set noat
index d0bf7e1..8c1c700 100644 (file)
@@ -17,22 +17,18 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-#include <regdef.h>
-#endif
 
 ENTRY(__htonl)
-       extlh   a0,5,t1         # t1 = dd000000
-       zap     a0,0xfd,t2      # t2 = 0000cc00
-       sll     t2,5,t2         # t2 = 00198000
-       s8addl  t2,t1,t1        # t1 = ddcc0000
-       zap     a0,0xfb,t2      # t2 = 00bb0000
-       srl     t2,8,t2         # t2 = 0000bb00
-       extbl   a0,3,v0         # v0 = 000000aa
-       or      t1,v0,v0        # v0 = ddcc00aa
-       or      t2,v0,v0        # v0 = ddccbbaa
+       .prologue 0
+       extlh   a0, 5, t1       # t1 = dd000000
+       zap     a0, 0xfd, t2    # t2 = 0000cc00
+       sll     t2, 5, t2       # t2 = 00198000
+       s8addl  t2, t1, t1      # t1 = ddcc0000
+       zap     a0, 0xfb, t2    # t2 = 00bb0000
+       srl     t2, 8, t2       # t2 = 0000bb00
+       extbl   a0, 3, v0       # v0 = 000000aa
+       or      t1, v0, v0      # v0 = ddcc00aa
+       or      t2, v0, v0      # v0 = ddccbbaa
        ret
 
        .end    __htonl
index 6e18c7c..cb22b21 100644 (file)
@@ -17,16 +17,12 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-#include <regdef.h>
-#endif
 
 ENTRY(__htons)
-       extwh   a0,7,t1         # t1 = bb00
-       extbl   a0,1,v0         # v0 = 00aa
-       bis     v0,t1,v0        # v0 = bbaa
+       .prologue 0
+       extwh   a0, 7, t1       # t1 = bb00
+       extbl   a0, 1, v0       # v0 = 00aa
+       bis     v0, t1, v0      # v0 = bbaa
        ret
 
        .end    __htons
index 118a1f1..2f78697 100644 (file)
@@ -35,16 +35,13 @@ For correctness consider that:
 */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-#include <regdef.h>
-#endif
 
         .set noreorder
         .set noat
 
 ENTRY(memchr)
+       .prologue 0
+
        beq     a2, not_found
         ldq_u   t0, 0(a0)       # load first quadword (a0 may be misaligned)
        addq    a0, a2, t4
index cede136..b631a02 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         1
 #define FUNC_NAME      __reml
 
-#include "divrem.S"
+#include "divrem.h"
index 3658d92..8d527e4 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         0
 #define FUNC_NAME      __remlu
 
-#include "divrem.S"
+#include "divrem.h"
index 61f2067..8bd9f33 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         1
 #define FUNC_NAME      __remq
 
-#include "divrem.S"
+#include "divrem.h"
index e22d5ac..14a7486 100644 (file)
@@ -3,4 +3,4 @@
 #define SIGNED         0
 #define FUNC_NAME      __remqu
 
-#include "divrem.S"
+#include "divrem.h"
index 04b8068..b165d2c 100644 (file)
@@ -22,9 +22,12 @@ Cambridge, MA 02139, USA.  */
    reliably access the stack or frame pointers, so we pass them in as
    extra arguments.  */
 ENTRY (__sigsetjmp)
-       ldgp $29, 0($27)
-       lda $27, __sigsetjmp_aux/* Load address to jump to.  */
-       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.  */
+       ldgp    $29, 0($27)
+       .prologue 1
+
+       lda     $27, __sigsetjmp_aux    /* Load address to jump to.  */
+       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
index 7e6a61b..c641261 100644 (file)
@@ -29,11 +29,6 @@ architecture:
         binary search needs).  */
 
 #include <sysdep.h>
-#ifdef __linux__
-# include <alpha/regdef.h>
-#else
-#include <regdef.h>
-#endif
 
         .set noreorder
         .set noat
index d3d2cee..eb134f2 100644 (file)
  # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  # MA 02111-1307, USA.
 
+#include <sysdep.h>
 
         .set noreorder
         .set noat
-.text
-        .align 3
-        .globl __udiv_qrnnd
-        .ent   __udiv_qrnnd
-__udiv_qrnnd:
-        .frame $30,0,$26,0
+
+       .text
+
+LEAF(__udiv_qrnnd, 0)
+
         .prologue 0
 #define cnt    $2
 #define tmp    $3
index e9dc7c7..b00265b 100644 (file)
@@ -50,6 +50,10 @@ typedef unsigned long int __sigset_t;
    call we know fails with EINVAL (kludge city!), so as to avoid referring
    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
 #define _EXTERN_INLINE extern __inline
 #endif
index 60aedf1..3a83e54 100644 (file)
@@ -31,9 +31,9 @@ huge   = 1.0e+30,
 tiny   = 1.0e-30;
 
 #ifdef __STDC__
-       float scalbnf (float x, int n)
+       float __scalbnf (float x, int n)
 #else
-       float scalbn (x,n)
+       float __scalbnf (x,n)
        float x; int n;
 #endif
 {
index 9eb9032..8a52f20 100644 (file)
@@ -20,20 +20,42 @@ Cambridge, MA 02139, USA.  */
 
 #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__
 #define ENTRY(name)                            \
   .globl name;                                 \
   .align 3;                                    \
-  .ent name,0;                                 \
+  .ent name, 0;                                        \
   name##:                                      \
-  .frame sp,0,ra
+  .frame sp, 0, ra
 #else
 #define ENTRY(name)                            \
   .globl name;                                 \
   .align 3;                                    \
-  .ent name,0;                                 \
+  .ent name, 0;                                        \
   name/**/:                                    \
-  .frame sp,0,ra
+  .frame sp, 0, ra
 #endif
 
 /* Note that while it's better structurally, going back to set errno
@@ -45,17 +67,16 @@ Cambridge, MA 02139, USA.  */
     .align 3;                                  \
     .ent name,0;                               \
                                                \
-1:  br         gp,2f;                          \
-2:  ldgp       gp,0(gp);                       \
-    lda                pv,syscall_error;               \
-    jmp                zero,(pv);                      \
+1:  br         gp, 2f;                         \
+2:  ldgp       gp, 0(gp);                      \
+    jmp                zero, syscall_error;            \
                                                \
 name##:                                                \
-    ldi                v0,SYS_ify(syscall_name);       \
+    ldi                v0, SYS_ify(syscall_name);      \
     .set noat;                                 \
     call_pal   PAL_callsys;                    \
     .set at;                                   \
-    bne                a3,1b;                          \
+    bne                a3, 1b;                         \
 3:
 #else
 #define PSEUDO(name, syscall_name, args)       \
@@ -63,17 +84,16 @@ name##:                                             \
     .align 3;                                  \
     .ent name,0;                               \
                                                \
-1:  br         gp,2f;                          \
-2:  ldgp       gp,0(gp);                       \
-    lda                pv,syscall_error;               \
-    jmp                zero,(pv);                      \
+1:  br         gp, 2f;                         \
+2:  ldgp       gp, 0(gp);                      \
+    jmp                zero, syscall_error;            \
                                                \
 name/**/:                                      \
-    ldi                v0,SYS_ify(syscall_name);       \
+    ldi                v0, SYS_ify(syscall_name);      \
     .set noat;                                 \
     call_pal   PAL_callsys;                    \
     .set at;                                   \
-    bne                a3,1b;                          \
+    bne                a3, 1b;                         \
 3:
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h b/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h
new file mode 100644 (file)
index 0000000..57b96d6
--- /dev/null
@@ -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__ */
index afd2e32..4582539 100644 (file)
@@ -36,24 +36,23 @@ __curbrk:
        .quad _end
 
        .text
-ENTRY(__brk)
+LEAF(__brk, 0)
        ldgp    gp, 0(t12)
        .prologue 1
 
        ldi     v0, __NR_brk
        call_pal PAL_callsys
        subq    a0, v0, t0
-       bne t0, error
+       bne     t0, error
 
        /* Update __curbrk and return cleanly.  */
-       stl a0, __curbrk
-       mov zero, v0
+       stl     a0, __curbrk
+       mov     zero, v0
        ret
 
        /* What a horrible way to die.  */
 error: ldi     v0, ENOMEM
-       lda     pv, syscall_error
-       jmp     zero,(pv)
+       jmp     zero, syscall_error
 
        .end __brk
 
index 4c86e39..c3486ac 100644 (file)
@@ -21,9 +21,10 @@ Cambridge, MA 02139, USA.  */
 #define GSI_IEEE_FP_CONTROL    45
 
        .text
-ENTRY(__ieee_get_fp_control)
+
+LEAF(__ieee_get_fp_control, 8)
        lda     sp, -8(sp)
-       .prologue 1
+       .prologue 0
 
        mov     sp, a1
        ldi     a0, GSI_IEEE_FP_CONTROL
@@ -36,8 +37,9 @@ ENTRY(__ieee_get_fp_control)
        ret
 
 error: lda     sp, 8(sp)
-       lda     pv, syscall_error
-       jmp     zero,(pv)
+       br      gp, 1f
+1:     ldgp    gp, 0(gp)
+       jmp     zero, syscall_error
 
        .end __ieee_get_fp_control
 
index d10e9bc..507b5d5 100644 (file)
@@ -20,10 +20,9 @@ Cambridge, MA 02139, USA.  */
 
 #define SSI_IEEE_FP_CONTROL    14
 
-       .text
-ENTRY(__ieee_set_fp_control)
+LEAF(__ieee_set_fp_control, 8)
        lda     sp, -8(sp)
-       .prologue 1
+       .prologue 0
 
        stq     a0, 0(sp)
        mov     sp, a1
@@ -36,8 +35,9 @@ ENTRY(__ieee_set_fp_control)
        bne     a3, error
        ret
 
-error: lda     pv, syscall_error
-       jmp     zero,(pv)
+error: br      gp, 1f
+1:     ldgp    gp, 0(gp)
+       jmp     zero, syscall_error
 
        .end __ieee_set_fp_control
 
index 306c86b..b9630a8 100644 (file)
@@ -35,31 +35,35 @@ I/O address space that's 512MB large!).  */
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
-#include <unistd.h>
+#include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include <sys/types.h>
 #include <sys/mman.h>
 
-#include <asm/io.h>
 #include <asm/page.h>
 #include <asm/system.h>
 
-#undef inb
-#undef inw
-#undef inl
-#undef outb
-#undef outw
-#undef outl
-
-#define PATH_CPUINFO   "/proc/cpuinfo"
+#define PATH_ALPHA_SYSTYPE     "/etc/alpha_systype"
+#define PATH_CPUINFO           "/proc/cpuinfo"
 
 #define MAX_PORT       0x10000
 #define vuip           volatile unsigned int *
 
-#define JENSEN_IO_BASE         (IDENT_ADDR + 0x0300000000UL)
-#define APECS_IO_BASE          (IDENT_ADDR + 0x01c0000000UL)
-#define ALCOR_IO_BASE          (IDENT_ADDR + 0x8580000000UL)
+#define JENSEN_IO_BASE         (0xfffffc0300000000UL)
+#define JENSEN_MEM             (0xfffffc0200000000UL)  /* sparse!! */
+
+/*
+ * 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 {
   IOSYS_JENSEN = 0, IOSYS_APECS = 1, IOSYS_ALCOR = 2
@@ -78,58 +82,75 @@ struct ioswtch {
 static struct platform {
   const char   *name;
   int          io_sys;
+  unsigned long        bus_memory_base;
 } platform[] = {
-  {"Alcor",            IOSYS_ALCOR},
-  {"Avanti",           IOSYS_APECS},
-  {"Cabriolet",                IOSYS_APECS},
-  {"EB64+",            IOSYS_APECS},
-  {"EB66",             IOSYS_APECS},
-  {"EB66P",            IOSYS_APECS},
-  {"Jensen",           IOSYS_JENSEN},
-  {"Mustang",          IOSYS_APECS},
-  {"Noname",           IOSYS_APECS},
+  {"Alcor",    IOSYS_ALCOR,    ALCOR_DENSE_MEM},
+  {"Avanti",   IOSYS_APECS,    APECS_DENSE_MEM},
+  {"Cabriolet",        IOSYS_APECS,    APECS_DENSE_MEM},
+  {"EB164",    IOSYS_ALCOR,    ALCOR_DENSE_MEM},
+  {"EB64+",    IOSYS_APECS,    APECS_DENSE_MEM},
+  {"EB66",     IOSYS_APECS,    APECS_DENSE_MEM},       /* LCA same as APECS */
+  {"EB66P",    IOSYS_APECS,    APECS_DENSE_MEM},       /* LCA same as APECS */
+  {"Jensen",   IOSYS_JENSEN,   JENSEN_MEM},
+  {"Mustang",  IOSYS_APECS,    APECS_DENSE_MEM},
+  {"Noname",   IOSYS_APECS,    APECS_DENSE_MEM},       /* LCA same as APECS */
 };
 
 
 static struct {
-  struct hae           hae;
+  struct hae {
+    unsigned long      cache;
+    unsigned long *    reg;
+  } hae;
   unsigned long                base;
   struct ioswtch *     swp;
   int                  sys;
 } io;
 
+static unsigned long bus_memory_base = -1;
+
+extern void __sethae (unsigned long);  /* we can't use asm/io.h */
+
 
 static inline unsigned long
 port_to_cpu_addr (unsigned long port, int iosys, int size)
 {
-  if (iosys == IOSYS_JENSEN) {
-    return (port << 7) + ((size - 1) << 4) + io.base;
-  } else {
-    return (port << 5) + ((size - 1) << 3) + io.base;
-  }
+  if (iosys == IOSYS_JENSEN)
+    {
+      return (port << 7) + ((size - 1) << 4) + io.base;
+    }
+  else
+    {
+      return (port << 5) + ((size - 1) << 3) + io.base;
+    }
 }
 
 
 static inline void
 inline_sethae (unsigned long addr, int iosys)
 {
-  if (iosys == IOSYS_JENSEN) {
-    /* hae on the Jensen is bits 31:25 shifted right */
-    addr >>= 25;
-    if (addr != io.hae.cache) {
-       __sethae (addr);
-       io.hae.cache = addr;
+  if (iosys == IOSYS_JENSEN)
+    {
+      /* hae on the Jensen is bits 31:25 shifted right */
+      addr >>= 25;
+      if (addr != io.hae.cache)
+       {
+         __sethae (addr);
+         io.hae.cache = addr;
+       }
     }
-  } else {
-    unsigned long msb;
-
-    /* no need to set hae if msb is 0: */
-    msb = addr & 0xf8000000;
-    if (msb && msb != io.hae.cache) {
-       __sethae (msb);
-       io.hae.cache = msb;
+  else
+    {
+      unsigned long msb;
+
+      /* no need to set hae if msb is 0: */
+      msb = addr & 0xf8000000;
+      if (msb && msb != io.hae.cache)
+       {
+         __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
 init_iosys (void)
 {
-  char name[256], value[256];
-  FILE * fp;
-  int i;
+  char systype[256];
+  int i, n;
 
-  fp = fopen (PATH_CPUINFO, "r");
-  if (!fp)
-    return -1;
+  n = readlink(PATH_ALPHA_SYSTYPE, systype, sizeof(systype) - 1);
+  if (n > 0)
+    {
+      systype[n] = '\0';
+    }
+  else
+    {
+      char name[256];
+      FILE * fp;
+
+      fp = fopen (PATH_CPUINFO, "r");
+      if (!fp)
+       return -1;
+      while ((n = fscanf (fp, "%256[^:]: %256[^\n]\n", name, systype)) != EOF)
+       {
+         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;
+       }
+    }
 
-  while (fscanf (fp, "%256[^:]: %256[^\n]\n", name, value) == 2) {
-    if (strncmp (name, "system type", 11) == 0) {
-      for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i) {
-       if (strcmp (platform[i].name, value) == 0) {
-         fclose (fp);
+  /* 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;
          if (io.sys == IOSYS_JENSEN)
            io.swp = &ioswtch[0];
@@ -286,11 +341,10 @@ init_iosys (void)
            io.swp = &ioswtch[1];
          return 0;
        }
-      }
     }
-  }
-  fclose (fp);
-  errno = ENODEV;
+
+  /* systype is not a know platform name... */
+  errno = EINVAL;
   return -1;
 }
 
@@ -305,49 +359,55 @@ _ioperm (unsigned long from, unsigned long num, int turn_on)
     return -1;
 
   /* this test isn't as silly as it may look like; consider overflows! */
-  if (from >= MAX_PORT || from + num > MAX_PORT) {
-    errno = EINVAL;
-    return -1;
-  }
+  if (from >= MAX_PORT || from + num > MAX_PORT)
+    {
+      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;
+  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;
     }
-    prot = PROT_READ | PROT_WRITE;
-  } else {
-    if (!io.base)
-      return 0;        /* never was turned on... */
+  else
+    {
+      if (!io.base)
+       return 0;       /* never was turned on... */
 
-    /* turnoff access to relevant pages: */
-    prot = PROT_NONE;
-  }
+      /* turnoff access to relevant pages: */
+      prot = PROT_NONE;
+    }
   addr  = port_to_cpu_addr (from, io.sys, 1);
   addr &= PAGE_MASK;
   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
 _iopl (unsigned int level)
 {
-    if (level > 3) {
+    if (level > 3)
+      {
        errno = EINVAL;
        return -1;
-    }
-    if (level) {
+      }
+    if (level)
+      {
        return _ioperm (0, MAX_PORT, 1);
-    }
+      }
     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 (_ioperm, ioperm);
 weak_alias (_iopl, iopl);
@@ -439,3 +509,4 @@ weak_alias (_inl, inl);
 weak_alias (_outb, outb);
 weak_alias (_outw, outw);
 weak_alias (_outl, outl);
+weak_alias (_bus_base, bus_base);
diff --git a/sysdeps/unix/sysv/linux/alpha/llseek.S b/sysdeps/unix/sysv/linux/alpha/llseek.S
new file mode 100644 (file)
index 0000000..7f2a491
--- /dev/null
@@ -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
index f613b08..4095846 100644 (file)
@@ -21,7 +21,7 @@ Cambridge, MA 02139, USA.  */
 #include <sysdep.h>
 
        .text
-ENTRY(__pipe)
+LEAF(__pipe, 0)
        .prologue 0
 
        ldi     v0, __NR_pipe
@@ -35,8 +35,7 @@ ENTRY(__pipe)
 
 error: br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       lda     pv, syscall_error
-       jmp     zero, (pv)
+       jmp     zero, syscall_error
 
        .end __pipe
 
index b61cfbb..40bf6c5 100644 (file)
@@ -42,6 +42,7 @@ static const speed_t speeds[] =
     57600,
     115200,
     230400,
+    460800,
   };
 
 
diff --git a/sysdeps/unix/sysv/linux/alpha/statbuf.h b/sysdeps/unix/sysv/linux/alpha/statbuf.h
new file mode 100644 (file)
index 0000000..e0e7a8a
--- /dev/null
@@ -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 */
index 54a8484..c80a523 100644 (file)
@@ -41,21 +41,20 @@ Cambridge, MA 02139, USA.  */
  */
 
 
-1:     br      gp,2f
-2:     ldgp    gp,0(gp)
-       jmp     zero,syscall_error
-
-
-ENTRY (__syscall)
-       bis     a0,a0,v0        # Syscall number -> v0
-       bis     a1,a1,a0        # arg1-arg5 -> a0-a4
-       bis     a2,a2,a1
-       bis     a3,a3,a2
-       bis     a4,a4,a3
-       bis     a5,a5,a4
+LEAF(__syscall, 0)
+       bis     a0, a0, v0      # Syscall number -> v0
+       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
-       bne     a3,1b
+       bne     a3, error
        ret
 
+error: br      gp, 2f
+2:     ldgp    gp, 0(gp)
+       jmp     zero, syscall_error
+
 weak_alias(__syscall, syscall)
index a842908..4a52bf2 100644 (file)
@@ -33,13 +33,16 @@ bind                -       bind            3       __bind          bind
 connect                -       connect         3       __connect       connect
 getpeername    -       getpeername     3       __getpeername   getpeername
 getsockname    -       getsockname     3       __getsockname   getsockname
+getsockopt     -       getsockopt      5       __getsockopt    getsockopt
 listen         -       listen          2       __listen        listen
 recv           -       recv            4       __recv          recv
 recvfrom       -       recvfrom        6       __recvfrom      recvfrom
 recvmsg                -       recvmsg         3       __recvmsg       recvmsg
+ptrace         -       ptrace          4       __ptrace        ptrace
 send           -       send            4       __send          send
 sendmsg                -       sendmsg         3       __sendmsg       sendmsg
 sendto         -       sendto          6       __sendto        sendto
 setsockopt     -       setsockopt      5       __setsockopt    setsockopt
 shutdown       -       shutdown        2       __shutdown      shutdown
 socketpair     -       socketpair      4       __socketpair    socketpair
+sysctl         -       _sysctl         6       sysctl
index 74b153e..84582f4 100644 (file)
@@ -20,11 +20,12 @@ Cambridge, MA 02139, USA.  */
 #define _ERRNO_H
 #include <errnos.h>
 
-ENTRY(syscall_error)
+LEAF(syscall_error, 0)
+       .prologue 1
+
        /* Store return value in errno... */
        ldgp    gp, 0(t12)
-       lda     t0, errno
-       stl     v0, 0(t0)
+       stl     v0, errno
 
        /* And just kick back a -1.  */
        ldi     v0, -1
index febfa3a..627b37e 100644 (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,
 Cambridge, MA 02139, USA.  */
 
-/* In the Linux ELF and ECOFF worlds, C symbols are asm symbols.  */
-#define NO_UNDERSCORES
-
 #ifdef ASSEMBLER
 
 #include <asm/pal.h>