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