xref: /minix/lib/libc/arch/powerpc64/sys/brk.S (revision 0a6a1f1d)
1/*	$NetBSD: brk.S,v 1.5 2014/08/23 02:24:22 matt Exp $	*/
2
3#include "SYS.h"
4
5
6	.hidden	_C_LABEL(__curbrk)
7	.globl	_C_LABEL(__curbrk)
8	.hidden	_C_LABEL(__minbrk)
9	.globl	_C_LABEL(__minbrk)
10	.globl	_C_LABEL(_end)
11
12#ifdef WEAK_ALIAS
13WEAK_ALIAS(brk, _brk)
14#endif
15
16	.data
17	.p2align 3
18_C_LABEL(__minbrk):
19	.quad	_C_LABEL(_end)
20_C_LABEL(__curbrk):
21	.quad	_C_LABEL(_end)
22
23ENTRY(_brk)
24	addis	%r9,%r2,_C_LABEL(__minbrk)@toc@ha
25	ldptru	%r5,_C_LABEL(__minbrk)@toc@l(%r9)
26	cmpptrl	%r5,%r3			# if (__minbrk <= r3)
27#ifdef __PPC_ISEL__
28	iselgt	%r3,%r5,%r3
29#else
30	bgt	0f
31	mr	%r5,%r3			# r5 = r3
320:
33	mr	%r3,%r5			# new break value
34#endif
35	_DOSYSCALL(break)		# assume that r5 is preserved
36	bso	1f
37	stptr	%r5,__SIZEOF_POINTER__(%r9)
38	blr				# return 0
39
401:
41	BRANCH_TO_CERROR()
42END(_brk)
43