]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/sparc/sparc32/brk.c
Update.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / sparc / sparc32 / brk.c
CommitLineData
fd26970f 1/* brk system call for Linux/SPARC.
489b7d4b 2 Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
fd26970f
UD
3 This file is part of the GNU C Library.
4 Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public License as
8 published by the Free Software Foundation; either version 2 of the
9 License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public
17 License along with the GNU C Library; see the file COPYING.LIB. If not,
18 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21#include <errno.h>
22#include <unistd.h>
23#include <sysdep.h>
24
25/* This must be initialized data because commons can't have aliases. */
26void *__curbrk = 0;
27
28/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
29 to work around different old braindamage in the old Linux ELF dynamic
30 linker. */
31weak_alias (__curbrk, ___brk_addr)
32
33int
34__brk (void *addr)
35{
9c4c0024 36 void *newbrk;
fd26970f 37
489b7d4b
RH
38 {
39 register void *o0 __asm__("%o0") = addr;
40 register int g1 __asm__("%g1") = __NR_brk;
41 __asm ("t 0x10" : "=r"(o0) : "r"(g1), "0"(o0) : "cc");
42 newbrk = o0;
43 }
fd26970f
UD
44
45 __curbrk = newbrk;
46
47 if (newbrk < addr)
48 {
49 __set_errno (ENOMEM);
50 return -1;
51 }
52
53 return 0;
54}
55weak_alias (__brk, brk)