Home | History | Annotate | Download | only in scripttempl
      1 # Copyright (C) 2014 Free Software Foundation, Inc.
      2 # 
      3 # Copying and distribution of this file, with or without modification,
      4 # are permitted in any medium without royalty provided the copyright
      5 # notice and this notice are preserved.
      6 
      7 cat << EOF
      8 /* Copyright (C) 2014 Free Software Foundation, Inc.
      9 
     10    Copying and distribution of this script, with or without modification,
     11    are permitted in any medium without royalty provided the copyright
     12    notice and this notice are preserved.  */
     13 
     14 OUTPUT_FORMAT("elf32-v850", "elf32-v850",
     15 	      "elf32-v850")
     16 OUTPUT_ARCH(v850)
     17 ${RELOCATING+ENTRY(_start)}
     18 SEARCH_DIR(.);
     19 EXTERN(__ctbp __ep __gp);
     20 SECTIONS
     21 {
     22   /* This saves a little space in the ELF file, since the zda starts
     23      at a higher location that the ELF headers take up.  */
     24 
     25   .zdata ${ZDATA_START_ADDR} :
     26   {
     27 	*(.zdata)
     28 	*(.zbss)
     29 	*(reszdata)
     30 	*(.zcommon)
     31   }
     32 
     33   /* This is the read only part of the zero data area.
     34      Having it as a seperate section prevents its
     35      attributes from being inherited by the zdata
     36      section.  Specifically it prevents the zdata
     37      section from being marked READONLY.  */
     38 
     39   .rozdata ${ROZDATA_START_ADDR} :
     40   {
     41 	*(.rozdata)
     42 	*(romzdata)
     43 	*(romzbss)
     44   }
     45 
     46   /* Read-only sections, merged into text segment.  */
     47   . = ${TEXT_START_ADDR};
     48   .interp	: { *(.interp) }
     49   .hash		: { *(.hash) }
     50   .dynsym	: { *(.dynsym) }
     51   .dynstr	: { *(.dynstr) }
     52   .rel.text	: { *(.rel.text) }
     53   .rela.text	: { *(.rela.text) }
     54   .rel.data	: { *(.rel.data) }
     55   .rela.data	: { *(.rela.data) }
     56   .rel.rodata	: { *(.rel.rodata) }
     57   .rela.rodata	: { *(.rela.rodata) }
     58   .rel.gcc_except_table : { *(.rel.gcc_except_table) }
     59   .rela.gcc_except_table : { *(.rela.gcc_except_table) }
     60   .rel.got	: { *(.rel.got) }
     61   .rela.got	: { *(.rela.got) }
     62   .rel.ctors	: { *(.rel.ctors) }
     63   .rela.ctors	: { *(.rela.ctors) }
     64   .rel.dtors	: { *(.rel.dtors) }
     65   .rela.dtors	: { *(.rela.dtors) }
     66   .rel.init	: { *(.rel.init) }
     67   .rela.init	: { *(.rela.init) }
     68   .rel.fini	: { *(.rel.fini) }
     69   .rela.fini	: { *(.rela.fini) }
     70   .rel.bss	: { *(.rel.bss) }
     71   .rela.bss	: { *(.rela.bss) }
     72   .rel.plt	: { *(.rel.plt) }
     73   .rela.plt	: { *(.rela.plt) }
     74   .init		: { KEEP (*(.init)) } =0
     75   .plt		: { *(.plt) }
     76 
     77   .text		:
     78   {
     79     *(.text)
     80     ${RELOCATING+*(.text.*)}
     81     
     82     /* .gnu.warning sections are handled specially by elf32.em.  */
     83     *(.gnu.warning)
     84     *(.gnu.linkonce.t*)
     85   } =0
     86 
     87   ${RELOCATING+_etext = .;}
     88   ${RELOCATING+PROVIDE (etext = .);}
     89 
     90    /* This is special code area at the end of the normal text section.
     91       It contains a small lookup table at the start followed by the
     92       code pointed to by entries in the lookup table.  */
     93 
     94   .call_table_data ${CALL_TABLE_START_ADDR} :
     95   {
     96     ${RELOCATING+PROVIDE(__ctbp = .);}
     97     *(.call_table_data)
     98   } = 0xff   /* Fill gaps with 0xff.  */
     99   
    100   .call_table_text :
    101   {
    102     *(.call_table_text)
    103   }
    104 
    105   .fini		: { KEEP (*(.fini)) } =0
    106   .rodata	: { *(.rodata) ${RELOCATING+*(.rodata.*)} *(.gnu.linkonce.r*) }
    107   .rodata1	: { *(.rodata1) }
    108 
    109   .data		:
    110   {
    111     *(.data)
    112     ${RELOCATING+*(.data.*)}
    113     *(.gnu.linkonce.d*)
    114     CONSTRUCTORS
    115   }
    116   .data1	: { *(.data1) }
    117   .ctors	:
    118   {
    119     ${CONSTRUCTING+___ctors = .;}
    120     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
    121     KEEP (*(SORT(.ctors.*)))
    122     KEEP (*crtend(.ctors))
    123     ${CONSTRUCTING+___ctors_end = .;}
    124   }
    125   .dtors	:
    126   {
    127     ${CONSTRUCTING+___dtors = .;}
    128     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
    129     KEEP (*(SORT(.dtors.*)))
    130     KEEP (*crtend.o(.dtors))
    131     ${CONSTRUCTING+___dtors_end = .;}
    132   }
    133   .jcr		:
    134   {
    135     KEEP (*(.jcr))
    136   }
    137 
    138   .gcc_except_table : { *(.gcc_except_table) }
    139 
    140   .got		: { *(.got.plt) *(.got) }
    141   .dynamic	: { *(.dynamic) }
    142 
    143   .tdata ${TDATA_START_ADDR} :
    144   {
    145 	${RELOCATING+PROVIDE (__ep = .);}
    146 	*(.tbyte)
    147 	*(.tcommon_byte)
    148 	*(.tdata)
    149 	*(.tbss)
    150 	*(.tcommon)
    151   }
    152 
    153   /* We want the small data sections together, so single-instruction offsets
    154      can access them all, and initialized data all before uninitialized, so
    155      we can shorten the on-disk segment size.  */
    156      
    157   .sdata ${SDATA_START_ADDR} :
    158   {
    159 	${RELOCATING+PROVIDE (__gp = . + 0x8000);}
    160 	*(.sdata)
    161    }
    162 
    163   /* See comment about .rozdata. */
    164   .rosdata ${ROSDATA_START_ADDR} :
    165   {
    166 	*(.rosdata)
    167   }
    168 
    169   /* We place the .sbss data section AFTER the .rosdata section, so that
    170      it can directly preceed the .bss section.  This allows runtime startup
    171      code to initialise all the zero-data sections by simply taking the
    172      value of '_edata' and zeroing until it reaches '_end'.  */
    173      
    174   .sbss :
    175   {
    176 	${RELOCATING+__sbss_start = .;}
    177 	*(.sbss)
    178 	*(.scommon)
    179   }
    180 
    181   ${RELOCATING+_edata  = DEFINED (__sbss_start) ? __sbss_start : . ;}
    182   ${RELOCATING+PROVIDE (edata = _edata);}
    183 
    184   .bss       :
    185   {
    186 	${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;}
    187 	${RELOCATING+__real_bss_start = . ;}
    188 	*(.dynbss)
    189 	*(.bss)
    190 	*(COMMON)
    191   }
    192 
    193   ${RELOCATING+_end = . ;}
    194   ${RELOCATING+PROVIDE (end = .);}
    195   ${RELOCATING+PROVIDE (_heap_start = .);}
    196 
    197   /* Stabs debugging sections.  */
    198   .stab 0		: { *(.stab) }
    199   .stabstr 0		: { *(.stabstr) }
    200   .stab.excl 0		: { *(.stab.excl) }
    201   .stab.exclstr 0	: { *(.stab.exclstr) }
    202   .stab.index 0		: { *(.stab.index) }
    203   .stab.indexstr 0	: { *(.stab.indexstr) }
    204   .comment 0		: { *(.comment) }
    205 
    206 EOF
    207 
    208 . $srcdir/scripttempl/DWARF.sc
    209 
    210 cat <<EOF
    211   /* User stack.  */
    212   .stack 0x200000	:
    213   {
    214 	${RELOCATING+__stack = .;}
    215 	*(.stack)
    216   }
    217 }
    218 EOF
    219