brk.S revision 1.5
1/* $NetBSD: brk.S,v 1.5 1999/01/14 22:48:21 kleink Exp $ */ 2 3#include "SYS.h" 4 5 .globl _C_LABEL(__curbrk) 6 .globl _C_LABEL(__minbrk) 7 8 .data 9_C_LABEL(__minbrk): 10 .long _C_LABEL(end) # XXX not used yet 11 12 .text 13 14ENTRY(brk) 15#ifdef PIC 16 mflr 10 17 bl _GLOBAL_OFFSET_TABLE_@local-4 18 mflr 9 19 mtlr 10 20 lwz 5,_C_LABEL(end)@got(9) 21#else 22 lis 5,_C_LABEL(end)@ha # r5 = &_end 23 addi 5,5,_C_LABEL(end)@l 24#endif 25 cmplw 5,3 # if (&_end <= r3) 26 bgt 0f 27 mr 5,3 # r5 = r3 280: 29 mr 3,5 # new break value 30 li 0,SYS_break 31 sc # assume, that r5 is kept 32 bso 1f 33#ifdef PIC 34 lwz 6,_C_LABEL(__curbrk)@got(9) 35 stw 5,0(6) 36#else 37 lis 6,_C_LABEL(__curbrk)@ha # record new break 38 stw 5,_C_LABEL(__curbrk)@l(6) 39#endif 40 blr # return 0 41 421: 43 b PIC_PLT(_C_LABEL(__cerror)) 44