xref: /minix3/lib/libc/arch/powerpc/sys/sbrk.S (revision 2fe8fb192fe7e8720e3e7a77f928da545e872a6a)
1*2fe8fb19SBen Gras/*	$NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $	*/
2*2fe8fb19SBen Gras
3*2fe8fb19SBen Gras#include "SYS.h"
4*2fe8fb19SBen Gras
5*2fe8fb19SBen Gras#if defined(LIBC_SCCS) && !defined(lint)
6*2fe8fb19SBen Gras__RCSID("$NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $")
7*2fe8fb19SBen Gras#endif /* LIBC_SCCS && !lint */
8*2fe8fb19SBen Gras
9*2fe8fb19SBen Gras	.globl	_C_LABEL(__curbrk)
10*2fe8fb19SBen Gras	.globl	_C_LABEL(_end)
11*2fe8fb19SBen Gras
12*2fe8fb19SBen Gras#ifdef WEAK_ALIAS
13*2fe8fb19SBen GrasWEAK_ALIAS(sbrk, _sbrk)
14*2fe8fb19SBen Gras#endif
15*2fe8fb19SBen Gras
16*2fe8fb19SBen Gras	.data
17*2fe8fb19SBen Gras_C_LABEL(__curbrk):
18*2fe8fb19SBen Gras	.long	_C_LABEL(_end)
19*2fe8fb19SBen Gras	.text
20*2fe8fb19SBen Gras
21*2fe8fb19SBen GrasENTRY(_sbrk)
22*2fe8fb19SBen Gras#ifdef PIC
23*2fe8fb19SBen Gras	mflr	%r10
24*2fe8fb19SBen Gras	PIC_GOTSETUP(%r5)
25*2fe8fb19SBen Gras	mtlr	%r10
26*2fe8fb19SBen Gras	lwz	%r5,_C_LABEL(__curbrk)@got(%r5)
27*2fe8fb19SBen Gras	lwz	%r6,0(%r5)
28*2fe8fb19SBen Gras#else
29*2fe8fb19SBen Gras	lis	%r5,_C_LABEL(__curbrk)@ha
30*2fe8fb19SBen Gras	lwzu	%r6,_C_LABEL(__curbrk)@l(%r5)	# r6 = old break, r5 = &curbrk
31*2fe8fb19SBen Gras#endif
32*2fe8fb19SBen Gras	add	%r3,%r3,%r6
33*2fe8fb19SBen Gras	mr	%r7,%r3				# r7 = new break
34*2fe8fb19SBen Gras	_DOSYSCALL(break)			# break(new_break)
35*2fe8fb19SBen Gras	bso	1f
36*2fe8fb19SBen Gras	mr	%r3,%r6				# set return value
37*2fe8fb19SBen Gras	stw	%r7,0(%r5)			# record new break
38*2fe8fb19SBen Gras	blr
39*2fe8fb19SBen Gras1:
40*2fe8fb19SBen Gras	b	_C_LABEL(__cerror)
41*2fe8fb19SBen GrasEND(_sbrk)
42