Replace multiple AVR scripts with a single, customizable linker script.
authorGeorg-Johann Lay <avr@gjlay.de>
Tue, 13 Jun 2017 15:50:26 +0000 (16:50 +0100)
committerNick Clifton <nickc@redhat.com>
Tue, 13 Jun 2017 15:50:26 +0000 (16:50 +0100)
PR ld/21569
        * scripttempl/avrtiny.sc: Remove file.
* Makefile.am (eavrtiny.c): Depend on avr.sc, no more on avrtiny.sc.
* Makefile.in: Regenerate.
* emulparams/avrtiny.sh (SCRIPT_NAME): Set var to "avr".
(TEXT_ORIGIN): Remove var.
(FUSE_NAME, FUSE_LENGTH, LOCK_LENGTH, SIGNATURE_LENGTH)
(RODATA_PM_OFFSET): Set new vars.
* emulparams/avr1.sh (FUSE_NAME, EEPROM_LENGTH, FUSE_LENGTH)
(LOCK_LENGTH, SIGNATURE_LENGTH, USER_SIGNATURE_LENGTH): Set new vars.
* emulparams/avr2.sh: Same.
* emulparams/avr25.sh: Same.
* emulparams/avr3.sh: Same.
* emulparams/avr31.sh: Same.
* emulparams/avr35.sh: Same.
* emulparams/avr4.sh: Same.
* emulparams/avr5.sh: Same.
* emulparams/avr51.sh: Same.
* emulparams/avr6.sh: Same.
* emulparams/avrxmega1.sh: Same.
* emulparams/avrxmega2.sh: Same.
* emulparams/avrxmega3.sh: Same.
* emulparams/avrxmega4.sh: Same.
* emulparams/avrxmega5.sh: Same.
* emulparams/avrxmega6.sh: Same.
* emulparams/avrxmega7.sh: Same.
* scripttempl/avr.sc (__EEPROM_REGION_LENGTH__): Only define
if EEPROM_LENGTH is set.
(MEMORY) [eeprom]: Same.
(SECTIONS) [.eeprom]: Same for output section.
(__USER_SIGNATURE_REGION_LENGTH__): Only define if
USER_SIGNATURE_LENGTH is set.
(MEMORY) [user_signatures]: Same.
(SECTIONS) [.fuse]: Only define output section if FUSE_NAME = fuse.
(SECTIONS) [.config]: Only define output section if FUSE_NAME = config.

22 files changed:
ld/Makefile.am
ld/Makefile.in
ld/emulparams/avr1.sh
ld/emulparams/avr2.sh
ld/emulparams/avr25.sh
ld/emulparams/avr3.sh
ld/emulparams/avr31.sh
ld/emulparams/avr35.sh
ld/emulparams/avr4.sh
ld/emulparams/avr5.sh
ld/emulparams/avr51.sh
ld/emulparams/avr6.sh
ld/emulparams/avrtiny.sh
ld/emulparams/avrxmega1.sh
ld/emulparams/avrxmega2.sh
ld/emulparams/avrxmega3.sh
ld/emulparams/avrxmega4.sh
ld/emulparams/avrxmega5.sh
ld/emulparams/avrxmega6.sh
ld/emulparams/avrxmega7.sh
ld/scripttempl/avr.sc
ld/scripttempl/avrtiny.sc [deleted file]

index 3aa7e80467f11c1fc6c43c040f6a256c6ec56929..b509e236e8fd366bfa2f78b5ee9a420a5a73961b 100644 (file)
@@ -922,7 +922,7 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
   ${GEN_DEPENDS}
 
 eavrtiny.c: $(srcdir)/emulparams/avrtiny.sh \
-  $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avrtiny.sc \
+  $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
   ${GEN_DEPENDS}
 
 ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
index f485f4f8f5c99d62c0941ff69d075fc7c0f64945..b69d6b86c1ff443da0a446bd6f01776ad29a4468 100644 (file)
@@ -2486,7 +2486,7 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
   ${GEN_DEPENDS}
 
 eavrtiny.c: $(srcdir)/emulparams/avrtiny.sh \
-  $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avrtiny.sc \
+  $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
   ${GEN_DEPENDS}
 
 ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
