summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--linuxthreads/ChangeLog4
-rw-r--r--sysdeps/mips/elf/start.S10
3 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ad63a3dca..9440cba153 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2000-05-24  Andreas Jaeger  <aj@suse.de>
 
+	* sysdeps/mips/elf/start.S (ENTRY_POINT): Align stack for double
+	words.
+
 	* intl/Makefile: Run gettext-test only if msgfmt is available.
 
 	* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_LDT_WORKS):
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index d20d68a8e0..bde417e2de 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,7 @@
+2000-05-24  Andreas Jaeger  <aj@suse.de>
+
+	* sysdeps/i386/i686/pt-machine.h: Only use LDT on newer kernels.
+
 2000-05-21  Jakub Jelinek  <jakub@redhat.com>
 
 	* manager.c (pthread_handle_create): Initialize p_res._sock to -1.
diff --git a/sysdeps/mips/elf/start.S b/sysdeps/mips/elf/start.S
index 7fee4e71c3..064fe7e6f4 100644
--- a/sysdeps/mips/elf/start.S
+++ b/sysdeps/mips/elf/start.S
@@ -27,7 +27,7 @@
    segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
    point runs, most registers' values are unspecified, except for:
 
-   v1 ($2)	Contains a function pointer to be registered with `atexit'.
+   v0 ($2)	Contains a function pointer to be registered with `atexit'.
 		This is how the dynamic linker arranges to have DT_FINI
 		functions called for shared libraries that have been loaded
 		before this code runs.
@@ -76,7 +76,9 @@ ENTRY_POINT:
 	dla $4, main		/* main */
 	lw $5, 0($29)		/* argc */
 	addu $6, $29, 4		/* argv  */
-	/* Allocate space on the stack for seven arguments but align to 32.  */
+	/* Allocate space on the stack for seven arguments and make sure
+	   the stack is aligned to double words (8 bytes).  */
+	and $29, 0xfffffff8
 	subu $29, 32
 	dla $7, _init		/* init */
 	dla $8, _fini
@@ -84,7 +86,9 @@ ENTRY_POINT:
 	la $4, main		/* main */
 	lw $5, 0($29)		/* argc */
 	addu $6, $29, 4		/* argv  */
-	/* Allocate space on the stack for seven arguments but align to 32.  */
+	/* Allocate space on the stack for seven arguments and make sure
+	   the stack is aligned to double words (8 bytes).  */
+	and $29, 0xfffffff8
 	subu $29, 32
 	la $7, _init		/* init */
 	la $8, _fini