]> rtime.felk.cvut.cz Git - arc.git/blob - arch/ppc/crt0.S
Merge maek compiler warning removal.
[arc.git] / arch / ppc / crt0.S
1 #include "asm_ppc.h"\r
2 \r
3 .section ".rcw","ax"\r
4 .global _resetconfiguration\r
5 _resetconfiguration:\r
6         .byte  0x00   #no watchdog\r
7         .byte  0x5A   #Boot identifier\r
8         .byte  0x00\r
9         .byte  0x00\r
10         .long _start\r
11 \r
12 \r
13         .text\r
14         .align          4\r
15 \r
16         .globl  _start\r
17         .type   _start,@function\r
18 \r
19         // Good information about the E500 is freescale doc: E500ABIUG.pdf\r
20 _start:\r
21         // Set up the reserved registers in EABI: r1,r2 and r13\r
22 \r
23         // r1, stack pointer\r
24         lis     r1,__SP_INIT@h\r
25         ori     r1,r1,__SP_INIT@l\r
26 \r
27         // r13, base of .sdata\r
28         lis     r13,_SDA_BASE_@h\r
29         ori     r13,r13,_SDA_BASE_@l\r
30 \r
31         // r2, base of .sdata2 and .sbss2\r
32         lis     r2,_SDA2_BASE_@h\r
33         ori     r2,r2,_SDA2_BASE_@l\r
34 \r
35         // make space for initial backchain..\r
36         subi    r1,r1,16\r
37 \r
38         // Copy initialized data from ROM to RAM\r
39         lis             r3,__DATA_ROM@h\r
40         ori             r3,r3,__DATA_ROM@l\r
41         lis             r4,__DATA_RAM@h\r
42         ori             r4,r4,__DATA_RAM@l\r
43         lis             r5,__DATA_END@h\r
44         ori             r5,r5,__DATA_END@l\r
45 \r
46         cmplw   r3,r4\r
47         beq             skip_data\r
48         cmplw   r4,r5\r
49         beq             skip_data\r
50         subi    r3,r3,1\r
51         subi    r4,r4,1\r
52 1:\r
53         lbzu    r6,1(r3)\r
54         stbu    r6,1(r4)\r
55         cmplw   r4,r5\r
56         bne+    1b\r
57 skip_data:\r
58 \r
59         # Clear uninitialized data( holds both bss and sbss )\r
60         lis             r3,__BSS_START@h\r
61         ori             r3,r3,__BSS_START@l\r
62         lis             r4,__BSS_END@h\r
63         ori             r4,r4,__BSS_END@l\r
64         cmplw   r3,r4\r
65         beq             3f\r
66         li              r0,0\r
67         subi    r3,r3,1\r
68 2:\r
69         stbu    r0,1(r3)\r
70         cmplw   r3,r4\r
71         bne+    2b\r
72 3:\r
73 \r
74         # Call main() with argc set to 1 and argv ignored\r
75         li      r3,1\r
76         bl      main\r
77 \r
78         # Call exit() with the return value from main() as argument\r
79         b       exit\r
80 \r
81         .globl  _exit\r
82 _exit:\r
83         b       _exit\r
84 \r
85 \r
86         .end\r