Home | History | Annotate | Line # | Download | only in sys
brk.S revision 1.2
      1  1.2  bjh21 /*	$NetBSD: brk.S,v 1.2 2001/01/09 19:47:27 bjh21 Exp $	*/
      2  1.1  bjh21 
      3  1.1  bjh21 /*-
      4  1.1  bjh21  * Copyright (c) 1990 The Regents of the University of California.
      5  1.1  bjh21  * All rights reserved.
      6  1.1  bjh21  *
      7  1.1  bjh21  * Redistribution and use in source and binary forms, with or without
      8  1.1  bjh21  * modification, are permitted provided that the following conditions
      9  1.1  bjh21  * are met:
     10  1.1  bjh21  * 1. Redistributions of source code must retain the above copyright
     11  1.1  bjh21  *    notice, this list of conditions and the following disclaimer.
     12  1.1  bjh21  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  bjh21  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  bjh21  *    documentation and/or other materials provided with the distribution.
     15  1.1  bjh21  * 3. All advertising materials mentioning features or use of this software
     16  1.1  bjh21  *    must display the following acknowledgement:
     17  1.1  bjh21  *	This product includes software developed by the University of
     18  1.1  bjh21  *	California, Berkeley and its contributors.
     19  1.1  bjh21  * 4. Neither the name of the University nor the names of its contributors
     20  1.1  bjh21  *    may be used to endorse or promote products derived from this software
     21  1.1  bjh21  *    without specific prior written permission.
     22  1.1  bjh21  *
     23  1.1  bjh21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24  1.1  bjh21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25  1.1  bjh21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  1.1  bjh21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27  1.1  bjh21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  1.1  bjh21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29  1.1  bjh21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  1.1  bjh21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31  1.1  bjh21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32  1.1  bjh21  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33  1.1  bjh21  * SUCH DAMAGE.
     34  1.1  bjh21  *
     35  1.1  bjh21  *	from: @(#)brk.s	5.2 (Berkeley) 12/17/90
     36  1.1  bjh21  */
     37  1.1  bjh21 
     38  1.1  bjh21 #include "SYS.h"
     39  1.1  bjh21 
     40  1.1  bjh21 	.globl	_end
     41  1.1  bjh21 	.globl	curbrk
     42  1.1  bjh21 
     43  1.1  bjh21 #ifdef WEAK_ALIAS
     44  1.1  bjh21 WEAK_ALIAS(brk, _brk)
     45  1.1  bjh21 #endif
     46  1.1  bjh21 
     47  1.1  bjh21 	.data
     48  1.1  bjh21 	.align	0
     49  1.1  bjh21 	.globl	_C_LABEL(__minbrk)
     50  1.1  bjh21 	.type	_C_LABEL(__minbrk),#object
     51  1.1  bjh21 _C_LABEL(__minbrk):
     52  1.1  bjh21 	.word	_end
     53  1.1  bjh21 
     54  1.1  bjh21 /*
     55  1.1  bjh21  * Change the data segment size
     56  1.1  bjh21  */
     57  1.1  bjh21 ENTRY(_brk)
     58  1.1  bjh21 #ifdef PIC
     59  1.1  bjh21 	/* Setup the GOT */
     60  1.1  bjh21 	ldr	r3, Lgot
     61  1.1  bjh21 	add	r3, pc, r3
     62  1.1  bjh21 L1:
     63  1.1  bjh21 	ldr	r1, Lminbrk
     64  1.1  bjh21 	ldr	r1, [r3, r1]
     65  1.1  bjh21 #else
     66  1.1  bjh21 	ldr	r1, Lminbrk
     67  1.1  bjh21 #endif
     68  1.1  bjh21 	/* Get the minimum allowable brk address */
     69  1.1  bjh21 	ldr	r1, [r1]
     70  1.1  bjh21 
     71  1.1  bjh21 	/*
     72  1.1  bjh21 	 * Valid the address specified and set to the minimum
     73  1.1  bjh21 	 * if the address is below minbrk.
     74  1.1  bjh21 	 */
     75  1.1  bjh21 	cmp	r0, r1
     76  1.1  bjh21 	movlt	r0, r1
     77  1.1  bjh21 	mov	r2, r0
     78  1.2  bjh21 	SYSTRAP(break)
     79  1.1  bjh21 	bcs	cerror
     80  1.1  bjh21 
     81  1.1  bjh21 #ifdef PIC
     82  1.1  bjh21 	ldr	r1, Lcurbrk
     83  1.1  bjh21 	ldr	r1, [r3, r1]
     84  1.1  bjh21 #else
     85  1.1  bjh21 	ldr	r1, Lcurbrk
     86  1.1  bjh21 #endif
     87  1.1  bjh21 	/* Store the new address in curbrk */
     88  1.1  bjh21 	str	r2, [r1]
     89  1.1  bjh21 
     90  1.1  bjh21 	/* Return 0 for success */
     91  1.1  bjh21 	mov	r0, #0x00000000
     92  1.1  bjh21 #ifdef __APCS_26__
     93  1.1  bjh21 	movs	r15, r14
     94  1.1  bjh21 #else
     95  1.1  bjh21 	mov	r15, r14
     96  1.1  bjh21 #endif
     97  1.1  bjh21 
     98  1.1  bjh21 	.align	0
     99  1.1  bjh21 #ifdef PIC
    100  1.1  bjh21 Lgot:
    101  1.1  bjh21 	.word	__GLOBAL_OFFSET_TABLE_+. - (L1+4)
    102  1.1  bjh21 #endif
    103  1.1  bjh21 Lminbrk:
    104  1.1  bjh21 	.word	_C_LABEL(__minbrk)
    105  1.1  bjh21 Lcurbrk:
    106  1.1  bjh21 	.word	curbrk
    107