sbrk.S revision 1.12.4.1 1 /* $NetBSD: sbrk.S,v 1.12.4.1 2015/02/04 22:00:24 martin Exp $ */
2
3 #include "SYS.h"
4
5 #if defined(LIBC_SCCS) && !defined(lint)
6 __RCSID("$NetBSD: sbrk.S,v 1.12.4.1 2015/02/04 22:00:24 martin Exp $")
7 #endif /* LIBC_SCCS && !lint */
8
9 .hidden _C_LABEL(__curbrk)
10 .globl _C_LABEL(__curbrk)
11
12 #ifdef WEAK_ALIAS
13 WEAK_ALIAS(sbrk, _sbrk)
14 #endif
15
16 ENTRY(_sbrk)
17 #ifdef __PIC__
18 mflr %r0
19 bcl 20,31,.LPIC0
20 .LPIC0: mflr %r5
21 mtlr %r0
22 addis %r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha
23 ldptru %r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8)
24 #else
25 lis %r8,_C_LABEL(__curbrk)@ha
26 ldptru %r6,_C_LABEL(__curbrk)@l(%r8) # r6 = old break, r5 = &curbrk
27 #endif
28 add %r3,%r3,%r6
29 mr %r7,%r3 # r7 = new break
30 _DOSYSCALL(break) # break(new_break)
31 bso 1f
32 mr %r3,%r6 # set return value
33 stptr %r7,0(%r8) # record new break
34 blr
35 1:
36 BRANCH_TO_CERROR()
37 END(_sbrk)
38