1/* brk system call for Linux/ppc.
2   Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4
5   The GNU C Library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9
10   The GNU C Library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14
15   You should have received a copy of the GNU Lesser General Public
16   License along with the GNU C Library; if not, see
17   <http://www.gnu.org/licenses/>.  */
18
19#include <features.h>
20#include "ppc_asm.h"
21#define _ERRNO_H	1
22#include <bits/errno.h>
23#include <sys/syscall.h>
24
25#ifdef __NR_brk
26
27#ifdef __PIC__
28.section .bss
29	.align 4
30	.globl __curbrk
31	.hidden __curbrk
32__curbrk: .skip 4
33	.type __curbrk,@object
34	.size __curbrk,4
35#else
36.comm __curbrk, 4,4
37#endif
38
39	.text
40	.globl	brk
41	.type	brk,@function
42	.align	2
43
44brk:
45	stwu    r1,-16(r1)
46	stw	r3,8(r1)
47	li 0, __NR_brk;
48	sc
49	lwz     r6,8(r1)
50#ifdef __PIC__
51	mflr    r4
52# ifdef HAVE_ASM_PPC_REL16
53	bcl	20,31,1f
541:	mflr	r5
55	addis	r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha
56	addi	r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l
57# else
58	bl      _GLOBAL_OFFSET_TABLE_@local-4
59	mflr    r5
60# endif
61	lwz     r5,__curbrk@got(r5)
62	mtlr    r4
63	stw     r3,0(r5)
64#else
65	lis     r4,__curbrk@ha
66	stw     r3,__curbrk@l(r4)
67#endif
68	cmplw   r6,r3
69	addi    r1,r1,16
70	li	r3,0
71	blelr+
72	li      r3,ENOMEM
73
74	b	__syscall_error
75
76	.size brk,.-brk
77
78libc_hidden_def(brk)
79#endif
80