xref: /netbsd/lib/libc/arch/powerpc/sys/sbrk.S (revision d228ce7b)
1/*	$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $	*/
2
3#include "SYS.h"
4
5#if defined(LIBC_SCCS) && !defined(lint)
6__RCSID("$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $")
7#endif /* LIBC_SCCS && !lint */
8
9	.hidden	_C_LABEL(__curbrk)
10	.globl	_C_LABEL(__curbrk)
11
12#ifdef WEAK_ALIAS
13WEAK_ALIAS(sbrk, _sbrk)
14#endif
15
16ENTRY(_sbrk)
17#ifdef __PIC__
18	mflr	%r0
19	bcl	20,31,.LPIC0
20.LPIC0:	mflr	%r5
21	mtlr	%r0
22	addis	%r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha
23	ldptru	%r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8)
24#else
25	lis	%r8,_C_LABEL(__curbrk)@ha
26	ldptru	%r6,_C_LABEL(__curbrk)@l(%r8)	# r6 = old break, r5 = &curbrk
27#endif
28	add	%r3,%r3,%r6
29	mr	%r7,%r3				# r7 = new break
30	_DOSYSCALL(break)			# break(new_break)
31	bso	1f
32	mr	%r3,%r6				# set return value
33	stptr	%r7,0(%r8)			# record new break
34	blr
351:
36	BRANCH_TO_CERROR()
37END(_sbrk)
38