1*2fe8fb19SBen Gras/* $NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $ */ 2*2fe8fb19SBen Gras 3*2fe8fb19SBen Gras#include "SYS.h" 4*2fe8fb19SBen Gras 5*2fe8fb19SBen Gras#if defined(LIBC_SCCS) && !defined(lint) 6*2fe8fb19SBen Gras__RCSID("$NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $") 7*2fe8fb19SBen Gras#endif /* LIBC_SCCS && !lint */ 8*2fe8fb19SBen Gras 9*2fe8fb19SBen Gras .globl _C_LABEL(__curbrk) 10*2fe8fb19SBen Gras .globl _C_LABEL(_end) 11*2fe8fb19SBen Gras 12*2fe8fb19SBen Gras#ifdef WEAK_ALIAS 13*2fe8fb19SBen GrasWEAK_ALIAS(sbrk, _sbrk) 14*2fe8fb19SBen Gras#endif 15*2fe8fb19SBen Gras 16*2fe8fb19SBen Gras .data 17*2fe8fb19SBen Gras_C_LABEL(__curbrk): 18*2fe8fb19SBen Gras .long _C_LABEL(_end) 19*2fe8fb19SBen Gras .text 20*2fe8fb19SBen Gras 21*2fe8fb19SBen GrasENTRY(_sbrk) 22*2fe8fb19SBen Gras#ifdef PIC 23*2fe8fb19SBen Gras mflr %r10 24*2fe8fb19SBen Gras PIC_GOTSETUP(%r5) 25*2fe8fb19SBen Gras mtlr %r10 26*2fe8fb19SBen Gras lwz %r5,_C_LABEL(__curbrk)@got(%r5) 27*2fe8fb19SBen Gras lwz %r6,0(%r5) 28*2fe8fb19SBen Gras#else 29*2fe8fb19SBen Gras lis %r5,_C_LABEL(__curbrk)@ha 30*2fe8fb19SBen Gras lwzu %r6,_C_LABEL(__curbrk)@l(%r5) # r6 = old break, r5 = &curbrk 31*2fe8fb19SBen Gras#endif 32*2fe8fb19SBen Gras add %r3,%r3,%r6 33*2fe8fb19SBen Gras mr %r7,%r3 # r7 = new break 34*2fe8fb19SBen Gras _DOSYSCALL(break) # break(new_break) 35*2fe8fb19SBen Gras bso 1f 36*2fe8fb19SBen Gras mr %r3,%r6 # set return value 37*2fe8fb19SBen Gras stw %r7,0(%r5) # record new break 38*2fe8fb19SBen Gras blr 39*2fe8fb19SBen Gras1: 40*2fe8fb19SBen Gras b _C_LABEL(__cerror) 41*2fe8fb19SBen GrasEND(_sbrk) 42