]> rtime.felk.cvut.cz Git - arc.git/blob - arch/ppc/mpc55xx/scripts/linkscript_gcc.ldf
Initial commit.
[arc.git] / arch / ppc / mpc55xx / scripts / linkscript_gcc.ldf
1 \r
2 /* For more info on sections check the E500 freescale doc: E500ABIUG.pdf\r
3  *\r
4  *\r
5  */\r
6 OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")\r
7 OUTPUT_ARCH(powerpc)\r
8 ENTRY(_start)\r
9 \r
10 \r
11 MEMORY\r
12 {\r
13         rcw(R)   : ORIGIN = 0x00000000, LENGTH = 0x8\r
14     flash(R) : ORIGIN = 0x00000008, LENGTH = 0x100000\r
15     /* 5516S, 48K\r
16      * 5517S,5516G,5516E, 64K RAM\r
17      * 5517G,E , 80K RAM\r
18      */\r
19     ram(RW)  : ORIGIN = 0x40000000, LENGTH = 0x100000\r
20 }\r
21 \r
22 SECTIONS\r
23 {\r
24         .rcw : { *(.rcw) }> rcw\r
25 \r
26     .text :\r
27         {\r
28         *(.text .text.* .init .fini* .eini* .gnu.linkonce* .gnu.warning)\r
29         } > flash\r
30 \r
31         .fls_rom : {\r
32         __FLS_ERASE_ROM__ = .;\r
33         *(.fls_erase);\r
34         __FLS_WRITE_ROM__ = .;\r
35         *(.fls_write);\r
36         __FLS_END_ROM__ = .;\r
37         } > flash\r
38 \r
39 /* mpc5554, align 64K. mpc5516, 4k */\r
40     .exception_tbl ALIGN(0x10000) :\r
41     {\r
42       *(.isrvectbl)\r
43     } > flash\r
44 \r
45         /* Read-only data section. */\r
46         .rodata :       { *(.rodata .rodata.* .gnu.linkonce.r.*) } > flash\r
47 \r
48         /* initialized read-only small data section. */\r
49         .sdata2 :       {\r
50                 _SDA2_BASE_ = .; /* r2 */\r
51                 *(.sdata2 .sdata2.* .gnu.linkonce.s2.*);\r
52                 *(PPC.EMB.sdata2 .PPC.EMB.sbss2)\r
53         } > flash\r
54 \r
55 \r
56         /* uninitialized read-only small data section. */\r
57         .sbss2 : {\r
58                 *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*);\r
59                 __TEXT_END = .;\r
60                 . = . + ALIGN(8);\r
61                 __DATA_ROM = .;\r
62         } > flash\r
63 \r
64         .data : AT(ALIGN(LOADADDR(.sbss2)+SIZEOF(.sbss2),4)) {\r
65                 __DATA_RAM = .; *(.data .data.* .gnu.linkonce.d.* .gnu.linkonce.r.* .eh_frame)\r
66         } > ram\r
67 \r
68         .sdata : AT(ALIGN(LOADADDR(.data)+SIZEOF(.data),4)) {\r
69                 __SDATA_START__ = .;\r
70                 _SDA_BASE_ = .;         /* r13 */\r
71                 *(.sdata .sdata.* .gnu.linkonce.s.*)\r
72                 *(PPC.EMB.sdata2 .PPC.EMB.sbss2)\r
73                 . = . + ALIGN(8);\r
74                 __DATA_END = .;\r
75         } > ram\r
76 \r
77     .sbss :\r
78         {\r
79                 __SBSS_START__ = .;\r
80                 *(.sbss .sbss.* .scommon .gnu.linkonce.sb.* .t32_outport);\r
81                 __SBSS_END__ = .;\r
82         } > ram\r
83 \r
84     .got2 ALIGN(0x10): {. = . + ALIGN(16);*(.got2);     . = . + ALIGN(8); } > ram\r
85     .fixup : { . = . + ALIGN(16);*(.fixup);     . = . + ALIGN(8); }             > ram\r
86         .t32_outport ALIGN(0x10): { *(.t32_outport); }                  > ram\r
87         .got : AT(ALIGN(LOADADDR(.sdata)+SIZEOF(.sdata),4)) { *(.got.plt) *(.got) } > ram\r
88         .bss : { *(.bss .bss.* COMMON .gnu.linkonce.b.*);__BSS_END      = .; }  > ram\r
89         .init_stack ALIGN(16) (NOLOAD) : {      __SP_END        = .;. = . + 3000;       __SP_INIT       = .; } > ram\r
90         /* Fls RAM section */\r
91         .fls_ram ALIGN(16) (NOLOAD) : {\r
92                 __FLS_ERASE_RAM__ = .;\r
93                 . = . + SIZEOF(.fls_rom);\r
94         } > ram\r
95 \r
96   .ctors          :\r
97   {\r
98     KEEP (*(SORT(.ctors.*)))\r
99   }\r
100 \r
101         .uninit ALIGN(0x10): { *(.winidea_port .ramlog) ; }                     > ram\r
102 \r
103         __FLS_SIZE__ = SIZEOF(.fls_rom);\r
104         __FLS_WRITE_RAM__ =  __FLS_ERASE_RAM__ + (__FLS_WRITE_ROM__ - __FLS_ERASE_ROM__);\r
105 \r
106    /* Stabs debugging sections.  */\r
107   .stab          0 : { *(.stab) }\r
108   .stabstr       0 : { *(.stabstr) }\r
109   .stab.excl     0 : { *(.stab.excl) }\r
110   .stab.exclstr  0 : { *(.stab.exclstr) }\r
111   .stab.index    0 : { *(.stab.index) }\r
112   .stab.indexstr 0 : { *(.stab.indexstr) }\r
113   .comment       0 : { *(.comment) }\r
114   /* DWARF debug sections.\r
115      Symbols in the DWARF debugging sections are relative to the beginning\r
116      of the section so we begin them at 0.  */\r
117   /* DWARF 1 */\r
118   .debug          0 : { *(.debug) }\r
119   .line           0 : { *(.line) }\r
120   /* GNU DWARF 1 extensions */\r
121   .debug_srcinfo  0 : { *(.debug_srcinfo) }\r
122   .debug_sfnames  0 : { *(.debug_sfnames) }\r
123   /* DWARF 1.1 and DWARF 2 */\r
124   .debug_aranges  0 : { *(.debug_aranges) }\r
125   .debug_pubnames 0 : { *(.debug_pubnames) }\r
126   /* DWARF 2 */\r
127   .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }\r
128   .debug_abbrev   0 : { *(.debug_abbrev) }\r
129   .debug_line     0 : { *(.debug_line) }\r
130   .debug_frame    0 : { *(.debug_frame) }\r
131   .debug_str      0 : { *(.debug_str) }\r
132   .debug_loc      0 : { *(.debug_loc) }\r
133   .debug_macinfo  0 : { *(.debug_macinfo) }\r
134   /* SGI/MIPS DWARF 2 extensions */\r
135   .debug_weaknames 0 : { *(.debug_weaknames) }\r
136   .debug_funcnames 0 : { *(.debug_funcnames) }\r
137   .debug_typenames 0 : { *(.debug_typenames) }\r
138   .debug_varnames  0 : { *(.debug_varnames) }\r
139 }\r
140 \r
141 __TEXT_START            = ADDR(.text);\r
142 __RAM_START             = ADDR(.sdata);\r
143 \r
144 __DATA_RAM              = ADDR(.data);\r
145 /*__DATA_END            = ADDR(.sdata)+SIZEOF(.sdata);*/\r
146 /*__BSS_START           = ADDR(.sbss);*/\r
147 __BSS_START             = ADDR(.sbss);\r
148 \r
149 /* _SDA_BASE_ and _SDA2_BASE_ is defined in e500 ABI\r
150  * Some of the symbols below is used by eabi() that does interesting.\r
151  * Can't get rid of it even with no-eabi option\r
152  */\r
153 \r
154 /* __SBSS_END__                 = ADDR(.sbss) + SIZEOF(.sbss); */\r
155  __SDATA2_START__       = ADDR(.sdata2);\r
156  __SBSS2_END__          = ADDR(.sbss2) + SIZEOF(.sbss2);\r
157 __GOT_START__           = ADDR(.got);\r
158 __GOT_END__                     = ADDR(.got) + SIZEOF(.got);\r
159 __GOT2_START__          = ADDR(.got2);\r
160 __GOT2_END__            = ADDR(.got2) + SIZEOF(.got2);\r
161 __FIXUP_START__         = ADDR(.fixup);\r
162 __FIXUP_END__           = ADDR(.fixup) + SIZEOF(.fixup);\r
163 \r
164 __EXCEPT_START__        = 0x0;\r
165 __EXCEPT_END__          = 0x0;\r
166 \r
167 \r
168 \r
169 \r
170 \r
171 \r
172 \r
173 \r
174 \r
175 \r
176 \r
177 \r
178 \r
179 \r
180 \r
181 \r
182 \r
183 \r
184 \r
185 \r
186 \r
187 \r
188 \r
189 \r
190 \r