1*38dcdc34Smatt/* $NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $ */ 25ef4bdf6Sthorpej 35ef4bdf6Sthorpej#include "SYS.h" 45ef4bdf6Sthorpej 5cf88c389Smatt#if defined(LIBC_SCCS) && !defined(lint) 6*38dcdc34Smatt__RCSID("$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $") 7cf88c389Smatt#endif /* LIBC_SCCS && !lint */ 8cf88c389Smatt 9*38dcdc34Smatt .hidden _C_LABEL(__curbrk) 106348b7d5Skleink .globl _C_LABEL(__curbrk) 115ef4bdf6Sthorpej 1203f996bdSkleink#ifdef WEAK_ALIAS 1303f996bdSkleinkWEAK_ALIAS(sbrk, _sbrk) 1403f996bdSkleink#endif 1503f996bdSkleink 1603f996bdSkleinkENTRY(_sbrk) 174d12bfcdSjoerg#ifdef __PIC__ 18*38dcdc34Smatt mflr %r0 19*38dcdc34Smatt bcl 20,31,.LPIC0 20*38dcdc34Smatt.LPIC0: mflr %r5 21*38dcdc34Smatt mtlr %r0 22*38dcdc34Smatt addis %r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha 23*38dcdc34Smatt ldptru %r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8) 245ef4bdf6Sthorpej#else 25*38dcdc34Smatt lis %r8,_C_LABEL(__curbrk)@ha 26*38dcdc34Smatt ldptru %r6,_C_LABEL(__curbrk)@l(%r8) # r6 = old break, r5 = &curbrk 27106908bdStsubai#endif 281cddd41eSmatt add %r3,%r3,%r6 291cddd41eSmatt mr %r7,%r3 # r7 = new break 30cf88c389Smatt _DOSYSCALL(break) # break(new_break) 315ef4bdf6Sthorpej bso 1f 321cddd41eSmatt mr %r3,%r6 # set return value 33*38dcdc34Smatt stptr %r7,0(%r8) # record new break 345ef4bdf6Sthorpej blr 355ef4bdf6Sthorpej1: 36*38dcdc34Smatt BRANCH_TO_CERROR() 37cf88c389SmattEND(_sbrk) 38