brk.S revision 1.2
1/*	$NetBSD: brk.S,v 1.2 2006/07/06 17:05:04 ross 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	.macro  LdAddr  r,sym
14	.pushsection    ".toc","aw"
15100:	.tc sym[TC],sym
16	.popsection
17	ld      \r,100b@toc(2)
18	.endm
19
20	.text
21
22ENTRY(_brk)
23	LdAddr	%r5,_end
24	cmpld	%r5,%r3			# if (&_end <= r3)
25	bgt	0f
26	mr	%r5,%r3			# r5 = r3
270:
28	mr	%r3,%r5			# new break value
29	li	%r0,SYS_break
30	sc				# assume, that r5 is kept
31	bso	1f
32	LdAddr	%r6,__curbrk
33	std	%r5,0(%r6)
34	blr				# return 0
35
361:
37	b	.__cerror
38