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