xref: /netbsd/lib/libc/arch/powerpc/sys/sbrk.S (revision c4a72b64)
1/*	$NetBSD: sbrk.S,v 1.9 2002/07/30 06:08:00 matt Exp $	*/
2
3#include "SYS.h"
4
5	.globl	_C_LABEL(__curbrk)
6	.globl	_C_LABEL(_end)
7
8#ifdef WEAK_ALIAS
9WEAK_ALIAS(sbrk, _sbrk)
10#endif
11
12	.data
13_C_LABEL(__curbrk):
14	.long	_C_LABEL(_end)
15	.text
16
17ENTRY(_sbrk)
18#ifdef PIC
19	mflr	%r10
20	bl	_GLOBAL_OFFSET_TABLE_@local-4
21	mflr	%r5
22	mtlr	%r10
23	lwz	%r5,_C_LABEL(__curbrk)@got(%r5)
24	lwz	%r6,0(%r5)
25#else
26	lis	%r5,_C_LABEL(__curbrk)@ha
27	lwz	%r6,_C_LABEL(__curbrk)@l(%r5)	# r6 = old break
28#endif
29	add	%r3,%r3,%r6
30	mr	%r7,%r3				# r7 = new break
31	li	%r0,SYS_break
32	sc					# break(new_break)
33	bso	1f
34	mr	%r3,%r6				# set return value
35#ifdef PIC
36	stw	%r7,0(%r5)
37#else
38	stw	%r7,_C_LABEL(__curbrk)@l(%r5)	# record new break
39#endif
40	blr
411:
42	b	PIC_PLT(_C_LABEL(__cerror))
43