1 | ############################################################################## |
---|
2 | # crt0.S -- CRX default start-up routine # |
---|
3 | # # |
---|
4 | # Copyright (c) 2004 National Semiconductor Corporation # |
---|
5 | # # |
---|
6 | # The authors hereby grant permission to use, copy, modify, distribute, # |
---|
7 | # and license this software and its documentation for any purpose, provided # |
---|
8 | # that existing copyright notices are retained in all copies and that this # |
---|
9 | # notice is included verbatim in any distributions. No written agreement, # |
---|
10 | # license, or royalty fee is required for any of the authorized uses. # |
---|
11 | # Modifications to this software may be copyrighted by their authors # |
---|
12 | # and need not follow the licensing terms described here, provided that # |
---|
13 | # the new terms are clearly indicated on the first page of each file where # |
---|
14 | # they apply. # |
---|
15 | # # |
---|
16 | # This is the start routine of your CRX program. # |
---|
17 | # It is linked with your application automatically. You can use # |
---|
18 | # this routine as a template and modify it to your needs, yet this # |
---|
19 | # file must be supplied for the compiler. # |
---|
20 | # It is assumed that the following symbols are defined in your linker # |
---|
21 | # script: __STACK_START, __ISTACK_START, __DATA_START, __DATA_END, # |
---|
22 | # __DATA_IMAGE_START, __BSS_START, __BSS_END. # |
---|
23 | ############################################################################## |
---|
24 | |
---|
25 | .text |
---|
26 | .align 4 |
---|
27 | .globl _main |
---|
28 | .globl _start |
---|
29 | .globl _atexit |
---|
30 | .globl _exit |
---|
31 | .globl __dispatch_table |
---|
32 | |
---|
33 | _start: |
---|
34 | |
---|
35 | #----------------------------------------------------------------------------# |
---|
36 | # Initialize the stack pointers. The constants __STACK_START and # |
---|
37 | # __ISTACK_START should be defined in the linker script. # |
---|
38 | |
---|
39 | movd $__STACK_START, sp |
---|
40 | movd $__ISTACK_START, r0 |
---|
41 | mtpr r0, isp |
---|
42 | |
---|
43 | #----------------------------------------------------------------------------# |
---|
44 | # Initialize the default sections according to the linker script. # |
---|
45 | |
---|
46 | movd $__DATA_END, r4 |
---|
47 | subd $__DATA_START, r4 |
---|
48 | movd $__DATA_START, r2 |
---|
49 | movd $__DATA_IMAGE_START, r3 |
---|
50 | bal ra, _memcpy |
---|
51 | movd $__BSS_END, r4 |
---|
52 | subd $__BSS_START, r4 |
---|
53 | movd $__BSS_START, r2 |
---|
54 | movd $0, r3 |
---|
55 | bal ra, _memset |
---|
56 | |
---|
57 | #----------------------------------------------------------------------------# |
---|
58 | # Initialize the intbase (pointer to the dispatch table). # |
---|
59 | |
---|
60 | movd $__dispatch_table, r0 |
---|
61 | mtpr r0, intbase |
---|
62 | |
---|
63 | #----------------------------------------------------------------------------# |
---|
64 | # Handle global and static constructurs execution and setup # |
---|
65 | # destructors to be called from exit. # |
---|
66 | bal ra, _init |
---|
67 | movd $_fini, r2 |
---|
68 | bal ra, _atexit |
---|
69 | |
---|
70 | #----------------------------------------------------------------------------# |
---|
71 | # Here you may add initializations that are specific to your # |
---|
72 | # environment. For example: # |
---|
73 | # 1. Configure wait states and other BIU parameters in order to get # |
---|
74 | # the best performance out of your target (see the specification # |
---|
75 | # document). # |
---|
76 | # 2. Enable maskable interrupts that should be enabled when your # |
---|
77 | # program starts to execute. # |
---|
78 | |
---|
79 | |
---|
80 | #----------------------------------------------------------------------------# |
---|
81 | # Jump to the main function in your application. # |
---|
82 | |
---|
83 | bal ra, _main |
---|
84 | |
---|
85 | #----------------------------------------------------------------------------# |
---|
86 | # Upon returning from the main function (if it isn't an infinite loop), # |
---|
87 | # jump to the exit function. The exit function is located in the # |
---|
88 | # library 'libc.a'. # |
---|
89 | |
---|
90 | movd r0, r2 # _main return value is passed as a |
---|
91 | # parameter to exit. |
---|
92 | br _exit # returns control to the debugger. |
---|
93 | |
---|