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