Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
authorRoland McGrath <roland@gnu.org>
Wed, 19 Jun 1996 06:54:12 +0000 (06:54 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 19 Jun 1996 06:54:12 +0000 (06:54 +0000)
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.

* locale/programs/locale.c: Include string.h.

* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
  (xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
  appropriate sign-extension is performed on machines with
  sizeof(long) > 4.

* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
  sizeof(int)<sizeof(long), we need to go through a temporary
  variable.

* locale/programs/ld-numeric.c: Include <alloca.h>

* libio/stdio.h (__libc_fatal): Add prototype.

* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
  in efect.

* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
  volatile to avoid "might get clobbered by longjmp" warning.

* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
  unless _LOOSE_KERNEL_NAMES is in effect (which, with high
  probability is a sure loser).
* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.

* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.

* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
to be Linux FSSTND compliant.

Mon Jun 10 17:50:31 1996  David Mosberger-Tang  <davidm@azstarnet.com>

* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.

* sysdeps/unix/sysv/linux/alpha/sysdep.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/llseek.S,
  sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
  sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
  __syscall_error to avoid intruding application name space.

* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
to SYS_get?id so that syscall stubs in sysdeps/unix define
these syscalls in terms of getxpid/getxuid/getxgid.

* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
  sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
  sysdeps/unix/execve.S, sysdeps/unix/fork.S,
  sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.

* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
  (PSEUDO_END): Rename END() to PSEUDO_END().

* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
  to PSEUDO_END to improve branch-prediction.  Include .frame
  directive to make syscalls debugabble.
(PSEUDO_END): New macro.

* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
  sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
  latter is illegal under DEC Unix.

* sysdeps/unix/alpha/sysdep.S: Renamed from
sysdeps/unix/sysv/linux/alpha/sysdep.S.  This file works for OSF/1
  as well.
* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
  EWOULDBLOCK -> EAGAIN mapping was unnecessary since
  EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).

* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
  address register in the .frame directive.

* sysdeps/alpha/copysign.c: Remove.

* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
  avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.

* errno.h: Move __END_DECLS to correct place to make file
  compilable under c++.

* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro.  Define
d_ino only if <direntry.h> hasn't defined d_fileno.

* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
arguments to weakext to make .weakext detection work on ECOFF systems.

* FAQ: Add Linux/Alpha to list of supported platforms.  Mention
that _validuser() has been replaced by __ivaliduser().

Thu Jun  6 21:39:38 1996  David Mosberger-Tang  <davidm@azstarnet.com>

* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
  as unsigned long, not as int (to avoid incorrect int->long
  promotion).

47 files changed:
ChangeLog
FAQ
configure
configure.in
dirent/dirent.h
errno.h
features.h
libio/cleanup.c
libio/iopopen.c
libio/stdio.h
locale/programs/ld-numeric.c
locale/programs/locale.c
mach/Machrules
misc/paths.h
sunrpc/rpc/types.h
sunrpc/xdr.c
sunrpc/xdr_mem.c
sunrpc/xdr_rec.c
sunrpc/xdr_stdio.c
sysdeps/alpha/bb_init_func.S
sysdeps/alpha/copysign.c [deleted file]
sysdeps/alpha/divrem.h
sysdeps/generic/memcmp.c
sysdeps/unix/_exit.S
sysdeps/unix/alpha/sysdep.S [moved from sysdeps/unix/sysv/linux/alpha/sysdep.S with 89% similarity]
sysdeps/unix/alpha/sysdep.h
sysdeps/unix/bsd/osf/alpha/start.S
sysdeps/unix/bsd/osf/alpha/sysdep.S [deleted file]
sysdeps/unix/bsd/sun/sunos4/tcsetattr.c
sysdeps/unix/execve.S
sysdeps/unix/fork.S
sysdeps/unix/getegid.S
sysdeps/unix/geteuid.S
sysdeps/unix/getppid.S
sysdeps/unix/make-syscalls.sh
sysdeps/unix/syscall.S
sysdeps/unix/sysdep.h
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/llseek.S
sysdeps/unix/sysv/linux/alpha/pipe.S
sysdeps/unix/sysv/linux/alpha/sigsuspend.S
sysdeps/unix/sysv/linux/alpha/start.S
sysdeps/unix/sysv/linux/alpha/syscall.S
sysdeps/unix/sysv/linux/alpha/sysdep.h
sysdeps/unix/sysv/linux/gnu/types.h

index 7686cd7..e16a548 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -19,6 +19,109 @@ Wed Jun 19 03:24:58 1996  Ulrich Drepper  <drepper@cygnus.com>
        * locale/setlocale.c (setlocale): Initialize local variables to
        prevent warnings.
 
+Thu Jun 13 17:25:11 1996  David Mosberger-Tang  <davidm@azstarnet.com>
+
+       * sysdeps/generic/memcmp.c: Add prototype decls for internal fns.
+
+       * locale/programs/locale.c: Include string.h.
+
+       * sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
+       (xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
+       appropriate sign-extension is performed on machines with
+       sizeof(long) > 4.
+
+       * sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
+       sizeof(int)<sizeof(long), we need to go through a temporary
+       variable.
+
+       * locale/programs/ld-numeric.c: Include <alloca.h>
+
+       * libio/stdio.h (__libc_fatal): Add prototype.
+
+       * libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
+       in efect.
+
+       * libio/iopopen.c (read_or_write, parent_end, child_end): Declare
+       volatile to avoid "might get clobbered by longjmp" warning.
+
+       * features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
+       unless _LOOSE_KERNEL_NAMES is in effect (which, with high
+       probability is a sure loser).
+       * sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.
+
+       * sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
+       * sysdeps/unix/sysv/linux/alpha/start.S: Ditto.
+
+       * misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
+       to be Linux FSSTND compliant.
+
+Mon Jun 10 17:50:31 1996  David Mosberger-Tang  <davidm@azstarnet.com>
+
+       * sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.
+
+       * sysdeps/unix/sysv/linux/alpha/sysdep.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/llseek.S,
+       sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
+       sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
+       __syscall_error to avoid intruding application name space.
+
+       * sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
+       to SYS_get?id so that syscall stubs in sysdeps/unix define
+       these syscalls in terms of getxpid/getxuid/getxgid.
+
+       * sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
+       sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
+       sysdeps/unix/execve.S, sysdeps/unix/fork.S,
+       sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.
+
+       * sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
+       (PSEUDO_END): Rename END() to PSEUDO_END().
+
+       * sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
+       to PSEUDO_END to improve branch-prediction.  Include .frame
+       directive to make syscalls debugabble.
+       (PSEUDO_END): New macro.
+
+       * sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
+       sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
+       latter is illegal under DEC Unix.
+
+       * sysdeps/unix/alpha/sysdep.S: Renamed from
+       sysdeps/unix/sysv/linux/alpha/sysdep.S.  This file works for OSF/1
+       as well.
+       * sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
+       EWOULDBLOCK -> EAGAIN mapping was unnecessary since
+       EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).
+
+       * sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
+       address register in the .frame directive.
+
+       * sysdeps/alpha/copysign.c: Remove.
+
+       * sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
+       avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.
+
+       * errno.h: Move __END_DECLS to correct place to make file
+       compilable under c++.
+
+       * dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro.  Define
+       d_ino only if <direntry.h> hasn't defined d_fileno.
+
+       * configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
+       arguments to weakext to make .weakext detection work on ECOFF systems.
+
+       * FAQ: Add Linux/Alpha to list of supported platforms.  Mention
+       that _validuser() has been replaced by __ivaliduser().
+
+Thu Jun  6 21:39:38 1996  David Mosberger-Tang  <davidm@azstarnet.com>
+
+       * sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
+       as unsigned long, not as int (to avoid incorrect int->long
+       promotion).
+
 Tue Jun 18 17:56:44 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
 
        * Version 1.91 test release.
diff --git a/FAQ b/FAQ
index 87df40e..2714779 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -50,6 +50,7 @@ in the future are:
 
        *-*-gnu                 GNU Hurd
        i[3456]86-*-linux       Linux-2.0 on Intel
+       alpha-*-linux           Linux on Alpha
 
 Other Linux platforms are also on the way to be supported but I need
 some success reports first.
@@ -214,6 +215,12 @@ incompatibilities:
        init_module     init_module     <sys/module.h>
        syslog          ksyslog_ctl     <sys/klog.h>
 
+* lpd: Older versions of lpd depend on an routine called _validuser().
+  The library does not provide this function, but instead provides
+  __ivaliduser() which has a slightly different interfaces.  Simply
+  upgrading to a newer lpd should fix this problem (e.g., the BSD 4.4
+  lpd is known to be working).
+
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
 
 \f
index 76c5888..0b248a4 100755 (executable)
--- a/configure
+++ b/configure
@@ -1483,7 +1483,7 @@ else
 ${libc_cv_asm_global_directive} foo
 foo: .long 0
 .weakext foo
-.weakext bar, foo
+.weakext foo, bar
 EOF
   if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
     libc_cv_asm_weakext_directive=yes
index eceb4da..e8e9121 100644 (file)
@@ -455,7 +455,7 @@ cat > conftest.s <<EOF
 ${libc_cv_asm_global_directive} foo
 foo: .long 0
 .weakext foo
-.weakext bar, foo
+.weakext foo, bar
 EOF
   if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
     libc_cv_asm_weakext_directive=yes
index 19e663b..3b708eb 100644 (file)
@@ -35,12 +35,16 @@ __BEGIN_DECLS
    member that gives the length of `d_name'.
 
    It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
-   member that gives the size of the entire directory entry.  */
+   member that gives the size of the entire directory entry.
+
+   It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
+   member that gives the file offset of the next directory entry.
+ */
 
 #include <direntry.h>
 
-#if defined(__USE_BSD) || defined(__USE_MISC)
-#define        d_ino           d_fileno /* Backward compatibility.  */
+#if (defined(__USE_BSD) || defined(__USE_MISC)) && !defined(d_fileno)
+#define        d_ino           d_fileno                 /* Backward compatibility.  */
 #endif
 
 /* These macros extract size information from a `struct dirent *'.
diff --git a/errno.h b/errno.h
index a9c9acd..029d435 100644 (file)
--- a/errno.h
+++ b/errno.h
@@ -60,10 +60,9 @@ typedef int error_t;
    invoked.  These variables are set up automatically at startup based on
    the value of ARGV[0] (this works only if you use GNU ld).  */
 extern char *program_invocation_name, *program_invocation_short_name;
-#endif /* Use GNU.  */
-
-#endif /* errno.h included */
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
 
 __END_DECLS
 
-#endif /* errno.h */
+#endif /* errno.h      */
index 015e230..4aee806 100644 (file)
@@ -66,7 +66,13 @@ Cambridge, MA 02139, USA.  */
 #undef __USE_GNU
 #undef __USE_REENTRANT
 #undef __FAVOR_BSD
+#undef __KERNEL_STRICT_NAMES
 
+/* Suppress kernel-name space pollution unless user expressedly asks
+   for it: */
+#ifndef _LOOSE_KERNEL_NAMES
+# define __KERNEL_STRICT_NAMES
+#endif
 
 /* Always use ANSI things.  */
 #define        __USE_ANSI      1
index 1f316eb..4a06808 100644 (file)
@@ -14,7 +14,7 @@ DEFUN_VOID(_IO_register_cleanup)
   _IO_cleanup_registration_needed = 0;
 }
 
