about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/start.S35
-rw-r--r--sysdeps/unix/sysv/linux/speed.c5
4 files changed, 33 insertions, 17 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile
index 9e12a0daa2..beb8441b46 100644
--- a/sysdeps/unix/sysv/linux/alpha/Makefile
+++ b/sysdeps/unix/sysv/linux/alpha/Makefile
@@ -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 \
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index 29cba8d312..00c02de72b 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -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
diff --git a/sysdeps/unix/sysv/linux/alpha/start.S b/sysdeps/unix/sysv/linux/alpha/start.S
index d1966a82ba..a7099f6840 100644
--- a/sysdeps/unix/sysv/linux/alpha/start.S
+++ b/sysdeps/unix/sysv/linux/alpha/start.S
@@ -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)
diff --git a/sysdeps/unix/sysv/linux/speed.c b/sysdeps/unix/sysv/linux/speed.c
index 84811deba6..d229f766f9 100644
--- a/sysdeps/unix/sysv/linux/speed.c
+++ b/sysdeps/unix/sysv/linux/speed.c
@@ -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;
 {