diff options
-rw-r--r-- | ChangeLog.alpha | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/brk.S | 32 |
2 files changed, 20 insertions, 14 deletions
diff --git a/ChangeLog.alpha b/ChangeLog.alpha index 3366261d1c..72e102ac8a 100644 --- a/ChangeLog.alpha +++ b/ChangeLog.alpha @@ -1,5 +1,7 @@ 2012-05-30 Richard Henderson <rth@twiddle.net> + * sysdeps/unix/sysv/linux/alpha/brk.S: Fix error path for PIC. + * sysdeps/alpha/fpu/libm-test-ulps: Regenerate. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S index 826d7374f9..cb759dbe9f 100644 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ b/sysdeps/unix/sysv/linux/alpha/brk.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Brendan Kehoe <brendan@zen.org>, 1993. @@ -36,16 +36,22 @@ __curbrk: .skip 8 #endif .text -LEAF(__brk, 8) + .align 4 + .globl __brk + .ent __brk + .usepv __brk, std + + cfi_startproc +__brk: ldgp gp, 0(t12) - subq sp, 8, sp + subq sp, 16, sp + cfi_adjust_cfa_offset (16) #ifdef PROF .set noat lda AT, _mcount jsr AT, (AT), _mcount .set at #endif - .prologue 1 /* Save the requested brk across the system call. */ stq a0, 0(sp) @@ -54,27 +60,25 @@ LEAF(__brk, 8) call_pal PAL_callsys ldq a0, 0(sp) + addq sp, 16, sp + cfi_adjust_cfa_offset (-16) /* Be prepared for an OSF-style brk. */ - bne a3, $err1 + bne a3, SYSCALL_ERROR_LABEL beq v0, $ok /* Correctly handle the brk(0) query case. */ cmoveq a0, v0, a0 xor a0, v0, t0 - bne t0, $err0 + lda v0, ENOMEM + bne t0, SYSCALL_ERROR_LABEL /* Update __curbrk and return cleanly. */ - mov zero, v0 + lda v0, 0 $ok: stq a0, __curbrk - addq sp, 8, sp ret - /* What a horrible way to die. */ -$err0: ldi v0, ENOMEM -$err1: addq sp, 8, sp - SYSCALL_ERROR_HANDLER - - END(__brk) +PSEUDO_END(__brk) + cfi_endproc weak_alias (__brk, brk) |