-void (*_IO_cleanup_registration_needed)() = _IO_register_cleanup;
+void (*_IO_cleanup_registration_needed) __P((void)) = _IO_register_cleanup;
 #else
-void (*_IO_cleanup_registration_needed)() = NULL;
+void (*_IO_cleanup_registration_needed) __P((void)) = NULL;
 #endif /* _G_HAVE_ATEXIT */
index b9ee737..5b9bd48 100644 (file)
@@ -84,9 +84,9 @@ DEFUN(_IO_proc_open, (fp, command, mode),
       _IO_FILE* fp AND const char *command AND const char *mode)
 {
 #if _IO_HAVE_SYS_WAIT
-  int read_or_write;
+  volatile int read_or_write;
+  volatile int parent_end, child_end;
   int pipe_fds[2];
-  int parent_end, child_end;
   _IO_pid_t child_pid;
   if (_IO_file_is_open(fp))
     return NULL;
index 022d210..048a11d 100644 (file)
@@ -145,6 +145,8 @@ extern int ungetc __P ((int c, FILE* fp));
 extern int vfprintf __P ((FILE *fp, char __const *fmt0, _G_va_list));
 extern int vprintf __P ((char __const *fmt, _G_va_list));
 extern int vsprintf __P ((char* string, __const char* format, _G_va_list));
+extern void __libc_fatal __P ((__const char *__message))
+     __attribute__ ((__noreturn__));
 
 #ifndef __STRICT_ANSI__
 extern int dprintf __P ((int, __const char *, ...));
index dcee7bd..dd5ced7 100644 (file)
@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA.  */
 # include <config.h>
 #endif
 
+#include <alloca.h>
 #include <langinfo.h>
 #include <string.h>
 
index 41c7b1d..ef5d9ae 100644 (file)
@@ -30,6 +30,7 @@ Cambridge, MA 02139, USA.  */
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
+#include <string.h>
 
 #include "localeinfo.h"
 
index 0015e30..4bde0fe 100644 (file)
@@ -140,7 +140,7 @@ $(objpfx)%_server.c $(objpfx)%_server.h:
        $(include-%.defs) | \
        $(MIG) - /dev/null -prefix _S_ \
               $(MIGFLAGS) $(server-MIGFLAGS) $(MIGFLAGS-$*) \
-              $< -user /dev/null -header /dev/null \
+              -user /dev/null -header /dev/null \
               -server $(@:.h=.c) -sheader $(@:.c=.h)
 
 # To get header files that declare both the straight and __ functions,
index 5f7a6b4..00a546f 100644 (file)
@@ -50,7 +50,7 @@
 #define        _PATH_DRUM      "/dev/drum"
 #define        _PATH_KMEM      "/dev/kmem"
 #define        _PATH_MAILDIR   "/var/mail"
-#define        _PATH_MAN       "/usr/share/man"
+#define        _PATH_MAN       "/usr/man"
 #define        _PATH_MEM       "/dev/mem"
 #define        _PATH_NOLOGIN   "/etc/nologin"
 #define        _PATH_SENDMAIL  "/usr/sbin/sendmail"
index 1f620ef..032543f 100644 (file)
@@ -52,6 +52,9 @@ extern char *malloc();
 #include <sys/types.h>
 #endif
 #include <sys/time.h>
+#include <sys/param.h>
+
+#include <netinet/in.h>
 
 #ifndef INADDR_LOOPBACK
 #define       INADDR_LOOPBACK         (u_long)0x7F000001
index a79db85..fccc2a5 100644 (file)
@@ -99,10 +99,30 @@ xdr_int(xdrs, ip)
        (void) (xdr_short(xdrs, (short *)ip));
        return (xdr_long(xdrs, (long *)ip));
 #else
-       if (sizeof (int) == 4) {
+       if (sizeof (int) < sizeof (long)) {
+               long l;
+
+               switch (xdrs->x_op) {
+                     case XDR_ENCODE:
+                       l = (long) *ip;
+                       return XDR_PUTLONG(xdrs, &l);
+
+                     case XDR_DECODE:
+                       if (!XDR_GETLONG(xdrs, &l)) {
+                               return FALSE;
+                       }
+                       *ip = (int) l;
+                       return TRUE;
+               }
+       } else if (sizeof (int) == sizeof (long)) {
                return (xdr_long(xdrs, (long *)ip));
-       } else {
+       } else if (sizeof (int) == sizeof (short)) {
                return (xdr_short(xdrs, (short *)ip));
+       } else {
+               /* force unresolved reference (link-time error): */
+               extern unexpected_sizes_in_xdr_int ();
+
+               unexpected_sizes_in_xdr_int();
        }
 #endif
 }
@@ -115,15 +135,34 @@ xdr_u_int(xdrs, up)
        XDR *xdrs;
        u_int *up;
 {
-
 #ifdef lint
        (void) (xdr_short(xdrs, (short *)up));
        return (xdr_u_long(xdrs, (u_long *)up));
 #else
-       if (sizeof (u_int) == 4) {
+       if (sizeof (u_int) < sizeof (u_long)) {
+               u_long l;
+
+               switch (xdrs->x_op) {
+                     case XDR_ENCODE:
+                       l = (u_long) *up;
+                       return XDR_PUTLONG(xdrs, &l);
+
+                     case XDR_DECODE:
+                       if (!XDR_GETLONG(xdrs, &l)) {
+                               return FALSE;
+                       }
+                       *up = (u_int) l;
+                       return TRUE;
+               }
+       } else if (sizeof (u_int) == sizeof (u_long)) {
                return (xdr_u_long(xdrs, (u_long *)up));
-       } else {
+       } else if (sizeof (u_int) == sizeof (u_short)) {
                return (xdr_short(xdrs, (short *)up));
+       } else {
+               /* force unresolved reference (link-time error): */
+               extern unexpected_sizes_in_xdr_u_int ();
+
+               unexpected_sizes_in_xdr_u_int();
        }
 #endif
 }
index fb15f11..ac7c954 100644 (file)
@@ -99,7 +99,7 @@ xdrmem_getlong(xdrs, lp)
 
        if ((xdrs->x_handy -= 4) < 0)
                return (FALSE);
-       *lp = (long)ntohl((u_long)(*((int32_t *)(xdrs->x_private))));
+       *lp = (int32_t) ntohl((*((int32_t *)(xdrs->x_private))));
        xdrs->x_private += 4;
        return (TRUE);
 }
index 4543595..974e829 100644 (file)
@@ -201,14 +201,14 @@ xdrrec_getlong(xdrs, lp)
        if (rstrm->fbtbc >= BYTES_PER_XDR_UNIT &&
            rstrm->in_boundry - (char *) buflp >= BYTES_PER_XDR_UNIT)
        {
-               *lp = ntohl(*buflp);
+               *lp = (int32_t) ntohl(*buflp);
                rstrm->fbtbc -= BYTES_PER_XDR_UNIT;
                rstrm->in_finger += BYTES_PER_XDR_UNIT;
        } else {
                if (! xdrrec_getbytes(xdrs, (caddr_t) &mylong,
                                      BYTES_PER_XDR_UNIT))
                        return FALSE;
-               *lp = ntohl(mylong);
+               *lp = (int32_t) ntohl(mylong);
        }
        return TRUE;
 }
