Home | History | Annotate | Line # | Download | only in sys
      1 /*	$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $	*/
      2 
      3 #include "SYS.h"
      4 
      5 #if defined(LIBC_SCCS) && !defined(lint)
      6 __RCSID("$NetBSD: sbrk.S,v 1.13 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 
     12 #ifdef WEAK_ALIAS
     13 WEAK_ALIAS(sbrk, _sbrk)
     14 #endif
     15 
     16 ENTRY(_sbrk)
     17 #ifdef __PIC__
     18 	mflr	%r0
     19 	bcl	20,31,.LPIC0
     20 .LPIC0:	mflr	%r5
     21 	mtlr	%r0
     22 	addis	%r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha
     23 	ldptru	%r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8)
     24 #else
     25 	lis	%r8,_C_LABEL(__curbrk)@ha
     26 	ldptru	%r6,_C_LABEL(__curbrk)@l(%r8)	# r6 = old break, r5 = &curbrk
     27 #endif
     28 	add	%r3,%r3,%r6
     29 	mr	%r7,%r3				# r7 = new break
     30 	_DOSYSCALL(break)			# break(new_break)
     31 	bso	1f
     32 	mr	%r3,%r6				# set return value
     33 	stptr	%r7,0(%r8)			# record new break
     34 	blr
     35 1:
     36 	BRANCH_TO_CERROR()
     37 END(_sbrk)
     38