Home | History | Annotate | Line # | Download | only in sys
sbrk.S revision 1.4
      1 /*	$NetBSD: sbrk.S,v 1.4 2014/08/13 15:19:22 joerg Exp $	*/
      2 
      3 #include "SYS.h"
      4 
      5 	.globl	_C_LABEL(__curbrk)
      6 	.globl	_C_LABEL(_end)
      7 
      8 #ifdef WEAK_ALIAS
      9 WEAK_ALIAS(sbrk, _sbrk)
     10 #endif
     11 
     12 
     13 	.data
     14 _C_LABEL(__curbrk):
     15 	.long	_C_LABEL(_end)
     16 	.text
     17 
     18 	.macro  LdAddr  r,sym
     19 	.pushsection    ".toc","aw"
     20 100:	.tc \sym[TC],\sym
     21 	.popsection
     22 	ld      \r,100b@toc(2)
     23 	.endm
     24 
     25 ENTRY(_sbrk)
     26 	LdAddr	%r6,__curbrk
     27 	add	%r3,%r3,%r6
     28 	mr	%r7,%r3				# r7 = new break
     29 	li	%r0,SYS_break
     30 	sc					# break(new_break)
     31 	bso	1f
     32 	mr	%r3,%r6				# set return value
     33 	LdAddr	%r6,__curbrk
     34 	std	%r7,0(%r6)
     35 	blr
     36 1:
     37 	b	PIC_PLT(_C_LABEL(__cerror))
     38