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