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