brk.S revision 1.8
11.8Skleink/* $NetBSD: brk.S,v 1.8 2000/06/23 15:40:38 kleink 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.8Skleink#ifdef WEAK_ALIAS 201.8SkleinkENTRY(_brk) 211.8Skleink#else 221.4StsubaiENTRY(brk) 231.8Skleink#endif 241.1Sthorpej#ifdef PIC 251.4Stsubai mflr 10 261.4Stsubai bl _GLOBAL_OFFSET_TABLE_@local-4 271.4Stsubai mflr 9 281.4Stsubai mtlr 10 291.7Skleink lwz 5,_C_LABEL(_end)@got(9) 301.1Sthorpej#else 311.7Skleink lis 5,_C_LABEL(_end)@ha # r5 = &_end 321.7Skleink addi 5,5,_C_LABEL(_end)@l 331.4Stsubai#endif 341.1Sthorpej cmplw 5,3 # if (&_end <= r3) 351.1Sthorpej bgt 0f 361.1Sthorpej mr 5,3 # r5 = r3 371.1Sthorpej0: 381.1Sthorpej mr 3,5 # new break value 391.1Sthorpej li 0,SYS_break 401.1Sthorpej sc # assume, that r5 is kept 411.1Sthorpej bso 1f 421.4Stsubai#ifdef PIC 431.5Skleink lwz 6,_C_LABEL(__curbrk)@got(9) 441.4Stsubai stw 5,0(6) 451.4Stsubai#else 461.5Skleink lis 6,_C_LABEL(__curbrk)@ha # record new break 471.5Skleink stw 5,_C_LABEL(__curbrk)@l(6) 481.4Stsubai#endif 491.1Sthorpej blr # return 0 501.1Sthorpej 511.1Sthorpej1: 521.5Skleink b PIC_PLT(_C_LABEL(__cerror)) 53