1*4d12bfcdSjoerg/* $NetBSD: brk.S,v 1.13 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: @(#)brk.s 5.2 (Berkeley) 12/17/90 325aefcfdcSbjh21 */ 335aefcfdcSbjh21 345aefcfdcSbjh21#include "SYS.h" 355aefcfdcSbjh21 369af4d11fSnonaka .globl _C_LABEL(_end) 3731fc835fSmatt .globl _C_LABEL(__curbrk) 385aefcfdcSbjh21 395aefcfdcSbjh21#ifdef WEAK_ALIAS 405aefcfdcSbjh21WEAK_ALIAS(brk, _brk) 415aefcfdcSbjh21#endif 425aefcfdcSbjh21 435aefcfdcSbjh21 .data 445aefcfdcSbjh21 .align 0 455aefcfdcSbjh21 .globl _C_LABEL(__minbrk) 4631fc835fSmatt .hidden _C_LABEL(__minbrk) 475aefcfdcSbjh21 .type _C_LABEL(__minbrk),#object 485aefcfdcSbjh21_C_LABEL(__minbrk): 499af4d11fSnonaka .word _C_LABEL(_end) 505aefcfdcSbjh21 515aefcfdcSbjh21/* 525aefcfdcSbjh21 * Change the data segment size 535aefcfdcSbjh21 */ 545aefcfdcSbjh21ENTRY(_brk) 552a674d4fSmatt ldr r1, .Lminbrk 56*4d12bfcdSjoerg#ifdef __PIC__ 572a674d4fSmatt adr r3, .Lminbrk 582a674d4fSmatt adds r1, r1, r3 595aefcfdcSbjh21#endif 605aefcfdcSbjh21 /* Get the minimum allowable brk address */ 615aefcfdcSbjh21 ldr r1, [r1] 625aefcfdcSbjh21 635aefcfdcSbjh21 /* 645aefcfdcSbjh21 * Valid the address specified and set to the minimum 655aefcfdcSbjh21 * if the address is below minbrk. 665aefcfdcSbjh21 */ 675aefcfdcSbjh21 cmp r0, r1 682a674d4fSmatt#ifdef __thumb__ 692a674d4fSmatt bcs 1f 702a674d4fSmatt mov r0, r1 712a674d4fSmatt1: 722a674d4fSmatt#else 7390362233Smartin movcc r0, r1 742a674d4fSmatt#endif 755aefcfdcSbjh21 mov r2, r0 764cb97060Sbjh21 SYSTRAP(break) 772a674d4fSmatt _INVOKE_CERROR() 785aefcfdcSbjh21 792a674d4fSmatt ldr r1, .Lcurbrk 80*4d12bfcdSjoerg#ifdef __PIC__ 812a674d4fSmatt adds r1, r1, r3 825aefcfdcSbjh21#endif 835aefcfdcSbjh21 /* Store the new address in curbrk */ 845aefcfdcSbjh21 str r2, [r1] 855aefcfdcSbjh21 865aefcfdcSbjh21 /* Return 0 for success */ 872a674d4fSmatt movs r0, #0 88ed6e0e9eSrearnsha RET 895aefcfdcSbjh21 902a674d4fSmatt .align 0 911b907e18Sthorpej.Lminbrk: 922a674d4fSmatt .word REL_SYM(_C_LABEL(__minbrk), .Lminbrk) 931b907e18Sthorpej.Lcurbrk: 942a674d4fSmatt .word REL_SYM(_C_LABEL(__curbrk), .Lminbrk) 952a674d4fSmattEND(_brk) 96