1/* $NetBSD: brk.S,v 1.9 2000/06/26 06:25:43 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 19ENTRY(_brk) 20#ifdef PIC 21 mflr 10 22 bl _GLOBAL_OFFSET_TABLE_@local-4 23 mflr 9 24 mtlr 10 25 lwz 5,_C_LABEL(_end)@got(9) 26#else 27 lis 5,_C_LABEL(_end)@ha # r5 = &_end 28 addi 5,5,_C_LABEL(_end)@l 29#endif 30 cmplw 5,3 # if (&_end <= r3) 31 bgt 0f 32 mr 5,3 # r5 = r3 330: 34 mr 3,5 # new break value 35 li 0,SYS_break 36 sc # assume, that r5 is kept 37 bso 1f 38#ifdef PIC 39 lwz 6,_C_LABEL(__curbrk)@got(9) 40 stw 5,0(6) 41#else 42 lis 6,_C_LABEL(__curbrk)@ha # record new break 43 stw 5,_C_LABEL(__curbrk)@l(6) 44#endif 45 blr # return 0 46 471: 48 b PIC_PLT(_C_LABEL(__cerror)) 49