1/* $NetBSD: brk.S,v 1.6 1999/03/31 11:53:08 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 .data 10_C_LABEL(__minbrk): 11 .long _C_LABEL(_end) # XXX not used yet 12 13 .text 14 15ENTRY(brk) 16#ifdef PIC 17 mflr 10 18 bl _GLOBAL_OFFSET_TABLE_@local-4 19 mflr 9 20 mtlr 10 21 lwz 5,_C_LABEL(end)@got(9) 22#else 23 lis 5,_C_LABEL(end)@ha # r5 = &_end 24 addi 5,5,_C_LABEL(end)@l 25#endif 26 cmplw 5,3 # if (&_end <= r3) 27 bgt 0f 28 mr 5,3 # r5 = r3 290: 30 mr 3,5 # new break value 31 li 0,SYS_break 32 sc # assume, that r5 is kept 33 bso 1f 34#ifdef PIC 35 lwz 6,_C_LABEL(__curbrk)@got(9) 36 stw 5,0(6) 37#else 38 lis 6,_C_LABEL(__curbrk)@ha # record new break 39 stw 5,_C_LABEL(__curbrk)@l(6) 40#endif 41 blr # return 0 42 431: 44 b PIC_PLT(_C_LABEL(__cerror)) 45