Home | History | Annotate | Line # | Download | only in sys
sbrk.S revision 1.4
      1  1.4  joerg /*	$NetBSD: sbrk.S,v 1.4 2014/08/13 15:19:22 joerg 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.2   ross 
     13  1.1   ross 	.data
     14  1.1   ross _C_LABEL(__curbrk):
     15  1.1   ross 	.long	_C_LABEL(_end)
     16  1.1   ross 	.text
     17  1.1   ross 
     18  1.2   ross 	.macro  LdAddr  r,sym
     19  1.2   ross 	.pushsection    ".toc","aw"
     20  1.3   ross 100:	.tc \sym[TC],\sym
     21  1.2   ross 	.popsection
     22  1.2   ross 	ld      \r,100b@toc(2)
     23  1.2   ross 	.endm
     24  1.2   ross 
     25  1.1   ross ENTRY(_sbrk)
     26  1.4  joerg 	LdAddr	%r6,__curbrk
     27  1.1   ross 	add	%r3,%r3,%r6
     28  1.1   ross 	mr	%r7,%r3				# r7 = new break
     29  1.1   ross 	li	%r0,SYS_break
     30  1.1   ross 	sc					# break(new_break)
     31  1.1   ross 	bso	1f
     32  1.1   ross 	mr	%r3,%r6				# set return value
     33  1.2   ross 	LdAddr	%r6,__curbrk
     34  1.2   ross 	std	%r7,0(%r6)
     35  1.1   ross 	blr
     36  1.1   ross 1:
     37  1.1   ross 	b	PIC_PLT(_C_LABEL(__cerror))
     38