]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fri May 24 02:31:36 1996 Ulrich Drepper <drepper@cygnus.com>
authorRoland McGrath <roland@gnu.org>
Fri, 24 May 1996 20:16:39 +0000 (20:16 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 24 May 1996 20:16:39 +0000 (20:16 +0000)
* sysdeps/unix/sysv/linux/speed.c: Add new speed value 460800.

Thu May 23 23:09:33 1996  Ulrich Drepper  <drepper@cygnus.com>

* FAQ: Add answer for 100% source code compatibility to Linux
libc by David Mosberger-Tang.

Update from bind-4.3.4-T3B.
* inet/arpa/inet.h: Add prototypes for inet_pton, inet_ntop,
inet_nsap_addr, and inet_nsap_ntoa.
* resolv/gethnamaddr.c: Correct compatibility problems (sprintf),
remove fourth argument to inet_pton and correct handling of
host_addr passing.
* resolv/inet_ntop.c: Correct compatibility problems (sprintf).
* resolv/inet_pton.c: Remove fourth argument.
* resolv/resolv.h: Remove prototypes for inet_nsap_addr and
inet_nsap_ntoa.  Now on <arpa/inet.h>.

* stdlib/gmp-impl.h: Add prototypes for internal functions.

Thu May 23 22:49:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

* Rules (subdir_install): Remove dep on sor-$(subdir).
(static-only-routines): Removed variable and associated rules.

* sysdeps/unix/sysv/linux/alpha/Makefile (headers): Add
  sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/ffs.S,
  sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
  sysdeps/unix/sysv/linux/alpha/start.S,

15 files changed:
ChangeLog
FAQ
Rules
inet/arpa/inet.h
resolv/gethnamaddr.c
resolv/inet_ntop.c
resolv/inet_pton.c
resolv/resolv.h
stdlib/gmp-impl.h
sysdeps/alpha/bsd-_setjmp.S
sysdeps/generic/utmpbits.h
sysdeps/unix/sysv/linux/alpha/Makefile
sysdeps/unix/sysv/linux/alpha/sigsuspend.S
sysdeps/unix/sysv/linux/alpha/start.S
sysdeps/unix/sysv/linux/speed.c

index ebd7bebe142125f1d3cb1ba1b5a4b3c37dea4186..3bf5a87dff81b4729b2be96218f813790c17e330 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+Fri May 24 02:31:36 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/unix/sysv/linux/speed.c: Add new speed value 460800.
+
+Thu May 23 23:09:33 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * FAQ: Add answer for 100% source code compatibility to Linux
+       libc by David Mosberger-Tang.
+
+       Update from bind-4.3.4-T3B.
+       * inet/arpa/inet.h: Add prototypes for inet_pton, inet_ntop,
+       inet_nsap_addr, and inet_nsap_ntoa.
+       * resolv/gethnamaddr.c: Correct compatibility problems (sprintf),
+       remove fourth argument to inet_pton and correct handling of
+       host_addr passing.
+       * resolv/inet_ntop.c: Correct compatibility problems (sprintf).
+       * resolv/inet_pton.c: Remove fourth argument.
+       * resolv/resolv.h: Remove prototypes for inet_nsap_addr and
+       inet_nsap_ntoa.  Now on <arpa/inet.h>.
+
+       * stdlib/gmp-impl.h: Add prototypes for internal functions.
+
+Thu May 23 22:49:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * Rules (subdir_install): Remove dep on sor-$(subdir).
+       (static-only-routines): Removed variable and associated rules.
+
 Wed May 22 00:40:50 1996  David Mosberger-Tang  <davidm@azstarnet.com>
 
        * sysdeps/unix/sysv/linux/alpha/speed.c (speeds): Add entry for
@@ -5,7 +32,7 @@ Wed May 22 00:40:50 1996  David Mosberger-Tang  <davidm@azstarnet.com>
 
        * sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.
 
-       * sysdeps/unix/sysv/linux/Makefile (headers): Add
+       * sysdeps/unix/sysv/linux/alpha/Makefile (headers): Add
        alpha/ptrace.h.
        * sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h: New file.
 
@@ -32,15 +59,16 @@ Wed May 22 00:40:50 1996  David Mosberger-Tang  <davidm@azstarnet.com>
        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/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/sigsuspend.S,
        sysdeps/unix/sysv/linux/alpha/syscall.S,
+       sysdeps/unix/sysv/linux/alpha/start.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".
diff --git a/FAQ b/FAQ
index 9334108afa77eae2305f86ffd41a5c95d0897eb5..91e531dbf11f6d46e8b2c437a3714bbcb13946a9 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -19,6 +19,28 @@ this document let me know.
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
 [Q1]   ``What systems the GNU C Library runs on?''
 
+[Q2]   ``What compiler do I need to translate GNU libc?''
+
+[Q3]   ``When starting make I get only errors messages.
+         What's wrong?''
+
+[Q4]   ``After I changed configure.in I get `Autoconf version X.Y.
+         or higher is required for this script'.  What can I do?''
+
+[Q5]   ``Do I need a special linker or archiver?''
+
+[Q6]   ``Do I need some more things to compile GNU C Library?''
+
+[Q7]   ``When I run `nm libc.so|grep " U "' on the produced library
+         I still find unresolved symbols?  Can this be ok?''
+
+[Q8]   ``I expect GNU libc to be 100% source code compatible with
+         the old Linux based GNU libc.  Why isn't it like this?''
+
+\f
+~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+[Q1]   ``What systems the GNU C Library runs on?''
+
 [A1] {UD} This is difficult to answer.  The file `README' lists the
 architectures GNU libc is known to run *at some time*.  This does not
 mean that it still can be compiled and run on them in the moment.
@@ -128,11 +150,67 @@ errors while linking.
 
 
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+[Q8]   ``I expect GNU libc to be 100% source code compatible with
+         the old Linux based GNU libc.  Why isn't it like this?''
+
+[A8] {DMT} Not every extension in Linux libc's history was well
+thought.  In fact it had a lot of problems with standard compliance
+and cleanliness.  With the introduction of a new version number these
+errors now can be corrected.  The following list shows a list of the
+know source code incompatibilities.
+
+* _GNU_SOURCE: glibc does not automatically define _GNU_SOURCE.  Thus,
+  if a program depends on GNU extensions, it is necessary
+  to compile it with C compiler option -D_GNU_SOURCE.  This difference
+  normally mainfests itself in the form of missing prototypes and/or
+  data type definitions.  Thus, if you get such errors, the first thing you
+  should do is grep the header files in /usr/include and /usr/include/sys
+  to check whether the functions are really missing or whether it is
+  just necessary to add a define of _GNU_SOURCE.  Similar comments apply
+  to _BSD_SOURCE, _POSIX_SOURCE, _SVID_SOURCE etc (see
+  /usr/include/features.h).
+
+* reboot(): GNU libc sanitizes the interface of reboot() to be more
+  compatible with the interface used on other OSes.  In particular,
+  reboot() as implemented in glibc takes just one argument.  This argument
+  corresponds to the third argument of the Linux reboot system call.
+  That is, a call of the form reboot(a, b, c) needs to be changed into
+  reboot(c).
+
+* errno: If a program uses variable "errno", then it _must_ include header
+  file <errno.h>.  The old libc often (erroneously) declared this variable
+  implicitly as a side-effect of including other libc header files.  glibc
+  is careful to avoid such namespace pollution, which, in turn, means that
+  you really need to include the header files that you depend on.  This
+  difference normally manifests itself in the form of the compiler
+  complaining about the references of the undeclared symbol "errno".
+
+* Linux-specific syscalls: All Linux system calls now have appropriate
+  library wrappers and corresponding declarations in various header files.
+  This is because the syscall() macro that was traditionally used to
+  work around missing syscall wrappers are inherently non-portable and
+  error-prone.  The following tables lists all the new syscall stubs,
+  the header-file declaring their interface and the system call name.
+
+       syscall name:   wrapper name:   declaring header file:
+       -------------   -------------   ----------------------
+       bdflush         bdflush         <unistd.h>
+       create_module   create_module   <sys/module.h>
+       delete_module   delete_module   <sys/module.h>
+       get_kernel_syms get_kernel_syms <sys/module.h>
+       init_module     init_module     <sys/module.h>
+       syslog          ksyslog_ctl     <unistd.h>
+
+  To get the Linux-specific declarations in <unistd.h>, you'll need
+  to define C pre-processor macro _LINUX_SOURCE during compilation.
 
 
+~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+
 \f
 Answers were given by:
 {UD} Ulrich Drepper, <drepper@cygnus.com>
+{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
 
 \f
 Local Variables:
diff --git a/Rules b/Rules
index 2eddd6ecff883721141a1bb07ce690a9d85c2547..edfb1517d8000d4bcc1962a3cb90d7f8fc8ee194 100644 (file)
--- a/Rules
+++ b/Rules
@@ -126,33 +126,7 @@ subdir_echo-distinfo:
 # our portions of the library because the parent make will install it later
 # (likewise the stubs file).
 .PHONY: subdir_install
-subdir_install: install-no-libc.a lib-noranlib stubs \
-               $(common-objpfx)sor-$(subdir)
-
-ifdef objpfx
-sor-objpfx = $(objpfx:../%=%)
-else
-sor-objpfx = $(subdir)
-endif
-
-ifndef libc.so-version
-# Undefine this because it can't work when we libc.so is unversioned.
-static-only-routines =
-endif
-
-# This communicates to the parent during install the set of routines that
-# need to be put into the special libc.so archive.
-$(common-objpfx)sor-$(subdir): Makefile
-       echo $(static-only-routines:%=$(sor-objpfx)%.o) > $@T
-       mv -f $@T $@
-
-ifdef static-only-routines
-# These routines are to be omitted from the shared library object,
-# so we replace the PIC objects for them with the empty object file.
-$(static-only-routines:%=$(objpfx)%.so): %.so: $(objpfx)empty.o
-       rm -f $@
-       ln $< $@
-endif
+subdir_install: install-no-libc.a lib-noranlib stubs
 
 .PHONY: subdir_TAGS subdir_dist
 subdir_TAGS: TAGS
index 6cb672f336615d84faa3aded827dc2e1fef45d35..b0a91312d39bba7cd06ce01276909eb382b448c0 100644 (file)
@@ -49,6 +49,10 @@ struct in_addr        inet_makeaddr __P((u_int32_t , u_int32_t));
 u_int32_t       inet_netof __P((struct in_addr));
 u_int32_t       inet_network __P((const char *));
 char           *inet_ntoa __P((struct in_addr));
+int             inet_pton __P((int af, const char *src, void *dst));
+const char     *inet_ntop __P((int af, const void *src, char *dst, size_t s));
+u_int           inet_nsap_addr __P((const char *, u_char *, int maxlen));
+char           *inet_nsap_ntoa __P((int, const u_char *, char *ascii));
 __END_DECLS
 
 #endif /* !_INET_H_ */
index b80595b7d51ef7bc06dcfa6503fba916bdfcbbf6..18f4764428ebc17a044b8d5902026dbe771459b9 100644 (file)
@@ -88,6 +88,12 @@ static char rcsid[] = "$Id$";
 # include <../conf/options.h>
 #endif
 
+#ifdef SPRINTF_CHAR
+# define SPRINTF(x) strlen(sprintf/**/x)
+#else
+# define SPRINTF(x) sprintf x
+#endif
+
 #define        MAXALIASES      35
 #define        MAXADDRS        35
 #define        MAXADDRBUFSIZE  8192
@@ -475,8 +481,7 @@ gethostbyname2(name, af)
                                 * Fake up a hostent as if we'd actually
                                 * done a lookup.
                                 */
-                               if (inet_pton(af, name, host_addr,
-                                              sizeof host_addr) <= 0) {
+                               if (inet_pton(af, name, host_addr) <= 0) {
                                        h_errno = HOST_NOT_FOUND;
                                        return (NULL);
                                }
@@ -487,7 +492,7 @@ gethostbyname2(name, af)
                                host.h_name = hostbuf;
                                host.h_aliases = host_aliases;
                                host_aliases[0] = NULL;
-                               h_addr_ptrs[0] = (char *)&host_addr;
+                               h_addr_ptrs[0] = (char *)host_addr;
                                h_addr_ptrs[1] = NULL;
                                host.h_addr_list = h_addr_ptrs;
                                if (_res.options & RES_USE_INET6)
@@ -617,9 +622,9 @@ gethostbyaddr(addr, len, af)
                        case AF_INET6:
                                qp = qbuf;
                                for (n = IN6ADDRSZ - 1; n >= 0; n--) {
-                                       qp += sprintf(qp, "%x.%x.",
-                                                     uaddr[n] & 0xf,
-                                                     (uaddr[n] >> 4) & 0xf);
+                                       qp += SPRINTF((qp, "%x.%x.",
+                                                      uaddr[n] & 0xf,
+                                                      (uaddr[n] >> 4) & 0xf));
                                }
                                strcpy(qp, "ip6.int");
                                break;
@@ -770,12 +775,12 @@ _gethtent()
                goto again;
        *cp++ = '\0';
        if ((_res.options & RES_USE_INET6) &&
-           inet_pton(AF_INET6, p, host_addr, sizeof host_addr) > 0) {
+           inet_pton(AF_INET6, p, host_addr) > 0) {
                af = AF_INET6;
                len = IN6ADDRSZ;
-       } else if (inet_pton(AF_INET, p, host_addr, sizeof host_addr) > 0) {
+       } else if (inet_pton(AF_INET, p, host_addr) > 0) {
                if (_res.options & RES_USE_INET6) {
-                       map_v4v6_address((char*)&host_addr, (char*)&host_addr);
+                       map_v4v6_address((char*)host_addr, (char*)host_addr);
                        af = AF_INET6;
                        len = IN6ADDRSZ;
                } else {
@@ -785,7 +790,7 @@ _gethtent()
        } else {
                goto again;
        }
-       h_addr_ptrs[0] = (char *)&host_addr;
+       h_addr_ptrs[0] = (char *)host_addr;
        h_addr_ptrs[1] = NULL;
        host.h_addr_list = h_addr_ptrs;
        host.h_length = len;
@@ -859,7 +864,7 @@ struct hostent *
 _gethtbyname(name)
        const char *name;
 {
-       extern struct hostent *_gethtbyname2 __P((const char *, int));
+       extern struct hostent *_gethtbyname2();
        struct hostent *hp;
 
        if (_res.options & RES_USE_INET6) {
index 71db06d845ebba92741a719e7537b2cb6ab60dd1..3b5795f3499d02c284c76bbe1aef9991d4016133 100644 (file)
@@ -29,6 +29,12 @@ static char rcsid[] = "$Id$";
 #include <stdio.h>
 #include "../conf/portability.h"
 
+#ifdef SPRINTF_CHAR
+# define SPRINTF(x) strlen(sprintf/**/x)
+#else
+# define SPRINTF(x) sprintf x
+#endif
+
 /*
  * WARNING: Don't even consider trying to compile this on a system where
  * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
@@ -84,7 +90,7 @@ inet_ntop4(src, dst, size)
        static const char fmt[] = "%u.%u.%u.%u";
        char tmp[sizeof "255.255.255.255"];
 
-       if (sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) > size) {
+       if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) {
                errno = ENOSPC;
                return (NULL);
        }
@@ -170,7 +176,7 @@ inet_ntop6(src, dst, size)
                        tp += strlen(tp);
                        break;
                }
-               tp += sprintf(tp, "%x", words[i]);
+               tp += SPRINTF((tp, "%x", words[i]));
        }
        /* Was it a trailing run of 0x00's? */
        if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
index 385dc25337a7ee69e110b4e1618336be6fc52daa..cfc069d891c18be099f034ac201d66ce3ca25f8f 100644 (file)
@@ -37,7 +37,7 @@ static int    inet_pton4 __P((const char *src, u_char *dst));
 static int     inet_pton6 __P((const char *src, u_char *dst));
 
 /* int
- * inet_pton(af, src, dst, size)
+ * inet_pton(af, src, dst)
  *     convert from presentation format (which usually means ASCII printable)
  *     to network format (which is usually some kind of binary format).
  * return:
@@ -48,24 +48,15 @@ static int  inet_pton6 __P((const char *src, u_char *dst));
  *     Paul Vixie, 1996.
  */
 int
-inet_pton(af, src, dst, size)
+inet_pton(af, src, dst)
        int af;
        const char *src;
        void *dst;
-       size_t size;
 {
        switch (af) {
        case AF_INET:
-               if (size < INADDRSZ) {
-                       errno = ENOSPC;
-                       return (-1);
-               }
                return (inet_pton4(src, dst));
        case AF_INET6:
-               if (size < IN6ADDRSZ) {
-                       errno = ENOSPC;
-                       return (-1);
-               }
                return (inet_pton6(src, dst));
        default:
                errno = EINVAL;
@@ -207,12 +198,12 @@ inet_pton6(src, dst)
                 * Since some memmove()'s erroneously fail to handle
                 * overlapping regions, we'll do the shift by hand.
                 */
-               const howmany = tp - colonp;
+               const int n = tp - colonp;
                int i;
 
-               for (i = 1; i <= howmany; i++) {
-                       endp[- i] = colonp[howmany - i];
-                       colonp[howmany - i] = 0;
+               for (i = 1; i <= n; i++) {
+                       endp[- i] = colonp[n - i];
+                       colonp[n - i] = 0;
                }
                tp = endp;
        }
index 0f5d5b855b7782268deb165830d2c6d511ce4dff..f4320ff1b38778d4d5212e2fb3a38290244a27bc 100644 (file)
@@ -245,9 +245,6 @@ int  res_nameinquery __P((const char *, int, int,
                              const u_char *, const u_char *));
 int     res_queriesmatch __P((const u_char *, const u_char *,
                               const u_char *, const u_char *));
-/* XXX - these last two don't belong in the resolver */
-u_int   inet_nsap_addr __P((const char *, u_char *, int maxlen));
-char   *inet_nsap_ntoa __P((int, const u_char *, char *ascii));
 __END_DECLS
 
 #endif /* !_RESOLV_H_ */
index 47a5d6e83d7fdd98e60b31e395236144031e46db..62e96da9525d4112c497941fc11db8d347b621c4 100644 (file)
@@ -299,6 +299,26 @@ typedef unsigned int UHWtype;
 #define impn_sqr_n_basecase    __MPN(impn_sqr_n_basecase)
 #define impn_sqr_n             __MPN(impn_sqr_n)
 
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+/* Prototypes for internal mpn calls.  */
+extern void impn_mul_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+                                        mp_srcptr vp, mp_size_t size));
+extern void impn_mul_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_srcptr vp,
+                               mp_size_t size, mp_ptr tspace));
+extern void impn_sqr_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+                                        mp_size_t size));
+extern void impn_sqr_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_size_t size,
+                               mp_ptr tspace));
+
+
+
 #ifndef IEEE_DOUBLE_BIG_ENDIAN
 #define IEEE_DOUBLE_BIG_ENDIAN 1
 #endif
index 9947d8f45a92343b796612ed5a1978b1909ab22c..16709dfc09bfae70d6089445b8f9f95c66c4f20e 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, $31, $17       /* Pass a second argument of zero.  */
-       jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp.  */
+ENTRY(setjmp)
+       lda     $27, __sigsetjmp        /* Load address to jump to.  */
+       bis     $31, $31, $17           /* Pass a second argument of zero.  */
+       jmp     $31, ($27), __sigsetjmp /* Call __sigsetjmp.  */
        .end setjmp
index 3189ff0fdff701a262551e0df2fdd325606510e0..0cd8f1d238a6232d98e7f30babfa68bd374fd850 100644 (file)
@@ -49,4 +49,3 @@ struct utmp {
 __END_DECLS
 
 #endif /* utmpbits.h */
-
index 9e12a0daa2491adbd8dd98c2a0c2c5dcb0296fd2..beb8441b46301d6516874f8424366cef102c7a56 100644 (file)
@@ -1,5 +1,5 @@
 ifeq ($(subdir), misc)
-headers += alpha/regdef.h
+headers += alpha/ptrace.h alpha/regdef.h
 
 sysdep_routines := $(sysdep_routines) \
   ieee_get_fp_control ieee_set_fp_control fpu_control setfpucw \
index 29cba8d3122eaaada53c09d35725e136080bbd2e..00c02de72bd6925bddb3f5c5d976ad1e82a2bb6b 100644 (file)
@@ -17,12 +17,13 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 /* sigsuspend is a special syscall since it needs to dereference the
-sigset.  */
+   sigset.  */
 
 #include <sysdep.h>
 
        .text
-ENTRY(sigsuspend)
+
+LEAF(sigsuspend, 0)
        .prologue 0
 
        ldq     a0, 0(a0)
@@ -33,7 +34,6 @@ ENTRY(sigsuspend)
 
 error: br      gp, 1f
 1:     ldgp    gp, 0(gp)
-       lda     pv, syscall_error
-       jmp     zero, (pv)
+       jmp     zero, syscall_error
 
        .end sigsuspend
index d1966a82ba4f306e5dd9d19dd4f762ca5f92c173..a7099f68400972419a8edcd12dee1dc7452504da 100644 (file)
@@ -18,11 +18,16 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.comm errno, 4
+       .comm errno, 4
+#ifdef __ELF__
+       .type errno, @object
+#endif
 
        .text
-ENTRY(__start)
+LEAF(__start, 16)
        lda     sp, -16(sp)
+       .prologue 0
+
        stq     zero, 8(sp)             /* terminate frame chain */
 
        br      t0, 1f
@@ -33,8 +38,7 @@ ENTRY(__start)
        ldgp    gp, 0(ra)
 
        /* clear out errno. */
-       lda     t0, errno
-       stl     zero, 0(t0)
+       stl     zero, (errno)
 
        ldl     a0, 16(sp)      /* get argc */
        lda     a1, 24(sp)      /* get argv */
@@ -45,26 +49,32 @@ ENTRY(__start)
        addq    a2, 0x8, a2
        stq     a2, 0(t0)
 
-#ifndef HAVE_INITFINI
        mov     a0, s0
        mov     a1, s1
        mov     a2, s2
 
-       jsr     ra, __libc_init
+#ifdef HAVE_INITFINI
+       /* register the _fini sections to ensure destructors get run: */
+       lda     a0, _fini
+       jsr     ra, atexit
        ldgp    gp, 0(ra)
 
-       mov     s0, a0
-       mov     s1, a1
-       mov     s2, a2
+       /* Now run the _init section of the program itself.  The _init
+          sections of shared libraries will be run by the dynamic linker.  */
+       jsr     ra, _init
+       ldgp    gp, 0(ra)
 
        /* initialize constructors: */
        jsr     ra, __main
        ldgp    gp, 0(ra)
+#else
+       jsr     ra, __libc_init
+       ldgp    gp, 0(ra)
+#endif
 
        mov     s0, a0
        mov     s1, a1
        mov     s2, a2
-#endif
 
        jsr     ra, main
        ldgp    gp, 0(ra)
@@ -90,4 +100,9 @@ ENTRY(__start)
 __data_start:
        .long 0
 
+#ifdef __ELF__
+       .size __data_start, 4
+       .type __data_start, @object
+#endif
+
 weak_alias(__data_start, data_start)
index 84811deba69f9e0621e51f8e5048d6c798fb1f11..d229f766f963e4fcd9bcc030723ec0b6c4e97fbf 100644 (file)
@@ -1,5 +1,5 @@
 /* `struct termios' speed frobnication functions.  Linux version.
-Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
+Copyright (C) 1991, 1992, 1993, 1995, 1996 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
@@ -43,6 +43,7 @@ static const speed_t speeds[] =
     57600,
     115200,
     230400,
+    460800,
   };
 
 
@@ -68,7 +69,7 @@ strong_alias (cfgetospeed, cfgetispeed);
 
 /* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
 int
-cfsetospeed  (termios_p, speed) 
+cfsetospeed  (termios_p, speed)
      struct termios *termios_p;
      speed_t speed;
 {