index da4877a..5f01699 100644 (file)
@@ -108,7 +108,7 @@ xdrstdio_getlong(xdrs, lp)
 
        if (fread((caddr_t)&mycopy, 4, 1, (FILE *)xdrs->x_private) != 1)
                return (FALSE);
-       *(int32_t*)lp = ntohl(mycopy);
+       *lp = (int32_t) ntohl(mycopy);
        return (TRUE);
 }
 
index dfa8c1d..49be0b2 100644 (file)
@@ -53,11 +53,11 @@ init:
        br      pv, 1f
 1:     ldgp    gp, 0(pv)
 
-       ld    t1, __bb_head
+       ldiq    t1, __bb_head
        lda     t3, _gmonparam
        ldq     t2, 0(t1)
        ldl     t3, 0(t3)               /* t3 = _gmonparam.state */
-       ldi     t0, 1
+       lda     t0, 1
        stq     t0, ZERO_WORD(a0)       /* blocks->zero_word = 1 */
        stq     t2, NEXT(a0)            /* blocks->next = __bb_head */
        stq     a0, 0(t1)
diff --git a/sysdeps/alpha/copysign.c b/sysdeps/alpha/copysign.c
deleted file mode 100644 (file)
index 69544b0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1992, 1993, 1995 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#define __NO_MATH_INLINES
-
-#include <math.h>
-
-/* Return X with its sign changed to Y's.  */
-__inline double
-__copysign (double __x, double __y)
-{
-  __asm ("cpys %1, %2, %0" : "=f" (__x) : "f" (__y), "f" (__x));
-  return __x;
-}
-
-weak_alias (__copysign, copysign)
index f296179..2951335 100644 (file)
@@ -125,7 +125,7 @@ FUNC_NAME:
        ldq     gp, 0x10(sp)
        lda     sp, 0x18(sp)
 #endif
