xref: /netbsd-src/lib/libc/arch/powerpc/sys/sbrk.S (revision 6a493d6bc668897c91594964a732d38505b70cbb)
1/*	$NetBSD: sbrk.S,v 1.12 2013/09/12 15:36:15 joerg Exp $	*/
2
3#include "SYS.h"
4
5#if defined(LIBC_SCCS) && !defined(lint)
6__RCSID("$NetBSD: sbrk.S,v 1.12 2013/09/12 15:36:15 joerg Exp $")
7#endif /* LIBC_SCCS && !lint */
8
9	.globl	_C_LABEL(__curbrk)
10	.globl	_C_LABEL(_end)
11
12#ifdef WEAK_ALIAS
13WEAK_ALIAS(sbrk, _sbrk)
14#endif
15
16	.data
17_C_LABEL(__curbrk):
18	.long	_C_LABEL(_end)
19	.text
20
21ENTRY(_sbrk)
22#ifdef __PIC__
23	mflr	%r10
24	PIC_GOTSETUP(%r5)
25	mtlr	%r10
26	lwz	%r5,_C_LABEL(__curbrk)@got(%r5)
27	lwz	%r6,0(%r5)
28#else
29	lis	%r5,_C_LABEL(__curbrk)@ha
30	lwzu	%r6,_C_LABEL(__curbrk)@l(%r5)	# r6 = old break, r5 = &curbrk
31#endif
32	add	%r3,%r3,%r6
33	mr	%r7,%r3				# r7 = new break
34	_DOSYSCALL(break)			# break(new_break)
35	bso	1f
36	mr	%r3,%r6				# set return value
37	stw	%r7,0(%r5)			# record new break
38	blr
391:
40	b	_C_LABEL(__cerror)
41END(_sbrk)
42