index 2f6af99a7a05c306897b88ba8dd2e061d84ab599..0fa6eedfe2f786e599a94feb5e7ee691565684dd 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=8K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index cb35bb95b9e052cca8b753eb513c870c15893a06..e0bdc21a6fd4e8b07bc8b44e6a23055144e0abfc 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=8K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 2965347efc72b53dfedb17dd81527dbcc4a6c799..4a6e0a38ce9ae6529e0f3439cd43220baca73f7f 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=8K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index a0b86c4ec4b1db362a2e61dfb2d31382ed243923..f02dd39dc42e2e498712c0e447df61cc16cdf53f 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=128K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 6e1ee0a8fb91dc5a72cff9ad8caee800458ce59d..0bf3c0fe3e189cbfd31b77a91c62008afd1745cf 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=128K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index abc6790b079859ff6fdb582bce6fabad33f780fd..fe83dc865726df9f3c1e60aa7985a9c59e431d22 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=64K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index deaf3e738d50b95f4cfc6aa84d316a2eba62d999..ccda23fd93e5618f499408c1ae29f7ad6f38c18c 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=8K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 2d0fc4fab87edb2309f31edc2e803eb316005a9a..64e9d66de43894a8cfe0cc9350f49d7bbd8ecb32 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=128K
 DATA_ORIGIN=0x800060
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 2069dfe3b964f177f370b3d748f122e686dce1d6..b097771465ad5fb38fd110a22ca54eefd9d56a93 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=128K
 DATA_ORIGIN=0x800100
 DATA_LENGTH=0xff00
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index c1a4fab6c8ab37b316ff71f3de2f0cc8459b4661..10efa6f1baeb14fda5207decd1a891dcb0cd25a0 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x800200
 DATA_LENGTH=0xfe00
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index b4ed14bb258dfbdcf4a07a2447872803a74dda50..4aca22b0849338c5be09f307bf9ce69706c1ce74 100644 (file)
@@ -1,13 +1,19 @@
 ARCH=avr:100
 MACHINE=
-SCRIPT_NAME=avrtiny
+SCRIPT_NAME=avr
 OUTPUT_FORMAT="elf32-avr"
 MAXPAGESIZE=1
 EMBEDDED=yes
 TEMPLATE_NAME=elf32
 
-TEXT_ORIGIN=0x0
 TEXT_LENGTH=4K
 DATA_ORIGIN=0x0800040
 DATA_LENGTH=0x100
+RODATA_PM_OFFSET=0x4000
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=config
+
+FUSE_LENGTH=2
+LOCK_LENGTH=2
+SIGNATURE_LENGTH=4
index 95e8aac22a3a34c8fc1f7067fe7bfa2aa37ceb24..722ee180537ea9908b19ebeac4635c0a39400b23 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index f282a69c990c38f08fd58f893f78863263b5dd12..d9211b23bc0bf760a81362740b8e8852992b647f 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 7c5a1e5b53749ddc028227b6b60a5fdcd37dd932..b33f895ba8022718c38aca3e773532e6da98b5bc 100644 (file)
@@ -11,3 +11,11 @@ DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 RODATA_PM_OFFSET=0x8000
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 829c8b7d06b9a4eda0ef2bb674dc22caf3f4e1d8..02ef7d72299e7ab9923c9f31138b2d37bdce11e1 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 0a09aee660f842222d077b51ad52eaabe8ae72c3..93b69da81dcc0de02a57553144bb64d13e2c5403 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 3c3a468998da929254832a82990f81dd7fc93fa4..f7dae40f2d999bad9413c6a71c8b97682ea82411 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index b84a0ba1dd4f045e2a4060f0279ac3ccc9e99b1e..578f52a7693e3de1736fc0e8cc257139895c31de 100644 (file)
@@ -10,3 +10,11 @@ TEXT_LENGTH=1024K
 DATA_ORIGIN=0x802000
 DATA_LENGTH=0xffa0
 EXTRA_EM_FILE=avrelf
+
+FUSE_NAME=fuse
+
+EEPROM_LENGTH=64K
+FUSE_LENGTH=1K
+LOCK_LENGTH=1K
+SIGNATURE_LENGTH=1K
+USER_SIGNATURE_LENGTH=1K
index 144d32dbc793d0040ce855d19c7fab0506c219d7..1b74dc488256d67c5db9a364dbb56ffd1a071eb6 100644 (file)
@@ -27,29 +27,21 @@ OUTPUT_ARCH(${ARCH})
 
 __TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : $TEXT_LENGTH;
 __DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : $DATA_LENGTH;