-       .frame  sp, FRAME_SIZE, ra, 0
+       .frame  sp, FRAME_SIZE, retaddr, 0
        lda     sp,-FRAME_SIZE(sp)
        .prologue 1
        stq     arg1,0x00(sp)
index 8f5eca0..d9f93ba 100644 (file)
@@ -84,6 +84,9 @@ typedef unsigned char byte;
 /* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
    A and B are known to be different.
    This is needed only on little-endian machines.  */
+
+static int memcmp_bytes __P((op_t, op_t));
+
 #ifdef  __GNUC__
 __inline
 #endif
@@ -107,6 +110,8 @@ memcmp_bytes (a, b)
 }
 #endif
 
+static int memcmp_common_alignment __P((long, long, size_t));
+
 /* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
    objects (not LEN bytes!).  Both SRCP1 and SRCP2 should be aligned for
    memory operations on `op_t's.  */
@@ -194,6 +199,8 @@ memcmp_common_alignment (srcp1, srcp2, len)
   return 0;
 }
 
+static int memcmp_not_common_alignment __P((long, long, size_t));
+
 /* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
    `op_t' objects (not LEN bytes!).  SRCP2 should be aligned for memory
    operations on `op_t', but SRCP1 *should be unaligned*.  */
index a171689..50eb687 100644 (file)
@@ -20,3 +20,4 @@ Cambridge, MA 02139, USA.  */
 
 PSEUDO (_exit, exit, 1)
        /* Shouldn't get here.  */
