xref: /netbsd-src/lib/libc/arch/arm/sys/sbrk.S (revision 4d12bfcd155352508213ace5ccc59ce930ea2974)
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