Back to home page

LXR

 
 

    


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 }