brk.S revision 1.10
11.10Smatt/* $NetBSD: brk.S,v 1.10 2002/07/30 06:07:59 matt Exp $ */ 21.1Sthorpej 31.1Sthorpej#include "SYS.h" 41.1Sthorpej 51.5Skleink .globl _C_LABEL(__curbrk) 61.5Skleink .globl _C_LABEL(__minbrk) 71.6Skleink .globl _C_LABEL(_end) 81.4Stsubai 91.8Skleink#ifdef WEAK_ALIAS 101.8SkleinkWEAK_ALIAS(brk, _brk) 111.8Skleink#endif 121.8Skleink 131.4Stsubai .data 141.5Skleink_C_LABEL(__minbrk): 151.6Skleink .long _C_LABEL(_end) # XXX not used yet 161.1Sthorpej 171.1Sthorpej .text 181.1Sthorpej 191.8SkleinkENTRY(_brk) 201.1Sthorpej#ifdef PIC 211.10Smatt mflr %r10 221.4Stsubai bl _GLOBAL_OFFSET_TABLE_@local-4 231.10Smatt mflr %r9 241.10Smatt mtlr %r10 251.10Smatt lwz %r5,_C_LABEL(_end)@got(%r9) 261.1Sthorpej#else 271.10Smatt lis %r5,_C_LABEL(_end)@ha # r5 = &_end 281.10Smatt addi %r5,%r5,_C_LABEL(_end)@l 291.4Stsubai#endif 301.10Smatt cmplw %r5,%r3 # if (&_end <= r3) 311.1Sthorpej bgt 0f 321.10Smatt mr %r5,%r3 # r5 = r3 331.1Sthorpej0: 341.10Smatt mr %r3,%r5 # new break value 351.10Smatt li %r0,SYS_break 361.1Sthorpej sc # assume, that r5 is kept 371.1Sthorpej bso 1f 381.4Stsubai#ifdef PIC 391.10Smatt lwz %r6,_C_LABEL(__curbrk)@got(%r9) 401.10Smatt stw %r5,0(%r6) 411.4Stsubai#else 421.10Smatt lis %r6,_C_LABEL(__curbrk)@ha # record new break 431.10Smatt stw %r5,_C_LABEL(__curbrk)@l(%r6) 441.4Stsubai#endif 451.1Sthorpej blr # return 0 461.1Sthorpej 471.1Sthorpej1: 481.5Skleink b PIC_PLT(_C_LABEL(__cerror)) 49