sbrk.S revision 107571
1206084Srdivacky/*- 2206084Srdivacky * Copyright (c) 2002 Peter Grehan. 3206084Srdivacky * All rights reserved. 4206084Srdivacky * 5206084Srdivacky * Redistribution and use in source and binary forms, with or without 6206084Srdivacky * modification, are permitted provided that the following conditions 7206084Srdivacky * are met: 8206084Srdivacky * 1. Redistributions of source code must retain the above copyright 9206084Srdivacky * notice, this list of conditions and the following disclaimer. 10206084Srdivacky * 2. Redistributions in binary form must reproduce the above copyright 11206084Srdivacky * notice, this list of conditions and the following disclaimer in the 12206084Srdivacky * documentation and/or other materials provided with the distribution. 13206084Srdivacky * 14206084Srdivacky * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15206084Srdivacky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16207619Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17206084Srdivacky * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18206084Srdivacky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19206084Srdivacky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20206084Srdivacky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21206084Srdivacky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22206084Srdivacky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23207619Srdivacky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24207619Srdivacky * SUCH DAMAGE. 25207619Srdivacky */ 26207619Srdivacky/* $NetBSD: sbrk.S,v 1.8 2000/06/26 06:25:44 kleink Exp $ */ 27207619Srdivacky 28206275Srdivacky#include <machine/asm.h> 29206275Srdivacky__FBSDID("$FreeBSD: head/lib/libc/powerpc/sys/sbrk.S 107571 2002-12-04 07:25:14Z grehan $"); 30207619Srdivacky 31207619Srdivacky#include "SYS.h" 32207619Srdivacky 33207619Srdivacky .globl HIDENAME(curbrk) 34207619Srdivacky .globl CNAME(_end) 35207619Srdivacky 36207619Srdivacky .data 37207619SrdivackyHIDENAME(curbrk): 38207619Srdivacky .long CNAME(_end) 39207619Srdivacky 40207619Srdivacky .text 41207619SrdivackyENTRY(sbrk) 42207619Srdivacky 43207619Srdivacky#ifdef PIC 44207619Srdivacky mflr %r10 45207619Srdivacky bl _GLOBAL_OFFSET_TABLE_@local-4 46207619Srdivacky mflr %r5 47207619Srdivacky mtlr %r10 48207619Srdivacky lwz %r5,HIDENAME(curbrk)@got(%r5) 49207619Srdivacky lwz %r6,0(%r5) 50206275Srdivacky#else 51207619Srdivacky lis %r5,HIDENAME(curbrk)@ha 52207619Srdivacky lwz %r6,HIDENAME(curbrk)@l(%r5) /* r6 = old break */ 53207619Srdivacky#endif 54207619Srdivacky cmpwi %r3,0 /* sbrk(0) - return curbrk */ 55207619Srdivacky beq 1f 56207619Srdivacky add %r3,%r3,%r6 57207619Srdivacky mr %r7,%r3 /* r7 = new break */ 58207619Srdivacky li %r0,SYS_break 59207619Srdivacky sc /* break(new_break) */ 60207619Srdivacky bso 2f 61207619Srdivacky#ifdef PIC 62207619Srdivacky stw %r7,0(%r5) 63207619Srdivacky#else 64207619Srdivacky stw %r7,HIDENAME(curbrk)@l(%r5) /* record new break */ 65207619Srdivacky#endif 66207619Srdivacky1: 67207619Srdivacky mr %r3,%r6 /* set return value */ 68207619Srdivacky blr 69207619Srdivacky2: 70207619Srdivacky b PIC_PLT(HIDENAME(cerror)) 71207619Srdivacky