1 /* $NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $ */ 2 3 #include "SYS.h" 4 5 #if defined(LIBC_SCCS) && !defined(lint) 6 __RCSID("$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt 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