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