diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | sysdeps/ia64/dl-machine.h | 8 | ||||
-rw-r--r-- | sysdeps/ia64/elf/start.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/fork.S | 1 |
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) |