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