+PSEUDO_END(_exit)
similarity index 89%
rename from sysdeps/unix/sysv/linux/alpha/sysdep.S
rename to sysdeps/unix/alpha/sysdep.S
index 84582f4..3e7666f 100644 (file)
@@ -20,7 +20,12 @@ Cambridge, MA 02139, USA.  */
 #define _ERRNO_H
 #include <errnos.h>
 
-LEAF(syscall_error, 0)
+       .comm errno, 4
+#ifdef __ELF__
+       .type errno, @object
+#endif
+
+LEAF(__syscall_error, 0)
        .prologue 1
 
        /* Store return value in errno... */
@@ -31,4 +36,4 @@ LEAF(syscall_error, 0)
        ldi     v0, -1
        ret
 
-       .end syscall_error
+       END(__syscall_error)
index 6fed4a6..4b3f9aa 100644 (file)
@@ -58,25 +58,27 @@ Cambridge, MA 02139, USA.  */
   .frame sp, 0, ra
 #endif
 
-/* Note that while it's better structurally, going back to set errno
-   can make things confusing if you're debugging---it looks like it's jumping
-   backwards into the previous fn.  */
+/* Mark the end of function SYM.  */
+#undef END
+#define END(sym)       .end sym
+
+/* Note that PSEUDO/PSEUDO_END use label number 1996---do not use a
+   label of that number between those two macros!  */
 #ifdef __STDC__
 #define PSEUDO(name, syscall_name, args)       \
     .globl name;                               \
     .align 3;                                  \
     .ent name,0;                               \
                                                \
-1:  br         gp, 2f;                         \
-2:  ldgp       gp, 0(gp);                      \
-    jmp                zero, syscall_error;            \
-                                               \
 name##:                                                \
-    ldi                v0, SYS_ify(syscall_name);      \
+    .frame sp, 0, ra                           \
+    .prologue 1; /* yes, we do use gp */       \
+    ldiq       v0, SYS_ify(syscall_name);      \
     .set noat;                                 \
     call_pal   PAL_callsys;                    \
     .set at;                                   \
-    bne                a3, 1b;                         \
+    bne                a3, 1996f;                      \
 3:
 #else
 #define PSEUDO(name, syscall_name, args)       \
@@ -84,21 +86,35 @@ name##:                                             \
     .align 3;                                  \
     .ent name,0;                               \
                                                \
-1:  br         gp, 2f;                         \
-2:  ldgp       gp, 0(gp);                      \
-    jmp                zero, syscall_error;            \
-                                               \
 name/**/:                                      \
