Warning, /bsps/powerpc/virtex4/start/linkcmds is written in an unsupported language. File is not indexed.
0001 /*
0002 * This file contains directives for the GNU linker which are specific to the
0003 * Virtex 4 PPC 405. No assumptions are made on the firmware in the FPGA.
0004 * This file is intended to be used together with start.S to generate
0005 * downloadable code.
0006 */
0007
0008 OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
0009 OUTPUT_ARCH(powerpc)
0010
0011 STARTUP(start.o)
0012 ENTRY(download_entry)
0013 EXTERN(download_entry)
0014 EXTERN(__vectors)
0015
0016 MsgAreaSize = DEFINED(MsgAreaSize) ? MsgAreaSize : 1M;
0017 RamBase = DEFINED(RamBase) ? RamBase : 0x0;
0018 RamSize = DEFINED(RamSize) ? RamSize : 128M - MsgAreaSize;
0019 RamEnd = RamBase + RamSize;
0020 HeapSize = DEFINED(HeapSize) ? HeapSize : 0; /* 0=Use def */
0021
0022
0023 MEMORY
0024 {
0025 VECTORS : ORIGIN = 0x00000000, LENGTH = 12K
0026 RAM : ORIGIN = 0x00003000, LENGTH = 128M - 12K
0027 }
0028
0029
0030 SECTIONS
0031 {
0032 bsp_exc_vector_base = 0x100;
0033 __exeentry = download_entry;
0034 __exestart = bsp_exc_vector_base;
0035 .vectors bsp_exc_vector_base : { *(.vectors) } > VECTORS
0036
0037 /* Read-only sections, merged into text segment: */
0038 .interp : { *(.interp) } > RAM
0039 .hash : { *(.hash) } > RAM
0040 .dynsym : { *(.dynsym) } > RAM
0041 .dynstr : { *(.dynstr) } > RAM
0042 .gnu.version : { *(.gnu.version) } > RAM
0043 .gnu.version_d : { *(.gnu.version_d) } > RAM
0044 .gnu.version_r : { *(.gnu.version_r) } > RAM
0045 .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) } > RAM
0046 .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) } > RAM
0047 .rela.rodata : { *(.rela.rodata*) *(.rela.gnu.linkonce.r*) } > RAM
0048 .rela.got : { *(.rela.got) } > RAM
0049 .rela.got1 : { *(.rela.got1) } > RAM
0050 .rela.got2 : { *(.rela.got2) } > RAM
0051 .rela.ctors : { *(.rela.ctors) } > RAM
0052 .rela.dtors : { *(.rela.dtors) } > RAM
0053 .rela.init : { *(.rela.init) } > RAM
0054 .rela.fini : { *(.rela.fini) } > RAM
0055 .rela.bss : { *(.rela.bss) } > RAM
0056 .rela.plt : { *(.rela.plt) } > RAM
0057 .rela.sdata : { *(.rela.sdata) } > RAM
0058 .rela.sbss : { *(.rela.sbss) } > RAM
0059 .rela.sdata2 : { *(.rela.sdata2) } > RAM
0060 .rela.sbss2 : { *(.rela.sbss2) } > RAM
0061 .rela.dyn : { *(.rela.dyn) } > RAM
0062
0063 /* Initialization code */
0064 .init : { PROVIDE (_init = .);
0065 *ecrti.o(.init)
0066 KEEP(*(.init))
0067 *ecrtn.o(.init)
0068 } > RAM
0069
0070 .text : { *(.entry)
0071 *(.text)
0072 *(.text.*)
0073
0074 /* Special FreeBSD sysctl sections */
0075 . = ALIGN (16);
0076 __start_set_sysctl_set = .;
0077 *(set_sysctl_*);
0078 __stop_set_sysctl_set = ABSOLUTE(.);
0079 *(set_domain_*);
0080 *(set_pseudo_*);
0081
0082 /* .gnu.warning sections are handled specially by elf32.em
0083 */
0084 *(.gnu.warning)
0085 *(.gnu.linkonce.t*)
0086 } > RAM
0087
0088 /* Finalization code */
0089 .fini : { PROVIDE (_fini = .);
0090 *ecrti.o(.fini)
0091 KEEP(*(.fini))
0092 *ecrtn.o(.fini)
0093 } > RAM
0094
0095 /* Miscellaneous read-only data */
0096 .rodata : { *(.rodata.* .gnu.linkonce.r*) KEEP (*(SORT(.rtemsroset.*))) } > RAM
0097 .rodata1 : { *(.rodata1) } > RAM
0098
0099 .tdata : {
0100 _TLS_Data_begin = .;
0101 *(.tdata .tdata.* .gnu.linkonce.td.*)
0102 _TLS_Data_end = .;
0103 } >RAM
0104
0105 .tbss : {
0106 _TLS_BSS_begin = .;
0107 *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
0108 _TLS_BSS_end = .;
0109 } >RAM
0110
0111 _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
0112 _TLS_Data_begin = _TLS_Data_size != 0 ? _TLS_Data_begin : _TLS_BSS_begin;
0113 _TLS_Data_end = _TLS_Data_size != 0 ? _TLS_Data_end : _TLS_BSS_begin;
0114 _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
0115 _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
0116 _TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss));
0117
0118 /* Initialised small data addressed as offsets from r2 */
0119 .sdata2 : { PROVIDE (_SDA2_BASE_ = 32768); *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) } > RAM
0120
0121 /* Zeroed small data addressed as offsets from r2 */
0122 .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
0123
0124 /* Avoid empty sdata2/sbss2 area: __eabi would not set up
0125 * r2 which may be important if run-time loading is used
0126 */
0127 . += 1;
0128
0129 PROVIDE (__SBSS2_END__ = .);
0130 } > RAM
0131
0132 /* Exception frame info */
0133 .eh_frame : { *(.eh_frame .eh_frame.*) } > RAM
0134 .eh_frame_hdr : { *(.eh_frame_hdr) } > RAM
0135
0136 /* Declares where the .text section ends */
0137 _etext = .;
0138 PROVIDE (etext = .);
0139
0140 /* Initialized R/W Data section goes in RAM */
0141 .data : { PROVIDE(__DATA_START__ = ABSOLUTE(.) );
0142 *(.data)
0143 *(.data.*)
0144 KEEP (*(SORT(.rtemsrwset.*)))
0145 *(.gnu.linkonce.d*)
0146 } > RAM
0147
0148 .data1 : { *(.data1) } > RAM
0149
0150 PROVIDE (__EXCEPT_START__ = .);
0151 .gcc_except_table : { *(.gcc_except_table .gcc_except_table.*) } > RAM
0152 PROVIDE (__EXCEPT_END__ = .);
0153
0154 .got1 : { *(.got1) } > RAM
0155
0156 /* Put .ctors and .dtors next to the .got2 section, so that the pointers
0157 * get relocated with -mrelocatable. Also put in the .fixup pointers.
0158 * The current compiler no longer needs this, but keep it around for 2.7.2.
0159 */
0160 PROVIDE (_GOT2_START_ = .);
0161 .got2 : { *(.got2) } > RAM
0162
0163 .dynamic : { *(.dynamic) } > RAM
0164
0165 .ctors : {
0166 KEEP (*ecrti.o(.ctors))
0167 KEEP (*crtbegin.o(.ctors))
0168 KEEP (*crtbegin?.o(.ctors))
0169 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *ecrtn.o) .ctors))
0170 KEEP (*(SORT(.ctors.*)))
0171 KEEP (*(.ctors))
0172 } > RAM
0173
0174 .dtors : {
0175 KEEP (*ecrti.o(.dtors))
0176 KEEP (*crtbegin.o(.dtors))
0177 KEEP (*crtbegin?.o(.dtors))
0178 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *ecrtn.o) .dtors))
0179 KEEP (*(SORT(.dtors.*)))
0180 KEEP (*(.dtors))
0181 } > RAM
0182
0183 PROVIDE (_FIXUP_START_ = .);
0184 .fixup : { *(.fixup) } > RAM
0185 PROVIDE (_FIXUP_END_ = .);
0186
0187 PROVIDE (_GOT2_END_ = .);
0188
0189 PROVIDE (_GOT_START_ = .);
0190 .got : { __got_start = .;
0191 *(.got)
0192 } > RAM
0193
0194 .got.plt : { *(.got.plt) } > RAM
0195 PROVIDE (_GOT_END_ = .);
0196
0197 .jcr : { KEEP (*(.jcr)) } > RAM
0198
0199 /* We want the small data sections together, so single-instruction offsets
0200 * can access them all, and initialized data all before uninitialized, so
0201 * we can shorten the on-disk segment size.
0202 */
0203 /* Initialised small data addressed as offsets from r13 */
0204 .sdata : {
0205 bsp_section_sdata_begin = .;
0206 PROVIDE (_SDA_BASE_ = 32768); *(.sdata* .gnu.linkonce.s.*);
0207 bsp_section_sdata_end = .;
0208 } > RAM
0209
0210 _edata = .;
0211 PROVIDE (edata = .);
0212
0213 /* Zeroed small data addressed as offsets from r13 */
0214 .sbss : { PROVIDE (__sbss_start = .);
0215 bsp_section_sbss_begin = .;
0216 *(.dynsbss)
0217 *(.sbss*)
0218 *(.gnu.linkonce.sb.*)
0219 *(.scommon)
0220
0221 /* Avoid empty sdata/sbss area: __eabi would not set up
0222 * r13, which may be important if run-time loading is used
0223 */
0224 . += 1;
0225
0226 PROVIDE (__SBSS_END__ = .);
0227 PROVIDE (__sbss_end = .);
0228 bsp_section_sbss_end = .;
0229 bsp_section_sdata_libdl_begin = .;
0230 . = DEFINED(bsp_section_small_data_area_size) ?
0231 bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
0232 bsp_section_sdata_libdl_end = .;
0233 } > RAM
0234
0235 .plt : { *(.plt) } > RAM
0236 .iplt : { *(.iplt) } > RAM
0237
0238 /* Zeroed large data */
0239 .bss : { PROVIDE (__bss_start = .);
0240 *(.dynbss)
0241 *(.bss)
0242 *(.bss.*)
0243 *(.gnu.linkonce.b*)
0244 *(COMMON)
0245
0246 PROVIDE (__bss_end = ALIGN(4));
0247 __bss_size = __bss_end - __bss_start;
0248 } > RAM
0249
0250 __exeend = ALIGN(4);
0251 __rtems_end = .;
0252 . = ALIGN(0x10); /* Align to a cache-line boundary */
0253 PROVIDE(__bsp_ram_start = .);
0254
0255 .noinit (NOLOAD) : {
0256 *(SORT_BY_NAME (SORT_BY_ALIGNMENT (.noinit*)))
0257 } >RAM
0258
0259 .rtemsstack (NOLOAD) : {
0260 *(SORT(.rtemsstack.*))
0261 } >RAM
0262
0263 WorkAreaBase = .;
0264
0265 /* The heap comes after the work space */
0266
0267 . = RamBase + RamSize;
0268 PROVIDE(__bsp_ram_end = .);
0269
0270 /* Message area for capturing early printk output */
0271 /* Placed here to be easily findable with a debugger */
0272 MsgAreaBase = .;
0273 . += MsgAreaSize;
0274
0275 __phy_ram_end = .; /* True end of physical memory */
0276
0277 /DISCARD/ :
0278 {
0279 *(.comment)
0280 }
0281
0282 /* Some configuration constants: Not clear why they're placed here */
0283 __dccr = 0x80000000;
0284 __iccr = 0x80000000;
0285 __sgr = 0x7fffffff;
0286 __vectors = 0;
0287 }