brk.S revision 1.8
1/*	$NetBSD: brk.S,v 1.8 2000/06/23 15:40:38 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#ifdef WEAK_ALIAS
10WEAK_ALIAS(brk, _brk)
11#endif
12
13	.data
14_C_LABEL(__minbrk):
15	.long	_C_LABEL(_end)		# XXX not used yet
16
17	.text
18
19#ifdef WEAK_ALIAS
20ENTRY(_brk)
21#else
22ENTRY(brk)
23#endif
24#ifdef PIC
25	mflr	10
26	bl	_GLOBAL_OFFSET_TABLE_@local-4
27	mflr	9
28	mtlr	10
29	lwz	5,_C_LABEL(_end)@got(9)
30#else
31	lis	5,_C_LABEL(_end)@ha	# r5 = &_end
32	addi	5,5,_C_LABEL(_end)@l
33#endif
34	cmplw	5,3			# if (&_end <= r3)
35	bgt	0f
36	mr	5,3			# r5 = r3
370:
38	mr	3,5			# new break value
39	li	0,SYS_break
40	sc				# assume, that r5 is kept
41	bso	1f
42#ifdef PIC
43	lwz	6,_C_LABEL(__curbrk)@got(9)
44	stw	5,0(6)
45#else
46	lis	6,_C_LABEL(__curbrk)@ha	# record new break
47	stw	5,_C_LABEL(__curbrk)@l(6)
48#endif
49	blr				# return 0
50
511:
52	b	PIC_PLT(_C_LABEL(__cerror))
53