-__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
-__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
-__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
-__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
-__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
-EOF
-
-if test -n "$RODATA_PM_OFFSET"; then
-    cat <<EOF
-__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : $RODATA_PM_OFFSET;
-EOF
-fi
-
-cat <<EOF
+${EEPROM_LENGTH+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : $EEPROM_LENGTH;}
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : $FUSE_LENGTH;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : $LOCK_LENGTH;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : $SIGNATURE_LENGTH;
+${USER_SIGNATURE_LENGTH+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : $USER_SIGNATURE_LENGTH;}
+${RODATA_PM_OFFSET+__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : $RODATA_PM_OFFSET;}
 MEMORY
 {
   text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
   data   (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = __DATA_REGION_LENGTH__
-  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
-  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+${EEPROM_LENGTH+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__}
+  $FUSE_NAME      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
   lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
   signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
-  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+${USER_SIGNATURE_LENGTH+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__}
 }
 
 SECTIONS
@@ -271,6 +263,10 @@ cat <<EOF
     ${RELOCATING+ _end = . ;  }
     ${RELOCATING+ PROVIDE (__heap_start = .) ; }
   } ${RELOCATING+ > data}
+EOF
+
+if test -n "${EEPROM_LENGTH}"; then
+cat <<EOF
 
   .eeprom ${RELOCATING-0}:
   {
@@ -278,6 +274,11 @@ cat <<EOF
     KEEP(*(.eeprom*))
     ${RELOCATING+ __eeprom_end = . ; }
   } ${RELOCATING+ > eeprom}
+EOF
+fi
+
+if test "$FUSE_NAME" = "fuse" ; then
+cat <<EOF
 
   .fuse ${RELOCATING-0}:
   {
@@ -286,6 +287,10 @@ cat <<EOF
     KEEP(*(.hfuse))
     KEEP(*(.efuse))
   } ${RELOCATING+ > fuse}
