source: rtems/c/src/lib/libbsp/powerpc/t32mppc/start/start.S @ 8d6ceb1

5
Last change on this file since 8d6ceb1 was 8d6ceb1, checked in by Sebastian Huber <sebastian.huber@…>, on 11/30/15 at 12:04:21

bsp/t32mppc: Add primitive NULL pointer protection

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Copyright (c) 2012, 2015 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#include <bspopts.h>
16
17#include <libcpu/powerpc-utility.h>
18
19#include <bsp/vectors.h>
20
21        .globl _start
22        .globl bsp_exc_vector_base
23
24        .section ".bsp_start_text", "ax"
25
26        /* Primitive NULL pointer protection */
27.rept 1024
28        sc
29.endr
30
31_start:
32        /* Enable time base */
33        li      r0, 0x4000
34        mtspr   HID0, r0
35
36        /* Initialize start stack */
37        LWI     r1, start_stack_end
38        subi    r1, r1, 16
39        li      r0, 0
40        stw     r0, 0(r1)
41
42        /* Copy fast text */
43        LWI     r3, bsp_section_fast_text_begin
44        LWI     r4, bsp_section_fast_text_load_begin
45        LWI     r5, bsp_section_fast_text_size
46        bl      copy
47
48        /* Copy read-only data */
49        LWI     r3, bsp_section_rodata_begin
50        LWI     r4, bsp_section_rodata_load_begin
51        LWI     r5, bsp_section_rodata_size
52        bl      copy
53
54        /* Copy fast data */
55        LWI     r3, bsp_section_fast_data_begin
56        LWI     r4, bsp_section_fast_data_load_begin
57        LWI     r5, bsp_section_fast_data_size
58        bl      copy
59
60        /* Copy data */
61        LWI     r3, bsp_section_data_begin
62        LWI     r4, bsp_section_data_load_begin
63        LWI     r5, bsp_section_data_size
64        bl      copy
65
66        /* Clear SBSS */
67        LWI     r3, bsp_section_sbss_begin
68        LWI     r4, bsp_section_sbss_size
69        bl      bsp_start_zero
70
71        /* Clear BSS */
72        LWI     r3, bsp_section_bss_begin
73        LWI     r4, bsp_section_bss_size
74        bl      bsp_start_zero
75
76        /* Set up EABI and SYSV environment */
77        bl      __eabi
78
79        /* Clear command line */
80        li      r3, 0
81
82        bl      boot_card
83
84twiddle:
85        b       twiddle
86
87copy:
88        cmpw    r3, r4
89        beqlr
90        b       memcpy
91
92        /* Exception vector prologues area */
93        .section ".bsp_start_text", "ax"
94        .align 4
95bsp_exc_vector_base:
96        stw     r1, ppc_exc_lock_crit@sdarel(r13)
97        stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
98        li      r4, -32767
99        b       ppc_exc_wrap_bookE_crit
100        stwu    r1, -EXC_GENERIC_SIZE(r1)
101        stw     r4, GPR4_OFFSET(r1)
102        li      r4, 2
103        b       ppc_exc_wrap_nopush_e500_mchk
104        stwu    r1, -EXC_GENERIC_SIZE(r1)
105        stw     r4, GPR4_OFFSET(r1)
106        li      r4, 3
107        b       ppc_exc_wrap_nopush_std
108        stwu    r1, -EXC_GENERIC_SIZE(r1)
109        stw     r4, GPR4_OFFSET(r1)
110        li      r4, 4
111        b       ppc_exc_wrap_nopush_std
112        stwu    r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
113        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
114        li      r4, -32763
115        b       ppc_exc_wrap_async_normal
116        stwu    r1, -EXC_GENERIC_SIZE(r1)
117        stw     r4, GPR4_OFFSET(r1)
118        li      r4, 6
119        b       ppc_exc_wrap_nopush_std
120        stwu    r1, -EXC_GENERIC_SIZE(r1)
121        stw     r4, GPR4_OFFSET(r1)
122        li      r4, 7
123        b       ppc_exc_wrap_nopush_std
124        stwu    r1, -EXC_GENERIC_SIZE(r1)
125        stw     r4, GPR4_OFFSET(r1)
126        li      r4, 8
127        b       ppc_exc_wrap_nopush_std
128        stwu    r1, -EXC_GENERIC_SIZE(r1)
129        stw     r4, GPR4_OFFSET(r1)
130        li      r4, 12
131        b       ppc_exc_wrap_nopush_std
132        stwu    r1, -EXC_GENERIC_SIZE(r1)
133        stw     r4, GPR4_OFFSET(r1)
134        li      r4, 24
135        b       ppc_exc_wrap_nopush_std
136        stwu    r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
137        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
138        li      r4, -32752
139        b       ppc_exc_wrap_async_normal
140        stwu    r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
141        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
142        li      r4, -32749
143        b       ppc_exc_wrap_async_normal
144        stw     r1, ppc_exc_lock_crit@sdarel(r13)
145        stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
146        li      r4, -32748
147        b       ppc_exc_wrap_bookE_crit
148        stwu    r1, -EXC_GENERIC_SIZE(r1)
149        stw     r4, GPR4_OFFSET(r1)
150        li      r4, 18
151        b       ppc_exc_wrap_nopush_std
152        stwu    r1, -EXC_GENERIC_SIZE(r1)
153        stw     r4, GPR4_OFFSET(r1)
154        li      r4, 17
155        b       ppc_exc_wrap_nopush_std
156        stwu    r1, -EXC_GENERIC_SIZE(r1)
157        stw     r4, GPR4_OFFSET(r1)
158        li      r4, 13
159        b       ppc_exc_wrap_nopush_bookE_crit
160        stwu    r1, -EXC_GENERIC_SIZE(r1)
161        stw     r4, GPR4_OFFSET(r1)
162        li      r4, 10
163        b       ppc_exc_wrap_nopush_std
164        stwu    r1, -EXC_GENERIC_SIZE(r1)
165        stw     r4, GPR4_OFFSET(r1)
166        li      r4, 25
167        b       ppc_exc_wrap_nopush_std
168        stwu    r1, -EXC_GENERIC_SIZE(r1)
169        stw     r4, GPR4_OFFSET(r1)
170        li      r4, 26
171        b       ppc_exc_wrap_nopush_std
172        stwu    r1, -EXC_GENERIC_SIZE(r1)
173        stw     r4, GPR4_OFFSET(r1)
174        li      r4, 15
175        b       ppc_exc_wrap_nopush_std
176
177        /* Start stack area */
178        .section ".bsp_rwextra", "aw", @nobits
179        .align 4
180        .space 4096
181start_stack_end:
Note: See TracBrowser for help on using the repository browser.