diff options
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/scripttempl/avr.sc | 21 | ||||
-rw-r--r-- | ld/scripttempl/avrtiny.sc | 16 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-avr/region_overflow.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-avr/region_overflow.s | 5 |
6 files changed, 49 insertions, 11 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index d952670..4db576c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2015-02-24 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> + + * scripttempl/avr.sc: Add new user_signatures region. Define and + use symbols for all region lengths. + * scripttempl/avrtiny.sc: Define and use symbols for all region + lengths. + 2015-01-21 Yoshinori Sato <ysato@users.sourceforge.jp> * Makefile.am: (ALL_EMULATION_SOURCES): Add new emulations. diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc index cc4561f..038e7ab 100644 --- a/ld/scripttempl/avr.sc +++ b/ld/scripttempl/avr.sc @@ -14,14 +14,23 @@ cat <<EOF 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; +__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; + MEMORY { - text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH - data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH - eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K - fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K - lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K - signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K + 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__ + 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__ } SECTIONS diff --git a/ld/scripttempl/avrtiny.sc b/ld/scripttempl/avrtiny.sc index 6e8b09d..a4cf5db 100644 --- a/ld/scripttempl/avrtiny.sc +++ b/ld/scripttempl/avrtiny.sc @@ -14,17 +14,23 @@ cat <<EOF 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; + MEMORY { - text (rx) : ORIGIN = $TEXT_ORIGIN, LENGTH = $TEXT_LENGTH - data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH + 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 = 2 - lock (rw!x) : ORIGIN = 0x830000, LENGTH = 2 - signature (rw!x) : ORIGIN = 0x840000, LENGTH = 4 + 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 diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 3eb1c99..b362a0a 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-02-24 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> + + * ld-avr/region_overflow.d: New test. + * ld-avr/region_overflow.s: Likewise. + 2015-02-19 H.J. Lu <hongjiu.lu@intel.com> PR ld/4317 diff --git a/ld/testsuite/ld-avr/region_overflow.d b/ld/testsuite/ld-avr/region_overflow.d new file mode 100644 index 0000000..305d242 --- /dev/null +++ b/ld/testsuite/ld-avr/region_overflow.d @@ -0,0 +1,6 @@ +#name: AVR catch region overflow errors +#as: -mmcu=avrxmega2 +#ld: -mavrxmega2 --relax --defsym __TEXT_REGION_LENGTH__=2 +#source: region_overflow.s +#target: avr-*-* +#error: `.text' will not fit in region `text' diff --git a/ld/testsuite/ld-avr/region_overflow.s b/ld/testsuite/ld-avr/region_overflow.s new file mode 100644 index 0000000..c2899e7 --- /dev/null +++ b/ld/testsuite/ld-avr/region_overflow.s @@ -0,0 +1,5 @@ +.section .text +.byte 0xA +.byte 0xB +.byte 0xC +.byte 0xD |