aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--nptl/ChangeLog2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/timer_getoverr.c2
-rw-r--r--sysdeps/unix/sysv/linux/ia64/getcontext.S9
-rw-r--r--sysdeps/unix/sysv/linux/ia64/setjmp.S16
5 files changed, 25 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index bf4807ded4..553371a080 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2003-03-27 David Mosberger <davidm@hpl.hp.com>
+
+ * sysdeps/unix/sysv/linux/ia64/getcontext.S: Restore caller's
+ ar.unat before returning. Add missing .mem.offset directives
+ to ensure file gets assembled without warnings.
+ * sysdeps/unix/sysv/linux/ia64/setjmp.S: Likewise.
+
2003-03-27 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/sysconf.c (__sysconf) <_SC_MONOTONIC_CLOCK>:
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 5571d42bf7..fb404d938f 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -6,6 +6,8 @@
* sysdeps/unix/sysv/linux/timer_settime.c [!__ASSUME_POSIX_TIMERS]
(timer_settime): Fix typo.
+ * sysdeps/unix/sysv/linux/timer_getoverr.c
+ [!__ASSUME_POSIX_TIMERS] (timer_getoverrun): Likewise.
2003-03-27 Jakub Jelinek <jakub@redhat.com>
diff --git a/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c b/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c
index 247f4a367f..32fbfbd01f 100644
--- a/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c
+++ b/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c
@@ -42,7 +42,7 @@ timer_getoverrun (timerid)
{
# undef timer_getoverrun
# ifndef __ASSUME_POSIX_TIMERS
- if (__no_posix_timers == 0)
+ if (__no_posix_timers >= 0)
# endif
{
struct timer *kt = (struct timer *) timerid;
diff --git a/sysdeps/unix/sysv/linux/ia64/getcontext.S b/sysdeps/unix/sysv/linux/ia64/getcontext.S
index e396480a40..f58e84f1ae 100644
--- a/sysdeps/unix/sysv/linux/ia64/getcontext.S
+++ b/sysdeps/unix/sysv/linux/ia64/getcontext.S
@@ -34,6 +34,7 @@
other than the PRESERVED state. */
ENTRY(__getcontext)
+ .prologue
alloc r16 = ar.pfs, 1, 0, 3, 0
// sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask):
@@ -53,7 +54,9 @@ ENTRY(__getcontext)
add r2 = SC_GR+1*8, r32
;;
mov.m rBSP = ar.bsp
+ .save ar.unat, rUNAT
mov.m rUNAT = ar.unat
+ .body
add r3 = SC_GR+4*8, r32
;;
@@ -65,8 +68,8 @@ ENTRY(__getcontext)
.mem.offset 8,0; st8.spill [r3] = r6, 48
and rTMP = ~0x3, rRSC
;;
- st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8))
- st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8))
+.mem.offset 0,0; st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8))
+.mem.offset 8,0; st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8))
;;
mov.m ar.rsc = rTMP // put RSE into enforced lazy mode
mov.m rNAT = ar.unat
@@ -119,8 +122,8 @@ ENTRY(__getcontext)
stf.spill [r3] = f31, 32
mov rB1 = b1
;;
+ mov ar.unat = rUNAT // we're done spilling integer regs; restore caller's UNaT
add r2 = SC_NAT, r32
- nop 0
add r3 = SC_BSP, r32
;;
st8 [r2] = rNAT, (SC_RNAT-SC_NAT)
diff --git a/sysdeps/unix/sysv/linux/ia64/setjmp.S b/sysdeps/unix/sysv/linux/ia64/setjmp.S
index 954d805f6c..dc143a3100 100644
--- a/sysdeps/unix/sysv/linux/ia64/setjmp.S
+++ b/sysdeps/unix/sysv/linux/ia64/setjmp.S
@@ -87,21 +87,22 @@ libc_hidden_def (_setjmp)
ENTRY(__sigsetjmp)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
alloc loc1=ar.pfs,2,2,2,0
+ .save ar.unat, r16
mov r16=ar.unat
;;
mov r17=ar.fpsr
mov r2=in0
add r3=8,in0
;;
- st8.spill.nta [r2]=sp,16 // r12 (sp)
- st8.spill.nta [r3]=gp,16 // r1 (gp)
+.mem.offset 8,0; st8.spill.nta [r2]=sp,16 // r12 (sp)
+.mem.offset 0,0; st8.spill.nta [r3]=gp,16 // r1 (gp)
;;
st8.nta [r2]=r16,16 // save caller's unat
st8.nta [r3]=r17,16 // save fpsr
add r8=0xa0,in0
;;
- st8.spill.nta [r2]=r4,16 // r4
- st8.spill.nta [r3]=r5,16 // r5
+.mem.offset 8,0; st8.spill.nta [r2]=r4,16 // r4
+.mem.offset 0,0; st8.spill.nta [r3]=r5,16 // r5
add r9=0xb0,in0
;;
stf.spill.nta [r8]=f2,32
@@ -143,8 +144,8 @@ ENTRY(__sigsetjmp)
stf.spill.nta [r8]=f30
stf.spill.nta [r9]=f31
- st8.spill.nta [r2]=r6,16 // r6
- st8.spill.nta [r3]=r7,16 // r7
+.mem.offset 8,0; st8.spill.nta [r2]=r6,16 // r6
+.mem.offset 0,0; st8.spill.nta [r3]=r7,16 // r7
;;
mov r23=ar.bsp
mov r25=ar.unat
@@ -170,9 +171,10 @@ ENTRY(__sigsetjmp)
st8.nta [r3]=in0 // &__jmp_buf
br.call.dpnt.few rp=__sigjmp_save
.ret0: // force a new bundle ::q
- mov r8=0
+ mov.m ar.unat=r16 // restore caller's unat
mov rp=loc0
mov ar.pfs=loc1
+ mov r8=0
ret
END(__sigsetjmp)