+EOF
+fi
+
+cat <<EOF
 
   .lock ${RELOCATING-0}:
   {
@@ -296,6 +301,19 @@ cat <<EOF
   {
     KEEP(*(.signature*))
   } ${RELOCATING+ > signature}
+EOF
+
+if test "$FUSE_NAME" = "config" ; then
+cat <<EOF
+
+  .config ${RELOCATING-0}:
+  {
+    KEEP(*(.config*))
+  } ${RELOCATING+ > config}
+EOF
+fi
+
+cat <<EOF
 
   /* Stabs debugging sections.  */
   .stab 0 : { *(.stab) }
diff --git a/ld/scripttempl/avrtiny.sc b/ld/scripttempl/avrtiny.sc
deleted file mode 100644 (file)
index 5a6d4ae..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-# Copyright (C) 2014-2017 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-2017 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("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
-OUTPUT_ARCH(${ARCH})
-
-__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : $TEXT_LENGTH;
-__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : $DATA_LENGTH;
-__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 2;
-__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 2;
-__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 4;
-__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : 0x4000;
-
-MEMORY
-{
-  text   (rx)   : ORIGIN = $TEXT_ORIGIN, LENGTH = __TEXT_REGION_LENGTH__
-  data   (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = __DATA_REGION_LENGTH__
-
-  /* Provide offsets for config, lock and signature to match
-     production file format. Ignore offsets in datasheet.  */
-
-  config    (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
-  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
-  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
-}
-
-SECTIONS
-{
-  /* Read-only sections, merged into text segment: */
-  ${TEXT_DYNAMIC+${DYNAMIC}}
-  .hash        ${RELOCATING-0} : { *(.hash)            }
-  .dynsym      ${RELOCATING-0} : { *(.dynsym)          }
-  .dynstr      ${RELOCATING-0} : { *(.dynstr)          }
-  .gnu.version ${RELOCATING-0} : { *(.gnu.version)     }
-  .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
-  .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
-
-  .rel.init    ${RELOCATING-0} : { *(.rel.init)        }
-  .rela.init   ${RELOCATING-0} : { *(.rela.init)       }
-  .rel.text    ${RELOCATING-0} :
-    {
-      *(.rel.text)
-      ${RELOCATING+*(.rel.text.*)}
-      ${RELOCATING+*(.rel.gnu.linkonce.t*)}
-    }
-  .rela.text   ${RELOCATING-0} :
-    {
-      *(.rela.text)
-      ${RELOCATING+*(.rela.text.*)}
-      ${RELOCATING+*(.rela.gnu.linkonce.t*)}
-    }
-  .rel.fini    ${RELOCATING-0} : { *(.rel.fini)        }
-  .rela.fini   ${RELOCATING-0} : { *(.rela.fini)       }
-  .rel.rodata  ${RELOCATING-0} :
-    {
-      *(.rel.rodata)
-      ${RELOCATING+*(.rel.rodata.*)}
-      ${RELOCATING+*(.rel.gnu.linkonce.r*)}
-    }
-  .rela.rodata ${RELOCATING-0} :
-    {
-      *(.rela.rodata)
-      ${RELOCATING+*(.rela.rodata.*)}
-      ${RELOCATING+*(.rela.gnu.linkonce.r*)}
-    }
-  .rel.data    ${RELOCATING-0} :
-    {
-      *(.rel.data)
-      ${RELOCATING+*(.rel.data.*)}
-      ${RELOCATING+*(.rel.gnu.linkonce.d*)}
-    }
-  .rela.data   ${RELOCATING-0} :
-    {
-      *(.rela.data)
-      ${RELOCATING+*(.rela.data.*)}
-      ${RELOCATING+*(.rela.gnu.linkonce.d*)}
-    }
-  .rel.ctors   ${RELOCATING-0} : { *(.rel.ctors)       }
-  .rela.ctors  ${RELOCATING-0} : { *(.rela.ctors)      }
-  .rel.dtors   ${RELOCATING-0} : { *(.rel.dtors)       }
-  .rela.dtors  ${RELOCATING-0} : { *(.rela.dtors)      }
-  .rel.got     ${RELOCATING-0} : { *(.rel.got)         }
-  .rela.got    ${RELOCATING-0} : { *(.rela.got)        }
-  .rel.bss     ${RELOCATING-0} : { *(.rel.bss)         }
-  .rela.bss    ${RELOCATING-0} : { *(.rela.bss)        }
-  .rel.plt     ${RELOCATING-0} : { *(.rel.plt)         }
-  .rela.plt    ${RELOCATING-0} : { *(.rela.plt)        }
-
-  /* Internal text space or external memory.  */
-  .text ${RELOCATING-0} : 
-  {
-    *(.vectors)
-    KEEP(*(.vectors))
-
-    /* For data that needs to reside in the lower 64k of progmem.  */
-    ${RELOCATING+ *(.progmem.gcc*)}
-
-    /* PR 13812: Placing the trampolines here gives a better chance
-       that they will be in range of the code that uses them.  */
-    ${RELOCATING+. = ALIGN(2);}
-    ${CONSTRUCTING+ __trampolines_start = . ; }
-    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
-    *(.trampolines)
-    ${RELOCATING+ *(.trampolines*)}
-    ${CONSTRUCTING+ __trampolines_end = . ; }
-
-    /* avr-libc expects these data to reside in lower 64K. */
-    ${RELOCATING+ *libprintf_flt.a:*(.progmem.data)}
-    ${RELOCATING+ *libc.a:*(.progmem.data)}
-
-    ${RELOCATING+ *(.progmem*)}
-
-    ${RELOCATING+. = ALIGN(2);}
-
-    /* For future tablejump instruction arrays for 3 byte pc devices.
-       We don't relax jump/call instructions within these sections.  */
-    *(.jumptables) 
-    ${RELOCATING+ *(.jumptables*)}
-
-    /* For code that needs to reside in the lower 128k progmem.  */
-    *(.lowtext)
-    ${RELOCATING+ *(.lowtext*)}
-
-    ${CONSTRUCTING+ __ctors_start = . ; }
-    ${CONSTRUCTING+ *(.ctors) }
-    ${CONSTRUCTING+ __ctors_end = . ; }
-    ${CONSTRUCTING+ __dtors_start = . ; }
-    ${CONSTRUCTING+ *(.dtors) }
-    ${CONSTRUCTING+ __dtors_end = . ; }
-    KEEP(SORT(*)(.ctors))
-    KEEP(SORT(*)(.dtors))
-
-    /* From this point on, we don't bother about wether the insns are
-       below or above the 16 bits boundary.  */
-    *(.init0)  /* Start here after reset.  */
-    KEEP (*(.init0))
-    *(.init1)
-    KEEP (*(.init1))
-    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
-    KEEP (*(.init2))
-    *(.init3)
-    KEEP (*(.init3))
-    *(.init4)  /* Initialize data and BSS.  */
-    KEEP (*(.init4))
-    *(.init5)
-    KEEP (*(.init5))
-    *(.init6)  /* C++ constructors.  */
-    KEEP (*(.init6))
-    *(.init7)
-    KEEP (*(.init7))
-    *(.init8)
-    KEEP (*(.init8))
-    *(.init9)  /* Call main().  */
-    KEEP (*(.init9))
-    *(.text)
-    ${RELOCATING+. = ALIGN(2);}
-    ${RELOCATING+ *(.text.*)}
-    ${RELOCATING+. = ALIGN(2);}
-    *(.fini9)  /* _exit() starts here.  */
-    KEEP (*(.fini9))
-    *(.fini8)
-    KEEP (*(.fini8))
-    *(.fini7)
-    KEEP (*(.fini7))
-    *(.fini6)  /* C++ destructors.  */
-    KEEP (*(.fini6))
-    *(.fini5)
-    KEEP (*(.fini5))
-    *(.fini4)
-    KEEP (*(.fini4))
-    *(.fini3)
-    KEEP (*(.fini3))
-    *(.fini2)
-    KEEP (*(.fini2))
-    *(.fini1)
-    KEEP (*(.fini1))
-    *(.fini0)  /* Infinite loop after program termination.  */
-    KEEP (*(.fini0))
-    ${RELOCATING+ _etext = . ; }
-  } ${RELOCATING+ > text}
-
-  .rodata ${RELOCATING+ ADDR(.text) + SIZEOF (.text) + __RODATA_PM_OFFSET__ } ${RELOCATING-0} :
-  {
-    *(.rodata)
-    ${RELOCATING+ *(.rodata*)}
-    *(.gnu.linkonce.r*)
-  } ${RELOCATING+AT> text}
-
-  .data        ${RELOCATING-0} :
-  {
-    ${RELOCATING+ PROVIDE (__data_start = .) ; }
-    *(.data)
-    ${RELOCATING+ *(.data*)}
-    *(.gnu.linkonce.d*)
-    ${RELOCATING+. = ALIGN(2);}
-    ${RELOCATING+ _edata = . ; }
-    ${RELOCATING+ PROVIDE (__data_end = .) ; }
-  } ${RELOCATING+ > data ${RELOCATING+AT> text}}
-
-  .bss ${RELOCATING+ ADDR(.data) + SIZEOF (.data)} ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))}
-  {
-    ${RELOCATING+ PROVIDE (__bss_start = .) ; }
-    *(.bss)
-    ${RELOCATING+ *(.bss*)}
-    *(COMMON)
-    ${RELOCATING+ PROVIDE (__bss_end = .) ; }
-  } ${RELOCATING+ > data}
-
-  ${RELOCATING+ __data_load_start = LOADADDR(.data); }
-  ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); }
-
-  /* Global data not cleared after reset.  */
-  .noinit ${RELOCATING+ ADDR(.bss) + SIZEOF (.bss)} ${RELOCATING-0} : ${RELOCATING+ AT (ADDR (.noinit))}
-  {
-    ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
-    *(.noinit*)
-    ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
-    ${RELOCATING+ _end = . ;  }
-    ${RELOCATING+ PROVIDE (__heap_start = .) ; }
-  } ${RELOCATING+ > data}
-
-  .lock ${RELOCATING-0}:
-  {
-    KEEP(*(.lock*))
-  } ${RELOCATING+ > lock}
-
-  .signature ${RELOCATING-0}:
-  {
-    KEEP(*(.signature*))
-  } ${RELOCATING+ > signature}
-
-  .config ${RELOCATING-0}:
-  {
-    KEEP(*(.config*))
-  } ${RELOCATING+ > config}
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
-  .note.gnu.build-id : { *(.note.gnu.build-id) }
-EOF
-
-. $srcdir/scripttempl/DWARF.sc
-
-cat <<EOF
-}
-EOF