xref: /netbsd-src/lib/libc/arch/powerpc64/sys/brk.S (revision 6a493d6bc668897c91594964a732d38505b70cbb)
1/*	$NetBSD: brk.S,v 1.4 2011/10/29 16:03:33 christos 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        .data
21_C_LABEL(__minbrk):
22	.long   _C_LABEL(_end)
23	.text
24
25ENTRY(_brk)
26	LdAddr	%r5,_end
27	cmpld	%r5,%r3			# if (&_end <= r3)
28	bgt	0f
29	mr	%r5,%r3			# r5 = r3
300:
31	mr	%r3,%r5			# new break value
32	li	%r0,SYS_break
33	sc				# assume, that r5 is kept
34	bso	1f
35	LdAddr	%r6,__curbrk
36	std	%r5,0(%r6)
37	blr				# return 0
38
391:
40	b	PIC_PLT(_C_LABEL(__cerror))
41
42