11.14Smatt/* $NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $ */ 21.1Sthorpej 31.1Sthorpej#include "SYS.h" 41.1Sthorpej 51.11Smatt#if defined(LIBC_SCCS) && !defined(lint) 61.14Smatt__RCSID("$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $") 71.11Smatt#endif /* LIBC_SCCS && !lint */ 81.11Smatt 91.14Smatt .hidden _C_LABEL(__curbrk) 101.5Skleink .globl _C_LABEL(__curbrk) 111.14Smatt .hidden _C_LABEL(__minbrk) 121.5Skleink .globl _C_LABEL(__minbrk) 131.6Skleink .globl _C_LABEL(_end) 141.4Stsubai 151.8Skleink#ifdef WEAK_ALIAS 161.8SkleinkWEAK_ALIAS(brk, _brk) 171.8Skleink#endif 181.8Skleink 191.4Stsubai .data 201.14Smatt .p2align 2 211.5Skleink_C_LABEL(__minbrk): 221.14Smatt .long _C_LABEL(_end) 231.14Smatt_C_LABEL(__curbrk): 241.14Smatt .long _C_LABEL(_end) 251.1Sthorpej 261.8SkleinkENTRY(_brk) 271.13Sjoerg#ifdef __PIC__ 281.14Smatt mflr %r0 291.14Smatt bcl 20,31,.LPIC0 301.14Smatt.LPIC0: mflr %r9 311.14Smatt mtlr %r0 321.14Smatt addis %r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha 331.14Smatt ldptru %r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9) # r5 = &_end 341.1Sthorpej#else 351.14Smatt lis %r9,_C_LABEL(__minbrk)@ha 361.14Smatt ldptru %r5,_C_LABEL(__minbrk)@l(%r9) # r5 = &_end 371.4Stsubai#endif 381.14Smatt cmpptrl %r5,%r3 # if (__minbrk <= r3) 391.14Smatt#ifdef __PPC_ISEL__ 401.14Smatt iselgt %r3,%r5,%r3 411.14Smatt#else 421.1Sthorpej bgt 0f 431.10Smatt mr %r5,%r3 # r5 = r3 441.1Sthorpej0: 451.10Smatt mr %r3,%r5 # new break value 461.14Smatt#endif 471.14Smatt _DOSYSCALL(break) # assume that r5 is preserved 481.1Sthorpej bso 1f 491.14Smatt stptr %r5,__SIZEOF_POINTER__(%r9) 501.1Sthorpej blr # return 0 511.1Sthorpej 521.1Sthorpej1: 531.14Smatt BRANCH_TO_CERROR() 541.11SmattEND(_brk) 55