Don't presume that the kernel will preserve non-call-saved registers;

save and restore a0 across the system call.
This commit is contained in:
Ulrich Drepper 1997-05-07 15:30:58 +00:00
parent e7af313d34
commit c0fda13c38

View file

@ -37,8 +37,9 @@ __curbrk: .skip 8
#endif
.text
LEAF(__brk, 0)
LEAF(__brk, 8)
ldgp gp, 0(t12)
subq sp, 8, sp
#ifdef PROF
.set noat
lda AT, _mcount
@ -47,9 +48,14 @@ LEAF(__brk, 0)
#endif
.prologue 1
/* Save the requested brk across the system call. */
stq a0, 0(sp)
ldiq v0, __NR_brk
call_pal PAL_callsys
ldq a0, 0(sp)
/* Be prepared for an OSF-style brk. */
bne a3, $err1
beq v0, $ok
@ -62,11 +68,13 @@ LEAF(__brk, 0)
/* Update __curbrk and return cleanly. */
mov zero, v0
$ok: stq a0, __curbrk
addq sp, 8, sp
ret
/* What a horrible way to die. */
$err0: ldi v0, ENOMEM
$err1: jmp zero, __syscall_error
$err1: addq sp, 8, sp
jmp zero, __syscall_error
END(__brk)