1/* $NetBSD: sbrk.S,v 1.9 2002/07/30 06:08:00 matt Exp $ */ 2 3#include "SYS.h" 4 5 .globl _C_LABEL(__curbrk) 6 .globl _C_LABEL(_end) 7 8#ifdef WEAK_ALIAS 9WEAK_ALIAS(sbrk, _sbrk) 10#endif 11 12 .data 13_C_LABEL(__curbrk): 14 .long _C_LABEL(_end) 15 .text 16 17ENTRY(_sbrk) 18#ifdef PIC 19 mflr %r10 20 bl _GLOBAL_OFFSET_TABLE_@local-4 21 mflr %r5 22 mtlr %r10 23 lwz %r5,_C_LABEL(__curbrk)@got(%r5) 24 lwz %r6,0(%r5) 25#else 26 lis %r5,_C_LABEL(__curbrk)@ha 27 lwz %r6,_C_LABEL(__curbrk)@l(%r5) # r6 = old break 28#endif 29 add %r3,%r3,%r6 30 mr %r7,%r3 # r7 = new break 31 li %r0,SYS_break 32 sc # break(new_break) 33 bso 1f 34 mr %r3,%r6 # set return value 35#ifdef PIC 36 stw %r7,0(%r5) 37#else 38 stw %r7,_C_LABEL(__curbrk)@l(%r5) # record new break 39#endif 40 blr 411: 42 b PIC_PLT(_C_LABEL(__cerror)) 43