-    ldi                v0, SYS_ify(syscall_name);      \
+    .frame sp, 0, ra                           \
+    .prologue 1; /* yes, we do use gp */       \
+    ldiq       v0, SYS_ify(syscall_name);      \
     .set noat;                                 \
     call_pal   PAL_callsys;                    \
     .set at;                                   \
-    bne                a3, 1b;                         \
+    bne                a3, 1996f;                      \
 3:
 #endif
 
-#undef END
-#define END(sym)       .end sym
+#undef PSEUDO_END
+
+#ifdef PIC
+/* When building a shared library, we can use a branch since the text
+   section of the library is much smaller than 4MB.  If we ever break
+   this assumption, the linker will tell us.  */
+# define PSEUDO_END(sym)                       \
+1996:                                          \
+    br         zero, __syscall_error;          \
+    END(sym)
+#else
+# define PSEUDO_END(sym)                       \
+1996:                                          \
+    br         gp, 2f;                         \
+2:  ldgp       gp, 0(gp);                      \
+    jmp                zero, __syscall_error;          \
+    END(sym)
+#endif
 
 #define r0     v0
 #define r1     a4
index f3995a2..d5ff140 100644 (file)
@@ -18,8 +18,6 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.comm errno,           4
-
 #if 0
 .sdata
 .globl STARTFRM
