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/11.0/lib/libc/arm/sys/sbrk.S 288373 2015-09-29 16:09:58Z kib $"); 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 /* Setup the GOT */ 56282782Sandrew GOT_INIT(r3, .Lgot, .L1) 57282782Sandrew GOT_GET(r2, r3, .Lcurbrk) 58282782Sandrew 59129202Scognet /* Get the current brk address */ 60129202Scognet ldr r1, [r2] 61129202Scognet 62129202Scognet /* Calculate new value */ 63129202Scognet mov r3, r0 64129202Scognet add r0, r0, r1 65129202Scognet SYSTRAP(break) 66129202Scognet bcs PIC_SYM(CERROR, PLT) 67129202Scognet 68129202Scognet /* Store new curbrk value */ 69129202Scognet ldr r0, [r2] 70129202Scognet add r1, r0, r3 71129202Scognet str r1, [r2] 72129202Scognet 73129202Scognet /* Return old curbrk value */ 74137464Scognet RET 75129202Scognet 76129202Scognet .align 0 77282782Sandrew GOT_INITSYM(.Lgot, .L1) 78129202Scognet.Lcurbrk: 79129202Scognet .word PIC_SYM(CURBRK, GOT) 80270882SianEND(_sbrk) 81288373Skib 82288373Skib .section .note.GNU-stack,"",%progbits 83