1*38dcdc34Smatt/* $NetBSD: brk.S,v 1.14 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: brk.S,v 1.14 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) 11*38dcdc34Smatt .hidden _C_LABEL(__minbrk) 126348b7d5Skleink .globl _C_LABEL(__minbrk) 135af7e7a9Skleink .globl _C_LABEL(_end) 14106908bdStsubai 1503f996bdSkleink#ifdef WEAK_ALIAS 1603f996bdSkleinkWEAK_ALIAS(brk, _brk) 1703f996bdSkleink#endif 1803f996bdSkleink 19106908bdStsubai .data 20*38dcdc34Smatt .p2align 2 216348b7d5Skleink_C_LABEL(__minbrk): 22*38dcdc34Smatt .long _C_LABEL(_end) 23*38dcdc34Smatt_C_LABEL(__curbrk): 24*38dcdc34Smatt .long _C_LABEL(_end) 255ef4bdf6Sthorpej 2603f996bdSkleinkENTRY(_brk) 274d12bfcdSjoerg#ifdef __PIC__ 28*38dcdc34Smatt mflr %r0 29*38dcdc34Smatt bcl 20,31,.LPIC0 30*38dcdc34Smatt.LPIC0: mflr %r9 31*38dcdc34Smatt mtlr %r0 32*38dcdc34Smatt addis %r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha 33*38dcdc34Smatt ldptru %r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9) # r5 = &_end 34106908bdStsubai#else 35*38dcdc34Smatt lis %r9,_C_LABEL(__minbrk)@ha 36*38dcdc34Smatt ldptru %r5,_C_LABEL(__minbrk)@l(%r9) # r5 = &_end 37106908bdStsubai#endif 38*38dcdc34Smatt cmpptrl %r5,%r3 # if (__minbrk <= r3) 39*38dcdc34Smatt#ifdef __PPC_ISEL__ 40*38dcdc34Smatt iselgt %r3,%r5,%r3 41*38dcdc34Smatt#else 425ef4bdf6Sthorpej bgt 0f 431cddd41eSmatt mr %r5,%r3 # r5 = r3 445ef4bdf6Sthorpej0: 451cddd41eSmatt mr %r3,%r5 # new break value 46106908bdStsubai#endif 47*38dcdc34Smatt _DOSYSCALL(break) # assume that r5 is preserved 48*38dcdc34Smatt bso 1f 49*38dcdc34Smatt stptr %r5,__SIZEOF_POINTER__(%r9) 505ef4bdf6Sthorpej blr # return 0 515ef4bdf6Sthorpej 525ef4bdf6Sthorpej1: 53*38dcdc34Smatt BRANCH_TO_CERROR() 54cf88c389SmattEND(_brk) 55