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