This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch,avr] Fix PR21569


As proposed by Nick, this patch makes avr.sc so generic
that avrtiny.sc is no more needed and avr.sc can be used
also for avrtiny.

The patch introduces some new variables to factor out the
differences.

The patch is written in such a way that all changes will be
in the generated scripts avrtiny.x* and all non-tiny
scripts remain the same.  Hence easy to verify by comparing
the new avrtiny.x* against the ones from an existing install.

The changes in avrtiny.x* are due to different (trailing)
spaces in the original avrtiny.sc compared to avr.sc
which I didn't fix, dito for a source comment which
I didn't include in avr.sc for easier maintenance.

If it's ok for master, please someone commit it.

Please notice that scripttempl/avrtiny.sc has to be
removed by hand, I didn't find a way to include the
removal in the delta below.

Johann

ld/
	Genericize avr.sc so that it also works for avrtiny.

	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.
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 3aa7e80..b509e23 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -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 \
diff --git a/ld/Makefile.in b/ld/Makefile.in
index f485f4f..b69d6b8 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -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 \
diff --git a/ld/emulparams/avr1.sh b/ld/emulparams/avr1.sh
index 2f6af99..0fa6eed 100644
--- a/ld/emulparams/avr1.sh
+++ b/ld/emulparams/avr1.sh
@@ -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
diff --git a/ld/emulparams/avr2.sh b/ld/emulparams/avr2.sh
index cb35bb9..e0bdc21 100644
--- a/ld/emulparams/avr2.sh
+++ b/ld/emulparams/avr2.sh
@@ -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
diff --git a/ld/emulparams/avr25.sh b/ld/emulparams/avr25.sh
index 2965347..4a6e0a3 100644
--- a/ld/emulparams/avr25.sh
+++ b/ld/emulparams/avr25.sh
@@ -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
diff --git a/ld/emulparams/avr3.sh b/ld/emulparams/avr3.sh
index a0b86c4..f02dd39 100644
--- a/ld/emulparams/avr3.sh
+++ b/ld/emulparams/avr3.sh
@@ -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
diff --git a/ld/emulparams/avr31.sh b/ld/emulparams/avr31.sh
index 6e1ee0a..0bf3c0f 100644
--- a/ld/emulparams/avr31.sh
+++ b/ld/emulparams/avr31.sh
@@ -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
diff --git a/ld/emulparams/avr35.sh b/ld/emulparams/avr35.sh
index abc6790..fe83dc8 100644
--- a/ld/emulparams/avr35.sh
+++ b/ld/emulparams/avr35.sh
@@ -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
diff --git a/ld/emulparams/avr4.sh b/ld/emulparams/avr4.sh
index deaf3e7..ccda23f 100644
--- a/ld/emulparams/avr4.sh
+++ b/ld/emulparams/avr4.sh
@@ -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
diff --git a/ld/emulparams/avr5.sh b/ld/emulparams/avr5.sh
index 2d0fc4f..64e9d66 100644
--- a/ld/emulparams/avr5.sh
+++ b/ld/emulparams/avr5.sh
@@ -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
diff --git a/ld/emulparams/avr51.sh b/ld/emulparams/avr51.sh
index 2069dfe..b097771 100644
--- a/ld/emulparams/avr51.sh
+++ b/ld/emulparams/avr51.sh
@@ -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
diff --git a/ld/emulparams/avr6.sh b/ld/emulparams/avr6.sh
index c1a4fab..10efa6f 100644
--- a/ld/emulparams/avr6.sh
+++ b/ld/emulparams/avr6.sh
@@ -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
diff --git a/ld/emulparams/avrtiny.sh b/ld/emulparams/avrtiny.sh
index b4ed14b..4aca22b 100644
--- a/ld/emulparams/avrtiny.sh
+++ b/ld/emulparams/avrtiny.sh
@@ -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
diff --git a/ld/emulparams/avrxmega1.sh b/ld/emulparams/avrxmega1.sh
index 95e8aac..722ee18 100644
--- a/ld/emulparams/avrxmega1.sh
+++ b/ld/emulparams/avrxmega1.sh
@@ -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
diff --git a/ld/emulparams/avrxmega2.sh b/ld/emulparams/avrxmega2.sh
index f282a69..d9211b2 100644
--- a/ld/emulparams/avrxmega2.sh
+++ b/ld/emulparams/avrxmega2.sh
@@ -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
diff --git a/ld/emulparams/avrxmega3.sh b/ld/emulparams/avrxmega3.sh
index 7c5a1e5..b33f895 100644
--- a/ld/emulparams/avrxmega3.sh
+++ b/ld/emulparams/avrxmega3.sh
@@ -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
diff --git a/ld/emulparams/avrxmega4.sh b/ld/emulparams/avrxmega4.sh
index 829c8b7..02ef7d7 100644
--- a/ld/emulparams/avrxmega4.sh
+++ b/ld/emulparams/avrxmega4.sh
@@ -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
diff --git a/ld/emulparams/avrxmega5.sh b/ld/emulparams/avrxmega5.sh
index 0a09aee..93b69da 100644
--- a/ld/emulparams/avrxmega5.sh
+++ b/ld/emulparams/avrxmega5.sh
@@ -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
diff --git a/ld/emulparams/avrxmega6.sh b/ld/emulparams/avrxmega6.sh
index 3c3a468..f7dae40 100644
--- a/ld/emulparams/avrxmega6.sh
+++ b/ld/emulparams/avrxmega6.sh
@@ -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
diff --git a/ld/emulparams/avrxmega7.sh b/ld/emulparams/avrxmega7.sh
index b84a0ba..578f52a 100644
--- a/ld/emulparams/avrxmega7.sh
+++ b/ld/emulparams/avrxmega7.sh
@@ -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
diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc
index 144d32d..cfcb57a 100644
--- a/ld/scripttempl/avr.sc
+++ b/ld/scripttempl/avr.sc
@@ -27,11 +27,11 @@ 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;
+${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;}
 EOF
 
 if test -n "$RODATA_PM_OFFSET"; then
@@ -45,11 +45,11 @@ 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 +271,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 +282,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 +295,10 @@ cat <<EOF
     KEEP(*(.hfuse))
     KEEP(*(.efuse))
   } ${RELOCATING+ > fuse}
+EOF
+fi
+
+cat <<EOF
 
   .lock ${RELOCATING-0}:
   {
@@ -296,6 +309,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) }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]