|
2
|
1 //============================================================================= |
|
|
2 // |
|
|
3 // MLT linker script for ARM |
|
|
4 // adapted from packages/hal/arm/pid/v1_1/src/pid.ld |
|
|
5 // |
|
|
6 //============================================================================= |
|
|
7 //####COPYRIGHTBEGIN#### |
|
|
8 // |
|
|
9 // ------------------------------------------- |
|
|
10 // The contents of this file are subject to the Cygnus eCos Public License |
|
|
11 // Version 1.0 (the "License"); you may not use this file except in |
|
|
12 // compliance with the License. You may obtain a copy of the License at |
|
|
13 // http://sourceware.cygnus.com/ecos |
|
|
14 // |
|
|
15 // Software distributed under the License is distributed on an "AS IS" |
|
|
16 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
|
17 // License for the specific language governing rights and limitations under |
|
|
18 // the License. |
|
|
19 // |
|
|
20 // The Original Code is eCos - Embedded Cygnus Operating System, released |
|
|
21 // September 30, 1998. |
|
|
22 // |
|
|
23 // The Initial Developer of the Original Code is Cygnus. Portions created |
|
|
24 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. |
|
|
25 // ------------------------------------------- |
|
|
26 // |
|
|
27 //####COPYRIGHTEND#### |
|
|
28 //============================================================================= |
|
|
29 |
|
|
30 #include <pkgconf/system.h> |
|
|
31 STARTUP(vectors.o) |
|
|
32 ENTRY(reset_vector) |
|
|
33 #ifdef EXTRAS |
|
|
34 INPUT(extras.o) |
|
|
35 #endif |
|
|
36 GROUP(libtarget.a libgcc.a) |
|
|
37 |
|
|
38 #define ALIGN_LMA 4 |
|
|
39 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1)) |
|
|
40 #define LMA_EQ_VMA |
|
|
41 #define FORCE_OUTPUT . = . |
|
|
42 |
|
|
43 #define SECTIONS_BEGIN \ |
|
|
44 /* Debug information */ \ |
|
|
45 .debug_aranges 0 : { *(.debug_aranges) } \ |
|
|
46 .debug_pubnames 0 : { *(.debug_pubnames) } \ |
|
|
47 .debug_info 0 : { *(.debug_info) } \ |
|
|
48 .debug_abbrev 0 : { *(.debug_abbrev) } \ |
|
|
49 .debug_line 0 : { *(.debug_line) } \ |
|
|
50 .debug_frame 0 : { *(.debug_frame) } \ |
|
|
51 .debug_str 0 : { *(.debug_str) } \ |
|
|
52 .debug_loc 0 : { *(.debug_loc) } \ |
|
|
53 .debug_macinfo 0 : { *(.debug_macinfo) } |
|
|
54 |
|
|
55 #define SECTION_rom_vectors(_region_, _vma_, _lma_) \ |
|
|
56 .rom_vectors _vma_ : _lma_ \ |
|
|
57 { FORCE_OUTPUT; KEEP (*(.vectors)) } \ |
|
|
58 > _region_ |
|
|
59 |
|
|
60 #define SECTION_text(_region_, _vma_, _lma_) \ |
|
|
61 .text _vma_ : _lma_ \ |
|
|
62 { _stext = ABSOLUTE(.); \ |
|
|
63 PROVIDE (__stext = ABSOLUTE(.)); \ |
|
|
64 *(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) } \ |
|
|
65 > _region_ \ |
|
|
66 __etext = .; PROVIDE (__etext = .); |
|
|
67 |
|
|
68 #define SECTION_fini(_region_, _vma_, _lma_) \ |
|
|
69 .fini _vma_ : _lma_ \ |
|
|
70 { FORCE_OUTPUT; *(.fini) } \ |
|
|
71 > _region_ |
|
|
72 |
|
|
73 #define SECTION_rodata(_region_, _vma_, _lma_) \ |
|
|
74 .rodata _vma_ : _lma_ \ |
|
|
75 { FORCE_OUTPUT; *(.rodata*) } \ |
|
|
76 > _region_ |
|
|
77 |
|
|
78 #define SECTION_rodata1(_region_, _vma_, _lma_) \ |
|
|
79 .rodata1 _vma_ : _lma_ \ |
|
|
80 { FORCE_OUTPUT; *(.rodata1) } \ |
|
|
81 > _region_ |
|
|
82 |
|
|
83 #define SECTION_fixup(_region_, _vma_, _lma_) \ |
|
|
84 .fixup _vma_ : _lma_ \ |
|
|
85 { FORCE_OUTPUT; *(.fixup) } \ |
|
|
86 > _region_ |
|
|
87 |
|
|
88 #define SECTION_gcc_except_table(_region_, _vma_, _lma_) \ |
|
|
89 .gcc_except_table _vma_ : _lma_ \ |
|
|
90 { FORCE_OUTPUT; *(.gcc_except_table) } \ |
|
|
91 > _region_ |
|
|
92 |
|
|
93 #define SECTION_data(_region_, _vma_, _lma_) \ |
|
|
94 .data _vma_ : _lma_ \ |
|
|
95 { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) \ |
|
|
96 _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \ |
|
|
97 _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \ |
|
|
98 . = ALIGN (4); \ |
|
|
99 __DEVTAB__ = ABSOLUTE (.); KEEP (*(SORT (.devtab*))) __DEVTAB_END__ = ABSOLUTE (.); \ |
|
|
100 __CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) __CTOR_END__ = ABSOLUTE (.); \ |
|
|
101 __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \ |
|
|
102 *(.dynamic) *(.sdata*) *(.sbss*) } \ |
|
|
103 > _region_ \ |
|
|
104 __rom_data_start = LOADADDR (.data); \ |
|
|
105 __ram_data_end = .; PROVIDE (__ram_data_end = .); _edata = .; PROVIDE (edata = .); \ |
|
|
106 PROVIDE (__rom_data_end = LOADADDR (.data) + SIZEOF(.data)); |
|
|
107 |
|
|
108 #define SECTION_bss(_region_, _vma_, _lma_) \ |
|
|
109 .bss _vma_ : _lma_ \ |
|
|
110 { __bss_start = ABSOLUTE (.); \ |
|
|
111 *(.scommon) *(.dynbss) *(.bss) *(COMMON) \ |
|
|
112 __bss_end = ABSOLUTE (.); } \ |
|
|
113 > _region_ |
|
|
114 |
|
|
115 #define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); |
|
|
116 |
|
|
117 #include <pkgconf/hal_arm.h> |
|
|
118 #include CYGHWR_MEMORY_LAYOUT_LDI |