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