diff --git a/sysdeps/unix/bsd/osf/alpha/sysdep.S b/sysdeps/unix/bsd/osf/alpha/sysdep.S
deleted file mode 100644 (file)
index bc4865c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* 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.  */
-
-#include <sysdep.h>
-#define _ERRNO_H
-#include <errnos.h>
-
-ENTRY(syscall_error)
-#ifdef EWOULDBLOCK_sys
-       /* We translate the system's EWOULDBLOCK error into EAGAIN.
-          The GNU C library always defines EWOULDBLOCK==EAGAIN.
-          EWOULDBLOCK_sys is the original number.  */
-       subq v0, EWOULDBLOCK_sys, t0
-       cmoveq t0, EAGAIN, v0
-#endif
-
-       /* Store it in errno... */
-!      ldgp gp, 0(t12)
-       stl v0, errno
-
-       /* And just kick back a -1.  */
-       ldil v0, -1
-       ret
-
-       .end syscall_error
index 4ae139a..f88951f 100644 (file)
@@ -27,7 +27,7 @@ int
 DEFUN(tcsetattr, (fd, optional_actions, termios_p),
       int fd AND int optional_actions AND CONST struct termios *termios_p)
 {
-  int cmd;
+  unsigned long cmd;
 
   switch (optional_actions)
     {
index 7a4fc13..5d48bc6 100644 (file)
@@ -28,5 +28,6 @@ Cambridge, MA 02139, USA.  */
 
 SYSCALL__ (execve, 3)
        ret
+PSEUDO_END(execve)
 
 weak_alias (__execve, execve)
index 1c360c6..b8b9972 100644 (file)
@@ -28,5 +28,6 @@ SYSCALL__ (fork, 0)
        subl #1, r1
        andl r1, r0
        ret
+PSEUDO_END(fork)
 
 weak_alias (__fork, fork)
index 1bd447b..aff66bb 100644 (file)
@@ -25,5 +25,6 @@ PSEUDO (__getegid, getgid, 0)
        MOVE(r1, r0)
 #endif
        ret
+PSEUDO_END(__getegid)
 
 weak_alias (__getegid, getegid)
index 339eb53..db4087f 100644 (file)
@@ -25,5 +25,6 @@ PSEUDO (__geteuid, getuid, 0)
        MOVE(r1, r0)
 #endif
        ret
+PSEUDO_END(__geteuid)
 
 weak_alias (__geteuid, geteuid)
index 132c374..3f0c745 100644 (file)
@@ -25,5 +25,6 @@ PSEUDO (__getppid, getpid, 0)
        MOVE(r1, r0)
 #endif
        ret
+PSEUDO_END(__getppid)
 
 weak_alias (__getppid, getppid)
index 5251e84..260769e 100644 (file)
@@ -62,7 +62,7 @@ EOF
        (echo '#include <sysdep.h>'; \\
         echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
         echo ' ret'; \\
-        echo 'END($strong)'; \\"
+        echo 'PSEUDO_END($strong)'; \\"
 
   # Append any weak aliases defined for this syscall function.
   for name in $weak; do
index e3ef177..d3f13dc 100644 (file)
@@ -27,3 +27,4 @@ Cambridge, MA 02139, USA.  */
 
 SYSCALL (syscall, 1)
        ret
+PSEUDO_END(syscall)
index 0dde0b0..24be006 100644 (file)
@@ -55,6 +55,6 @@ Cambridge, MA 02139, USA.  */
 #define SYS_ify(syscall_name) SYS_/**/syscall_name
 #endif
 
-/* Terminate a function named SYM.  This is used on some platforms to
-   generate correct debugging information.  */
-#define END(sym)
+/* Terminate a system call named SYM.  This is used on some platforms
+   to generate correct debugging information.  */
+#define PSEUDO_END(sym)
index 1c4a4f9..26bf97f 100644 (file)
@@ -30,7 +30,7 @@ LEAF(__brk, 0)
        ldgp    gp, 0(t12)
        .prologue 1
 
-       ldi     v0, __NR_brk
+       ldiq    v0, __NR_brk
        call_pal PAL_callsys
 
        /* Correctly handle the brk(0) query case.  */
@@ -46,7 +46,7 @@ LEAF(__brk, 0)
 
        /* What a horrible way to die.  */
 error: ldi     v0, ENOMEM
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
        END(__brk)
 
index 52c945a..e09fa73 100644 (file)
@@ -24,7 +24,7 @@ Cambridge, MA 02139, USA.  */
 
 LEAF(__ieee_get_fp_control, 8)
        lda     sp, -8(sp)
-       .prologue 0
+       .prologue 1
 
        mov     sp, a1
        ldi     a0, GSI_IEEE_FP_CONTROL
@@ -39,7 +39,7 @@ LEAF(__ieee_get_fp_control, 8)
 error: lda     sp, 8(sp)
        br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
        END(__ieee_get_fp_control)
 
index d72585d..d748c81 100644 (file)
@@ -22,7 +22,7 @@ Cambridge, MA 02139, USA.  */
 
 LEAF(__ieee_set_fp_control, 8)
        lda     sp, -8(sp)
-       .prologue 0
+       .prologue 1
 
        stq     a0, 0(sp)
        mov     sp, a1
@@ -37,7 +37,7 @@ LEAF(__ieee_set_fp_control, 8)
 
 error: br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
        END(__ieee_set_fp_control)
 
index bd8c659..6020f26 100644 (file)
@@ -18,19 +18,17 @@ 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. 
-*/
+   there who may depend on it being around.  */
 
 #include <sysdep.h>
 
        .text
 ENTRY(llseek)
-       .prologue 0
-
-       mov     a3, t0          /* save result address */
+       .prologue 1
 
        sll     a1, 32, a1      /* build a 64 bit ofs out of 32 bit operands */
        zap     a2, 0xf0, a2
+       mov     a3, t0          /* save result address */
        bis     a2, a1, a1
 
        mov     a4, a2          /* shift down whence */
@@ -44,6 +42,6 @@ ENTRY(llseek)
 
 error: br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
        END(llseek)
index b23803c..60334ad 100644 (file)
@@ -20,23 +20,11 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-       .text
-LEAF(__pipe, 0)
-       .prologue 0
-
-       ldi     v0, __NR_pipe
-       call_pal PAL_callsys
-       bne     a3, error
-
+PSEUDO (__pipe, pipe, 0)
        stl     r0, 0(a0)
        stl     r1, 4(a0)
        mov     zero, v0
        ret
-
-error: br      gp, 1f
-1:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
-
-       END(__pipe)
+PSEUDO_END(__pipe)
 
 weak_alias (__pipe, pipe)
index 26a1869..aaae9a3 100644 (file)
@@ -24,7 +24,7 @@ Cambridge, MA 02139, USA.  */
        .text
 
 LEAF(sigsuspend, 0)
-       .prologue 0
+       .prologue 1
 
        ldq     a0, 0(a0)
        ldi     v0, __NR_sigsuspend
@@ -34,6 +34,6 @@ LEAF(sigsuspend, 0)
 
 error: br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
        END(sigsuspend)
index a7099f6..bffa913 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
-   Contributed by Brendan Kehoe (brendan@zen.org).
+   Contributed by Richard Henderson <rth@tamu.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
@@ -18,81 +18,76 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-       .comm errno, 4
-#ifdef __ELF__
-       .type errno, @object
-#endif
-
        .text
-LEAF(__start, 16)
-       lda     sp, -16(sp)
-       .prologue 0
-
-       stq     zero, 8(sp)             /* terminate frame chain */
-
-       br      t0, 1f
-1:     ldgp    gp, 0(t0)
-
-       mov     zero, a0                /* establish __fpu_control w/kernel */
-       jsr     ra, __setfpucw
+       .globl __start
+       .align 3
+       .ent __start, 0
+__start:
+       .frame fp, 0, zero
+       mov     zero, fp
+       br      gp, 1f
+1:     ldgp    gp, 0(gp)
+       .prologue 1
+
+  /* Save v0.  When starting a binary via the dynamic linker, s0
+     contains the address of the shared library termination function,
+     which we will register below with atexit() to be called by exit().
+     If we are statically linked, this will be NULL.  */
+       mov     v0, s0
+
+  /* Do essential libc initialization (sp points to argc, argv, and envp)  */
+       jsr     ra, __libc_init_first
        ldgp    gp, 0(ra)
 
-       /* clear out errno. */
-       stl     zero, (errno)
+  /* Now that we have the proper stack frame, register library termination
+     function, if there is any:  */
 
-       ldl     a0, 16(sp)      /* get argc */
-       lda     a1, 24(sp)      /* get argv */
+       beq     s0, 1f
+       mov     s0, a0
+       jsr     ra, atexit
+       ldgp    gp, 0(ra)
+1:
 
-       /* initialize environ: */
-       lda     t0, environ
-       s8addq  a0, a1, a2
-       addq    a2, 0x8, a2
-       stq     a2, 0(t0)
+  /* Extract the arguments and environment as encoded on the stack.  */
+       ldl     a0, 0(sp)       /* get argc */
+       lda     a1, 8(sp)       /* get argv */
+       s8addq  a0, a1, a2      /* get envp */
+       addq    a2, 8, a2
+       stq     a2, _environ
 
-       mov     a0, s0
+       mov     a0, s0          /* tuck them away */
        mov     a1, s1
        mov     a2, s2
 
 #ifdef HAVE_INITFINI
-       /* register the _fini sections to ensure destructors get run: */
-       lda     a0, _fini
-       jsr     ra, atexit
-       ldgp    gp, 0(ra)
-
-       /* Now run the _init section of the program itself.  The _init
-          sections of shared libraries will be run by the dynamic linker.  */
+  /* Call _init, the entry point to our own .init section.  */
        jsr     ra, _init
        ldgp    gp, 0(ra)
 
-       /* initialize constructors: */
-       jsr     ra, __main
+  /* Register our .fini section with atexit.  */
+       lda     a0, _fini
+       jsr     ra, atexit
        ldgp    gp, 0(ra)
 #else
-       jsr     ra, __libc_init
+  /* initialize constructors: */
+       jsr     ra, __main
        ldgp    gp, 0(ra)
 #endif
-
        mov     s0, a0
        mov     s1, a1
        mov     s2, a2
 
+  /* Call the user's main and exit with its return value.  */
        jsr     ra, main
        ldgp    gp, 0(ra)
 
        mov     v0, a0
+       jsr     ra, exit
 
-       lda     pv, exit
-       jsr     ra, (pv), 1
-       ldgp    gp, 0(ra)
-
-       /* in case exit returns: */
-
-1:     ldi     v0, __NR_exit
-       call_pal PAL_callsys
-       br      1b
-
-       .end __start
-
+  /* Die very horribly if exit returns.  Call_pal hlt is callable from
+     kernel mode only; this will result in an illegal instruction trap.  */
+       call_pal 0
+END(__start)
 
 /* Define a symbol for the first piece of initialized data.  */
        .data
index c80a523..f1b36e9 100644 (file)
@@ -42,19 +42,19 @@ Cambridge, MA 02139, USA.  */
 
 
 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
+       mov     a0, v0          /* Syscall number -> v0 */
+       mov     a1, a0          /* arg1-arg5 -> a0-a4 */
+       mov     a2, a1
+       mov     a3, a2
+       mov     a4, a3
+       mov     a5, a4
+
+       call_pal PAL_callsys    /* Invoke system call */
        bne     a3, error
        ret
 
 error: br      gp, 2f
 2:     ldgp    gp, 0(gp)
-       jmp     zero, syscall_error
+       jmp     zero, __syscall_error
 
 weak_alias(__syscall, syscall)
index 627b37e..8f5f5dd 100644 (file)
@@ -38,15 +38,15 @@ Cambridge, MA 02139, USA.  */
 # define SYS_ify(syscall_name) __NR_/**/syscall_name
 #endif
 
-/*
- * Define some aliases for syscalls that return two values (in r0 and r1):
- */
+/* Define some aliases to make automatic syscall generation work
+   properly.  The SYS_* variants are for the benefit of the files in
  sysdeps/unix.  */
 #define __NR_getpid    __NR_getxpid
-#define __NR_getppid   __NR_getxpid
 #define __NR_getuid    __NR_getxuid
-#define __NR_geteuid   __NR_getxuid
 #define __NR_getgid    __NR_getxgid
-#define __NR_getegid   __NR_getxgid
+#define SYS_getpid     __NR_getxpid
+#define SYS_getuid     __NR_getxuid
+#define SYS_getgid     __NR_getxgid
 
 /*
  * Some syscalls no Linux program should know about:
index 402df2a..0bc072b 100644 (file)
@@ -19,10 +19,9 @@ Cambridge, MA 02139, USA.  */
 #ifndef        _GNU_TYPES_H
 #define        _GNU_TYPES_H    1
 
-/* Get actual type definitions for architecture from kernel headers.
-   This #define tells <linux/types.h> not to define `dev_t' et al itself.  */
-#define __KERNEL_STRICT_NAMES
-#define _LINUX_TYPES_DONT_EXPORT
+#include <features.h>
+
+/* Get actual type definitions for architecture from kernel headers.  */
 #include <linux/types.h>
 
 /* Convenience types.  */