1129202Scognet/* $NetBSD: sbrk.S,v 1.7 2003/08/07 16:42:05 agc Exp $ */ 2129202Scognet 3129202Scognet/*- 4129202Scognet * Copyright (c) 1990 The Regents of the University of California. 5129202Scognet * All rights reserved. 6129202Scognet * 7129202Scognet * Redistribution and use in source and binary forms, with or without 8129202Scognet * modification, are permitted provided that the following conditions 9129202Scognet * are met: 10129202Scognet * 1. Redistributions of source code must retain the above copyright 11129202Scognet * notice, this list of conditions and the following disclaimer. 12129202Scognet * 2. Redistributions in binary form must reproduce the above copyright 13129202Scognet * notice, this list of conditions and the following disclaimer in the 14129202Scognet * documentation and/or other materials provided with the distribution. 15129202Scognet * 3. Neither the name of the University nor the names of its contributors 16129202Scognet * may be used to endorse or promote products derived from this software 17129202Scognet * without specific prior written permission. 18129202Scognet * 19129202Scognet * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20129202Scognet * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21129202Scognet * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22129202Scognet * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23129202Scognet * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24129202Scognet * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25129202Scognet * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26129202Scognet * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27129202Scognet * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28129202Scognet * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29129202Scognet * SUCH DAMAGE. 30129202Scognet * 31129202Scognet * from: @(#)sbrk.s 5.1 (Berkeley) 4/23/90 32129202Scognet */ 33129202Scognet 34129202Scognet#include <machine/asm.h> 35129202Scognet__FBSDID("$FreeBSD: releng/10.2/lib/libc/arm/sys/sbrk.S 271337 2014-09-09 22:24:01Z ian $"); 36129202Scognet#include "SYS.h" 37129202Scognet 38171061Skan .globl _C_LABEL(_end) 39129202Scognet 40129202Scognet#ifdef WEAK_ALIAS 41129202ScognetWEAK_ALIAS(sbrk, _sbrk) 42129202Scognet#endif 43129202Scognet 44129202Scognet .data 45129202Scognet .align 0 46129202Scognet .globl CURBRK 47129202Scognet .type CURBRK,#object 48129202ScognetCURBRK: 49171061Skan .word _C_LABEL(_end) 50129202Scognet 51129202Scognet/* 52129202Scognet * Change the data segment size 53129202Scognet */ 54129202ScognetENTRY(_sbrk) 55129202Scognet#ifdef PIC 56129202Scognet /* Setup the GOT */ 57129202Scognet ldr r3, .Lgot 58129202Scognet add r3, pc, r3 59129202Scognet.L1: 60129202Scognet ldr r2, .Lcurbrk 61129202Scognet ldr r2, [r3, r2] 62129202Scognet#else 63129202Scognet ldr r2, .Lcurbrk 64129202Scognet#endif 65129202Scognet /* Get the current brk address */ 66129202Scognet ldr r1, [r2] 67129202Scognet 68129202Scognet /* Calculate new value */ 69129202Scognet mov r3, r0 70129202Scognet add r0, r0, r1 71129202Scognet SYSTRAP(break) 72129202Scognet bcs PIC_SYM(CERROR, PLT) 73129202Scognet 74129202Scognet /* Store new curbrk value */ 75129202Scognet ldr r0, [r2] 76129202Scognet add r1, r0, r3 77129202Scognet str r1, [r2] 78129202Scognet 79129202Scognet /* Return old curbrk value */ 80137464Scognet RET 81129202Scognet 82129202Scognet .align 0 83129202Scognet#ifdef PIC 84129202Scognet.Lgot: 85129202Scognet .word _GLOBAL_OFFSET_TABLE_ - (.L1+4) 86129202Scognet#endif 87129202Scognet.Lcurbrk: 88129202Scognet .word PIC_SYM(CURBRK, GOT) 89271337SianEND(_sbrk) 90