]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - ld/scripttempl/v850.sc
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / ld / scripttempl / v850.sc
index 1f6ddf0f34bbe058ec82abbc8d858c76b4f0a706..087d472c5c25ebe5074ca7c501992e2924be8dfb 100644 (file)
@@ -1,25 +1,49 @@
+# Copyright (C) 2014-2021 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
 cat << EOF
+/* Copyright (C) 2014-2021 Free Software Foundation, Inc.
+
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+
 OUTPUT_FORMAT("elf32-v850", "elf32-v850",
              "elf32-v850")
-OUTPUT_ARCH(v850)
-ENTRY(_start)
+OUTPUT_ARCH(v850:old-gcc-abi)
+${RELOCATING+ENTRY(_start)}
 SEARCH_DIR(.);
-/*/critters/slug/grossman/install/sun4/v850-elf/lib*/
+${RELOCATING+EXTERN(__ctbp __ep __gp)};
 SECTIONS
 {
   /* This saves a little space in the ELF file, since the zda starts
      at a higher location that the ELF headers take up.  */
 
-  .zdata ${ZDATA_START_ADDR} : {
+  .zdata ${ZDATA_START_ADDR} :
+  {
        *(.zdata)
-       *(.rozdata)
-       *(.zbss)
+       ${RELOCATING+*(.zbss)
        *(reszdata)
-       *(romzdata)
-       *(romzbss)
+       *(.zcommon)}
   }
 
-  /* Read-only sections, merged into text segment: */
+  /* This is the read only part of the zero data area.
+     Having it as a separate section prevents its
+     attributes from being inherited by the zdata
+     section.  Specifically it prevents the zdata
+     section from being marked READONLY.  */
+
+  .rozdata ${ROZDATA_START_ADDR} :
+  {
+       *(.rozdata)
+       ${RELOCATING+*(romzdata)
+       *(romzbss)}
+  }
+
+  /* Read-only sections, merged into text segment.  */
   . = ${TEXT_START_ADDR};
   .interp      : { *(.interp) }
   .hash                : { *(.hash) }
@@ -31,6 +55,8 @@ SECTIONS
   .rela.data   : { *(.rela.data) }
   .rel.rodata  : { *(.rel.rodata) }
   .rela.rodata : { *(.rela.rodata) }
+  .rel.gcc_except_table : { *(.rel.gcc_except_table) }
+  .rela.gcc_except_table : { *(.rela.gcc_except_table) }
   .rel.got     : { *(.rel.got) }
   .rela.got    : { *(.rela.got) }
   .rel.ctors   : { *(.rel.ctors) }
@@ -45,59 +71,111 @@ SECTIONS
   .rela.bss    : { *(.rela.bss) }
   .rel.plt     : { *(.rel.plt) }
   .rela.plt    : { *(.rela.plt) }
-  .init                : { *(.init) } =0
+  .init                : { KEEP (*(SORT_NONE(.init))) } =0
   .plt         : { *(.plt) }
 
-  .text                : {
+  .text                :
+  {
     *(.text)
-    /* .gnu.warning sections are handled specially by elf32.em.  */
+    ${RELOCATING+*(.text.*)}
+
+    /* .gnu.warning sections are handled specially by elf.em.  */
     *(.gnu.warning)
-    *(.gnu.linkonce.t*)
+    ${RELOCATING+*(.gnu.linkonce.t*)}
   } =0
 
   ${RELOCATING+_etext = .;}
   ${RELOCATING+PROVIDE (etext = .);}
 
-  .fini                : { *(.fini)    } =0
-  .rodata      : { *(.rodata) *(.gnu.linkonce.r*) }
+   /* This is special code area at the end of the normal text section.
+      It contains a small lookup table at the start followed by the
+      code pointed to by entries in the lookup table.  */
+
+  .call_table_data ${CALL_TABLE_START_ADDR} :
+  {
+    ${RELOCATING+PROVIDE(__ctbp = .);}
+    *(.call_table_data)
+  } = 0xff   /* Fill gaps with 0xff.  */
+
+  .call_table_text :
+  {
+    *(.call_table_text)
+  }
+
+  .fini                : { KEEP (*(SORT_NONE(.fini))) } =0
+  .rodata      : { *(.rodata) ${RELOCATING+*(.rodata.*) *(.gnu.linkonce.r*)} }
   .rodata1     : { *(.rodata1) }
 
-  .data                : {
+  .data                :
+  {
     *(.data)
-    *(.gnu.linkonce.d*)
-    CONSTRUCTORS
+    ${RELOCATING+*(.data.*)
+    *(.gnu.linkonce.d*)}
+    ${CONSTRUCTING+CONSTRUCTORS}
   }
   .data1       : { *(.data1) }
-  .ctors       : {
-    ${RELOCATING+___ctors = .;}
-    *(.ctors)
-    ${RELOCATING+___ctors_end = .;}
+  .ctors       :
+  {
+    ${CONSTRUCTING+___ctors = .;}
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+    ${RELOCATING+KEEP (*(SORT(.ctors.*)))}
+    KEEP (*crtend(.ctors))
+    ${CONSTRUCTING+___ctors_end = .;}
   }
-
-  .dtors       : {
-    ${RELOCATING+___dtors = .;}
-    *(.dtors)
-    ${RELOCATING+___dtors_end = .;}
+  .dtors       :
+  {
+    ${CONSTRUCTING+___dtors = .;}
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+    ${RELOCATING+KEEP (*(SORT(.dtors.*)))}
+    KEEP (*crtend.o(.dtors))
+    ${CONSTRUCTING+___dtors_end = .;}
+  }
+  .jcr         :
+  {
+    KEEP (*(.jcr))
   }
 
-  .got         : { *(.got.plt) *(.got) }
+  .gcc_except_table : { *(.gcc_except_table) }
+
+  .got         : {${RELOCATING+ *(.got.plt)} *(.got) }
   .dynamic     : { *(.dynamic) }
 
-  .tdata ${TDATA_START_ADDR} : {
-       ${RELOCATING+PROVIDE (__ep = .);}
+  .tdata ${TDATA_START_ADDR} :
+  {
+       ${RELOCATING+PROVIDE (__ep = .);
+       *(.tbyte)
+       *(.tcommon_byte)}
        *(.tdata)
+       ${RELOCATING+*(.tbss)
+       *(.tcommon)}
   }
 
   /* We want the small data sections together, so single-instruction offsets
      can access them all, and initialized data all before uninitialized, so
      we can shorten the on-disk segment size.  */
-  .sdata ${SDATA_START_ADDR} : {
+
+  .sdata ${SDATA_START_ADDR} :
+  {
        ${RELOCATING+PROVIDE (__gp = . + 0x8000);}
-       *(.rosdata)
        *(.sdata)
+   }
+
+  /* See comment about .rozdata. */
+  .rosdata ${ROSDATA_START_ADDR} :
+  {
+       *(.rosdata)
+  }
+
+  /* We place the .sbss data section AFTER the .rosdata section, so that
+     it can directly precede the .bss section.  This allows runtime startup
+     code to initialise all the zero-data sections by simply taking the
+     value of '_edata' and zeroing until it reaches '_end'.  */
+
+  .sbss :
+  {
        ${RELOCATING+__sbss_start = .;}
        *(.sbss)
-       *(.scommon)
+       ${RELOCATING+*(.scommon)}
   }
 
   ${RELOCATING+_edata  = DEFINED (__sbss_start) ? __sbss_start : . ;}
@@ -106,13 +184,17 @@ SECTIONS
   .bss       :
   {
        ${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;}
-       *(.dynbss)
+       ${RELOCATING+__real_bss_start = . ;}
+       ${RELOCATING+*(.dynbss)}
        *(.bss)
-       *(COMMON)
+       ${RELOCATING+*(COMMON)}
   }
 
   ${RELOCATING+_end = . ;}
   ${RELOCATING+PROVIDE (end = .);}
+  ${RELOCATING+PROVIDE (_heap_start = .);}
+
+  .note.renesas 0 : { KEEP(*(.note.renesas)) }
 
   /* Stabs debugging sections.  */
   .stab 0              : { *(.stab) }
@@ -123,42 +205,16 @@ SECTIONS
   .stab.indexstr 0     : { *(.stab.indexstr) }
   .comment 0           : { *(.comment) }
 
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-
-  /* DWARF 1 */
-  .debug          0    : { *(.debug) }
-  .line           0    : { *(.line) }
-
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0    : { *(.debug_srcinfo) }
-  .debug_sfnames  0    : { *(.debug_sfnames) }
-
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0    : { *(.debug_aranges) }
-  .debug_pubnames 0    : { *(.debug_pubnames) }
-
-  /* DWARF 2 */
-  .debug_info     0    : { *(.debug_info) }
-  .debug_abbrev   0    : { *(.debug_abbrev) }
-  .debug_line     0    : { *(.debug_line) }
-  .debug_frame    0    : { *(.debug_frame) }
-  .debug_str      0    : { *(.debug_str) }
-  .debug_loc      0    : { *(.debug_loc) }
-  .debug_macinfo  0    : { *(.debug_macinfo) }
-
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0   : { *(.debug_weaknames) }
-  .debug_funcnames 0   : { *(.debug_funcnames) }
-  .debug_typenames 0   : { *(.debug_typenames) }
-  .debug_varnames  0   : { *(.debug_varnames) }
-
-/*  .stack 0xffffec00  : { _stack = .; *(.stack) }*/
-  .stack 0x200000      : {
-       ${RELOCATING+_stack = .;}
+EOF
+
+. $srcdir/scripttempl/DWARF.sc
+
+cat <<EOF
+  /* User stack.  */
+  .stack 0x200000      :
+  {
+       ${RELOCATING+__stack = .;}
        *(.stack)
   }
-  /* These must appear regardless of  .  */
 }
 EOF