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