1/* $NetBSD: brk.S,v 1.4 2011/10/29 16:03:33 christos 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 .macro LdAddr r,sym 14 .pushsection ".toc","aw" 15100: .tc \sym[TC],\sym 16 .popsection 17 ld \r,100b@toc(2) 18 .endm 19 20 .data 21_C_LABEL(__minbrk): 22 .long _C_LABEL(_end) 23 .text 24 25ENTRY(_brk) 26 LdAddr %r5,_end 27 cmpld %r5,%r3 # if (&_end <= r3) 28 bgt 0f 29 mr %r5,%r3 # r5 = r3 300: 31 mr %r3,%r5 # new break value 32 li %r0,SYS_break 33 sc # assume, that r5 is kept 34 bso 1f 35 LdAddr %r6,__curbrk 36 std %r5,0(%r6) 37 blr # return 0 38 391: 40 b PIC_PLT(_C_LABEL(__cerror)) 41 42