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 13WEAK_ALIAS(sbrk, _sbrk) 14#endif 15 16ENTRY(_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 351: 36 BRANCH_TO_CERROR() 37END(_sbrk) 38