aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2012-05-30 20:53:54 -0700
committerRichard Henderson <rth@twiddle.net>2012-05-31 07:43:43 -0700
commit13488b2eaec9f589e488765687e131ec7c321c8f (patch)
tree558ce42b43ef35601bee652e9e901a04917ba0a0
parent3c9d6deca50d600669dfe45127602d1ad44f723f (diff)
downloadglibc-13488b2eaec9f589e488765687e131ec7c321c8f.tar
glibc-13488b2eaec9f589e488765687e131ec7c321c8f.tar.gz
glibc-13488b2eaec9f589e488765687e131ec7c321c8f.tar.bz2
glibc-13488b2eaec9f589e488765687e131ec7c321c8f.zip
alpha: Fix error path for PIC __brk
-rw-r--r--ChangeLog.alpha2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S32
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)