1/* $NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $ */ 2 3#include "SYS.h" 4 5#if defined(LIBC_SCCS) && !defined(lint) 6__RCSID("$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $") 7#endif /* LIBC_SCCS && !lint */ 8 9 .hidden _C_LABEL(__curbrk) 10 .globl _C_LABEL(__curbrk) 11 .hidden _C_LABEL(__minbrk) 12 .globl _C_LABEL(__minbrk) 13 .globl _C_LABEL(_end) 14 15#ifdef WEAK_ALIAS 16WEAK_ALIAS(brk, _brk) 17#endif 18 19 .data 20 .p2align 2 21_C_LABEL(__minbrk): 22 .long _C_LABEL(_end) 23_C_LABEL(__curbrk): 24 .long _C_LABEL(_end) 25 26ENTRY(_brk) 27#ifdef __PIC__ 28 mflr %r0 29 bcl 20,31,.LPIC0 30.LPIC0: mflr %r9 31 mtlr %r0 32 addis %r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha 33 ldptru %r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9) # r5 = &_end 34#else 35 lis %r9,_C_LABEL(__minbrk)@ha 36 ldptru %r5,_C_LABEL(__minbrk)@l(%r9) # r5 = &_end 37#endif 38 cmpptrl %r5,%r3 # if (__minbrk <= r3) 39#ifdef __PPC_ISEL__ 40 iselgt %r3,%r5,%r3 41#else 42 bgt 0f 43 mr %r5,%r3 # r5 = r3 440: 45 mr %r3,%r5 # new break value 46#endif 47 _DOSYSCALL(break) # assume that r5 is preserved 48 bso 1f 49 stptr %r5,__SIZEOF_POINTER__(%r9) 50 blr # return 0 51 521: 53 BRANCH_TO_CERROR() 54END(_brk) 55