xref: /netbsd-src/lib/libc/arch/powerpc/sys/brk.S (revision 95d875fb90b1458e4f1de6950286ddcd6644bc61)
1/*	$NetBSD: brk.S,v 1.6 1999/03/31 11:53:08 kleink Exp $	*/
2
3#include "SYS.h"
4
5	.globl	_C_LABEL(__curbrk)
6	.globl	_C_LABEL(__minbrk)
7	.globl	_C_LABEL(_end)
8
9	.data
10_C_LABEL(__minbrk):
11	.long	_C_LABEL(_end)		# XXX not used yet
12
13	.text
14
15ENTRY(brk)
16#ifdef PIC
17	mflr	10
18	bl	_GLOBAL_OFFSET_TABLE_@local-4
19	mflr	9
20	mtlr	10
21	lwz	5,_C_LABEL(end)@got(9)
22#else
23	lis	5,_C_LABEL(end)@ha	# r5 = &_end
24	addi	5,5,_C_LABEL(end)@l
25#endif
26	cmplw	5,3			# if (&_end <= r3)
27	bgt	0f
28	mr	5,3			# r5 = r3
290:
30	mr	3,5			# new break value
31	li	0,SYS_break
32	sc				# assume, that r5 is kept
33	bso	1f
34#ifdef PIC
35	lwz	6,_C_LABEL(__curbrk)@got(9)
36	stw	5,0(6)
37#else
38	lis	6,_C_LABEL(__curbrk)@ha	# record new break
39	stw	5,_C_LABEL(__curbrk)@l(6)
40#endif
41	blr				# return 0
42
431:
44	b	PIC_PLT(_C_LABEL(__cerror))
45