brk.S revision 1.11
11.11Smatt/* $NetBSD: brk.S,v 1.11 2011/01/15 07:31:12 matt Exp $ */ 21.1Sthorpej 31.1Sthorpej#include "SYS.h" 41.1Sthorpej 51.11Smatt#if defined(LIBC_SCCS) && !defined(lint) 61.11Smatt__RCSID("$NetBSD: brk.S,v 1.11 2011/01/15 07:31:12 matt Exp $") 71.11Smatt#endif /* LIBC_SCCS && !lint */ 81.11Smatt 91.5Skleink .globl _C_LABEL(__curbrk) 101.5Skleink .globl _C_LABEL(__minbrk) 111.6Skleink .globl _C_LABEL(_end) 121.4Stsubai 131.8Skleink#ifdef WEAK_ALIAS 141.8SkleinkWEAK_ALIAS(brk, _brk) 151.8Skleink#endif 161.8Skleink 171.4Stsubai .data 181.5Skleink_C_LABEL(__minbrk): 191.6Skleink .long _C_LABEL(_end) # XXX not used yet 201.1Sthorpej 211.1Sthorpej .text 221.1Sthorpej 231.8SkleinkENTRY(_brk) 241.1Sthorpej#ifdef PIC 251.10Smatt mflr %r10 261.4Stsubai bl _GLOBAL_OFFSET_TABLE_@local-4 271.10Smatt mflr %r9 281.10Smatt mtlr %r10 291.10Smatt lwz %r5,_C_LABEL(_end)@got(%r9) 301.1Sthorpej#else 311.10Smatt lis %r5,_C_LABEL(_end)@ha # r5 = &_end 321.10Smatt addi %r5,%r5,_C_LABEL(_end)@l 331.4Stsubai#endif 341.10Smatt cmplw %r5,%r3 # if (&_end <= r3) 351.1Sthorpej bgt 0f 361.10Smatt mr %r5,%r3 # r5 = r3 371.1Sthorpej0: 381.10Smatt mr %r3,%r5 # new break value 391.11Smatt _DOSYSCALL(break) # assume, that r5 is kept 401.1Sthorpej bso 1f 411.4Stsubai#ifdef PIC 421.10Smatt lwz %r6,_C_LABEL(__curbrk)@got(%r9) 431.10Smatt stw %r5,0(%r6) 441.4Stsubai#else 451.10Smatt lis %r6,_C_LABEL(__curbrk)@ha # record new break 461.10Smatt stw %r5,_C_LABEL(__curbrk)@l(%r6) 471.4Stsubai#endif 481.1Sthorpej blr # return 0 491.1Sthorpej 501.1Sthorpej1: 511.11Smatt b _C_LABEL(__cerror) 521.11SmattEND(_brk) 53