brk.S revision 1.5
11.5Skleink/* $NetBSD: brk.S,v 1.5 1999/01/14 22:48:21 kleink Exp $ */ 21.1Sthorpej 31.1Sthorpej#include "SYS.h" 41.1Sthorpej 51.5Skleink .globl _C_LABEL(__curbrk) 61.5Skleink .globl _C_LABEL(__minbrk) 71.4Stsubai 81.4Stsubai .data 91.5Skleink_C_LABEL(__minbrk): 101.5Skleink .long _C_LABEL(end) # XXX not used yet 111.1Sthorpej 121.1Sthorpej .text 131.1Sthorpej 141.4StsubaiENTRY(brk) 151.1Sthorpej#ifdef PIC 161.4Stsubai mflr 10 171.4Stsubai bl _GLOBAL_OFFSET_TABLE_@local-4 181.4Stsubai mflr 9 191.4Stsubai mtlr 10 201.4Stsubai lwz 5,_C_LABEL(end)@got(9) 211.1Sthorpej#else 221.3Sws lis 5,_C_LABEL(end)@ha # r5 = &_end 231.3Sws addi 5,5,_C_LABEL(end)@l 241.4Stsubai#endif 251.1Sthorpej cmplw 5,3 # if (&_end <= r3) 261.1Sthorpej bgt 0f 271.1Sthorpej mr 5,3 # r5 = r3 281.1Sthorpej0: 291.1Sthorpej mr 3,5 # new break value 301.1Sthorpej li 0,SYS_break 311.1Sthorpej sc # assume, that r5 is kept 321.1Sthorpej bso 1f 331.4Stsubai#ifdef PIC 341.5Skleink lwz 6,_C_LABEL(__curbrk)@got(9) 351.4Stsubai stw 5,0(6) 361.4Stsubai#else 371.5Skleink lis 6,_C_LABEL(__curbrk)@ha # record new break 381.5Skleink stw 5,_C_LABEL(__curbrk)@l(6) 391.4Stsubai#endif 401.1Sthorpej blr # return 0 411.1Sthorpej 421.1Sthorpej1: 431.5Skleink b PIC_PLT(_C_LABEL(__cerror)) 44