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