1*4d12bfcdSjoerg/* $NetBSD: sbrk.S,v 1.12 2013/09/12 15:36:15 joerg Exp $ */ 25aefcfdcSbjh21 35aefcfdcSbjh21/*- 45aefcfdcSbjh21 * Copyright (c) 1990 The Regents of the University of California. 55aefcfdcSbjh21 * All rights reserved. 65aefcfdcSbjh21 * 75aefcfdcSbjh21 * Redistribution and use in source and binary forms, with or without 85aefcfdcSbjh21 * modification, are permitted provided that the following conditions 95aefcfdcSbjh21 * are met: 105aefcfdcSbjh21 * 1. Redistributions of source code must retain the above copyright 115aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer. 125aefcfdcSbjh21 * 2. Redistributions in binary form must reproduce the above copyright 135aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer in the 145aefcfdcSbjh21 * documentation and/or other materials provided with the distribution. 15eb7c1594Sagc * 3. Neither the name of the University nor the names of its contributors 165aefcfdcSbjh21 * may be used to endorse or promote products derived from this software 175aefcfdcSbjh21 * without specific prior written permission. 185aefcfdcSbjh21 * 195aefcfdcSbjh21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 205aefcfdcSbjh21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 215aefcfdcSbjh21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 225aefcfdcSbjh21 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 235aefcfdcSbjh21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 245aefcfdcSbjh21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 255aefcfdcSbjh21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 265aefcfdcSbjh21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 275aefcfdcSbjh21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 285aefcfdcSbjh21 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 295aefcfdcSbjh21 * SUCH DAMAGE. 305aefcfdcSbjh21 * 315aefcfdcSbjh21 * from: @(#)sbrk.s 5.1 (Berkeley) 4/23/90 325aefcfdcSbjh21 */ 335aefcfdcSbjh21 345aefcfdcSbjh21#include "SYS.h" 355aefcfdcSbjh21 369af4d11fSnonaka .globl _C_LABEL(_end) 375aefcfdcSbjh21 385aefcfdcSbjh21#ifdef WEAK_ALIAS 395aefcfdcSbjh21WEAK_ALIAS(sbrk, _sbrk) 405aefcfdcSbjh21#endif 415aefcfdcSbjh21 425aefcfdcSbjh21 .data 435aefcfdcSbjh21 .align 0 4431fc835fSmatt .globl _C_LABEL(__curbrk) 4531fc835fSmatt .hidden _C_LABEL(__curbrk) 4631fc835fSmatt .type _C_LABEL(__curbrk),#object 4731fc835fSmatt_C_LABEL(__curbrk): 489af4d11fSnonaka .word _C_LABEL(_end) 495aefcfdcSbjh21 505aefcfdcSbjh21/* 515aefcfdcSbjh21 * Change the data segment size 525aefcfdcSbjh21 */ 535aefcfdcSbjh21ENTRY(_sbrk) 542a674d4fSmatt /* get address or offset to __curbrk */ 5531fc835fSmatt ldr r2, .Lcurbrk 56*4d12bfcdSjoerg#ifdef __PIC__ 572a674d4fSmatt add r2, r2, pc /* pc = &.LPIC0 */ 585aefcfdcSbjh21#endif 5931fc835fSmatt 605aefcfdcSbjh21 /* Get the current brk address */ 615aefcfdcSbjh21 ldr r1, [r2] 625aefcfdcSbjh21 635aefcfdcSbjh21 /* Calculate new value */ 642a674d4fSmatt.LPIC0: mov r3, r0 652a674d4fSmatt adds r0, r0, r1 664cb97060Sbjh21 SYSTRAP(break) 672a674d4fSmatt _INVOKE_CERROR() 685aefcfdcSbjh21 695aefcfdcSbjh21 /* Store new curbrk value */ 705aefcfdcSbjh21 ldr r0, [r2] 712a674d4fSmatt adds r1, r0, r3 725aefcfdcSbjh21 str r1, [r2] 735aefcfdcSbjh21 745aefcfdcSbjh21 /* Return old curbrk value */ 75ed6e0e9eSrearnsha RET 765aefcfdcSbjh21 775aefcfdcSbjh21 .align 0 781b907e18Sthorpej.Lcurbrk: 792a674d4fSmatt .word REL_SYM(_C_LABEL(__curbrk), .LPIC0) 802a674d4fSmattEND(_sbrk) 81