about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--sysdeps/ia64/dl-machine.h8
-rw-r--r--sysdeps/ia64/elf/start.S6
-rw-r--r--sysdeps/unix/sysv/linux/ia64/fork.S1
4 files changed, 22 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index ea58c7cc55..953fbb8db8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2003-03-27  David Mosberger  <davidm@hpl.hp.com>
+
+	* sysdeps/ia64/dl-machine.h (RTLD_START): Wrap ".save rp, r0"
+	directive into empty .prologue region to ensure that call-chain
+	is terminated even for the first instruction.
+
+	* sysdeps/ia64/elf/start.S (_start): Use ".save rp, r0" idiom
+	to terminate call-chain right from the get-go.
+
+	* sysdeps/unix/sysv/linux/ia64/fork.S (fork): Remove unnecessary
+	stop bit between compare & branch.
+
 2003-03-29  Ulrich Drepper  <drepper@redhat.com>
 
 	* stdlib/strtod.c (INTERNAL): Recognize first digit after decimal
@@ -9,7 +21,6 @@
 2003-03-29  Alexandre Oliva  <aoliva@redhat.com>
 
 	* configure.in: Add mips64* support.
-	* configure: Rebuilt.
 	* sysdeps/mips/bits/endian.h: Make it bi-endian.
 	* sysdeps/mips/mipsel/bits/endian.h: Removed.
 	* sysdeps/mips/mips64/n32/el/bits/endian.h: Removed.
diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h
index be09ae81e6..d3cc0ca210 100644
--- a/sysdeps/ia64/dl-machine.h
+++ b/sysdeps/ia64/dl-machine.h
@@ -301,8 +301,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 "_start:\n"								      \
 "0:	{ .mii\n"							      \
 "	  .prologue\n"							      \
-"	  .save ar.pfs, r32\n"						      \
 "	  .save rp, r0\n"						      \
+"	  .body\n"							      \
+"	  .prologue\n"							      \
+"	  .save ar.pfs, r32\n"						      \
 "	  alloc loc0 = ar.pfs, 0, 3, 4, 0\n"				      \
 "	  .body\n"							      \
 "	  mov r2 = ip\n"						      \
@@ -332,8 +334,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 "	.proc _dl_start_user#\n"					      \
 "_dl_start_user:\n"							      \
 "	 .prologue\n"							      \
-"	 .save ar.pfs, r32\n"						      \
 "	 .save rp, r0\n"						      \
+"	  .body\n"							      \
+"	 .prologue\n"							      \
+"	 .save ar.pfs, r32\n"						      \
 "	 .body\n"							      \
 "	{ .mii\n"							      \
 "	  /* Save the pointer to the user entry point fptr in loc2.  */\n"    \
diff --git a/sysdeps/ia64/elf/start.S b/sysdeps/ia64/elf/start.S
index a05ddfbb52..18eaf8eae4 100644
--- a/sysdeps/ia64/elf/start.S
+++ b/sysdeps/ia64/elf/start.S
@@ -40,6 +40,9 @@
 	.type _start,@function
 _start:
 	.prologue
+	.save rp, r0
+	.body
+	.prologue
 	{ .mlx
 	  alloc r2 = ar.pfs,0,0,7,0
 	  movl r3 = FPSR_DEFAULT
@@ -76,8 +79,7 @@ _start:
 	{ .mmi
 	  ld8 out3 = [out3]	/* pointer to `init' function descriptor */
 	  ld8 out4 = [out4]	/* pointer to `fini' function descriptor */
-	  .save rp, r4
-	  mov r4 = r0		/* terminate unwind chain with a NULL return-pointer */
+	  nop 0
 	}
 	.body
 	{ .mib
diff --git a/sysdeps/unix/sysv/linux/ia64/fork.S b/sysdeps/unix/sysv/linux/ia64/fork.S
index f74e709b3c..0a57ab0d13 100644
--- a/sysdeps/unix/sysv/linux/ia64/fork.S
+++ b/sysdeps/unix/sysv/linux/ia64/fork.S
@@ -32,7 +32,6 @@ ENTRY(__libc_fork)
 	;;
 	DO_CALL (SYS_ify (clone))
 	cmp.eq p6,p0=-1,r10
-	;;
 (p6)	br.cond.spnt.few __syscall_error
 	ret
 PSEUDO_END(__libc_fork)