179845Salfred/* $NetBSD: brk.S,v 1.3 2006/07/07 06:50:06 ross Exp $ */ 279845Salfred 379845Salfred#include "SYS.h" 479845Salfred 579845Salfred .globl _C_LABEL(__curbrk) 679845Salfred .globl _C_LABEL(__minbrk) 779845Salfred .globl _C_LABEL(_end) 879845Salfred 979845Salfred#ifdef WEAK_ALIAS 1079845SalfredWEAK_ALIAS(brk, _brk) 1179845Salfred#endif 1279845Salfred 1379845Salfred .macro LdAddr r,sym 1479845Salfred .pushsection ".toc","aw" 1579845Salfred100: .tc \sym[TC],\sym 1679845Salfred .popsection 1779845Salfred ld \r,100b@toc(2) 1879845Salfred .endm 1979845Salfred 2079845Salfred .data 2179845Salfred_C_LABEL(__minbrk): 2279845Salfred .long _C_LABEL(_end) 2379845Salfred .text 2479845Salfred 2579845SalfredENTRY(_brk) 2679845Salfred LdAddr %r5,_end 2779845Salfred cmpld %r5,%r3 # if (&_end <= r3) 2879845Salfred bgt 0f 2979845Salfred mr %r5,%r3 # r5 = r3 3079845Salfred0: 3179845Salfred mr %r3,%r5 # new break value 3279845Salfred li %r0,SYS_break 3379845Salfred sc # assume, that r5 is kept 3479845Salfred bso 1f 3581278Sru LdAddr %r6,__curbrk 3679845Salfred std %r5,0(%r6) 3779845Salfred blr # return 0 3879845Salfred 3979845Salfred1: 4079845Salfred b PIC_PLT(_C_LABEL(__cerror)) 4179845Salfred 4279845Salfred