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