summaryrefslogtreecommitdiffstats
path: root/patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch')
-rw-r--r--patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch733
1 files changed, 0 insertions, 733 deletions
diff --git a/patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch b/patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch
deleted file mode 100644
index 52942f0..0000000
--- a/patches/binutils-2.20.1a/atmel/0006-Add-support-for-XMEGA-arch-and-devices.patch
+++ /dev/null
@@ -1,733 +0,0 @@
-From 905282b7846358c30058a35303161146317b8931 Mon Sep 17 00:00:00 2001
-From: Stephan Linz <linz@li-pro.net>
-Date: Mon, 18 Apr 2011 22:45:42 +0200
-Subject: [PATCH 6/9] Add support for XMEGA arch and devices
-
-Add support for the AVR XMEGA family of devices, a new architectures
-(groupings), device names, and support for new opcodes that are used
-in this family. This is the patch that has been used out in the field
-in several AVR toolchain distributions successfully for a long time.
-
-Quote by Eric Weddington (2011-03-22):
-http://old.nabble.com/-AVR--Add-support-for-XMEGA-arch-and-devices.-td31212035.html
-
-Original ATMEL patch from:
-http://distribute.atmel.no/tools/opensource/avr-gcc/binutils-2.20.1/50-binutils-2.20.1-xmega.patch
-
-Signed-off-by: Stephan Linz <linz@li-pro.net>
----
- bfd/archures.c | 7 +++++
- bfd/bfd-in2.h | 7 +++++
- bfd/cpu-avr.c | 24 ++++++++++++++++++-
- bfd/elf32-avr.c | 56 ++++++++++++++++++++++++++++++++++++++++++++
- gas/config/tc-avr.c | 49 ++++++++++++++++++++++++++++++++++++--
- gas/doc/c-avr.texi | 21 ++++++++++++++++
- include/elf/avr.h | 7 +++++
- include/opcode/avr.h | 11 ++++++++-
- ld/Makefile.am | 35 +++++++++++++++++++++++++++
- ld/Makefile.in | 35 +++++++++++++++++++++++++++
- ld/configure.tgt | 2 +-
- ld/emulparams/avrxmega1.sh | 12 +++++++++
- ld/emulparams/avrxmega2.sh | 12 +++++++++
- ld/emulparams/avrxmega3.sh | 12 +++++++++
- ld/emulparams/avrxmega4.sh | 12 +++++++++
- ld/emulparams/avrxmega5.sh | 12 +++++++++
- ld/emulparams/avrxmega6.sh | 12 +++++++++
- ld/emulparams/avrxmega7.sh | 12 +++++++++
- ld/emultempl/avrelf.em | 6 +++-
- opcodes/avr-dis.c | 31 ++++++++++++++++++------
- 20 files changed, 359 insertions(+), 16 deletions(-)
- create mode 100644 ld/emulparams/avrxmega1.sh
- create mode 100644 ld/emulparams/avrxmega2.sh
- create mode 100644 ld/emulparams/avrxmega3.sh
- create mode 100644 ld/emulparams/avrxmega4.sh
- create mode 100644 ld/emulparams/avrxmega5.sh
- create mode 100644 ld/emulparams/avrxmega6.sh
- create mode 100644 ld/emulparams/avrxmega7.sh
-
-diff --git a/bfd/archures.c b/bfd/archures.c
-index df73b3f..390ccec 100644
---- a/bfd/archures.c
-+++ b/bfd/archures.c
-@@ -368,6 +368,13 @@ DESCRIPTION
- .#define bfd_mach_avr5 5
- .#define bfd_mach_avr51 51
- .#define bfd_mach_avr6 6
-+.#define bfd_mach_avrxmega1 101
-+.#define bfd_mach_avrxmega2 102
-+.#define bfd_mach_avrxmega3 103
-+.#define bfd_mach_avrxmega4 104
-+.#define bfd_mach_avrxmega5 105
-+.#define bfd_mach_avrxmega6 106
-+.#define bfd_mach_avrxmega7 107
- . bfd_arch_bfin, {* ADI Blackfin *}
- .#define bfd_mach_bfin 1
- . bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index d98c6ec..0821cd0 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -2042,6 +2042,13 @@ enum bfd_architecture
- #define bfd_mach_avr5 5
- #define bfd_mach_avr51 51
- #define bfd_mach_avr6 6
-+#define bfd_mach_avrxmega1 101
-+#define bfd_mach_avrxmega2 102
-+#define bfd_mach_avrxmega3 103
-+#define bfd_mach_avrxmega4 104
-+#define bfd_mach_avrxmega5 105
-+#define bfd_mach_avrxmega6 106
-+#define bfd_mach_avrxmega7 107
- bfd_arch_bfin, /* ADI Blackfin */
- #define bfd_mach_bfin 1
- bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
-diff --git a/bfd/cpu-avr.c b/bfd/cpu-avr.c
-index 9e62ab4..6562ee5 100644
---- a/bfd/cpu-avr.c
-+++ b/bfd/cpu-avr.c
-@@ -133,7 +133,29 @@ static const bfd_arch_info_type arch_info_struct[] =
- N (22, bfd_mach_avr51, "avr:51", FALSE, & arch_info_struct[9]),
-
- /* 3-Byte PC. */
-- N (22, bfd_mach_avr6, "avr:6", FALSE, NULL)
-+ N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[10]),
-+
-+ /* Xmega 1 */
-+ N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[11]),
-+
-+ /* Xmega 2 */
-+ N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[12]),
-+
-+ /* Xmega 3 */
-+ N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[13]),
-+
-+ /* Xmega 4 */
-+ N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[14]),
-+
-+ /* Xmega 5 */
-+ N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[15]),
-+
-+ /* Xmega 6 */
-+ N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[16]),
-+
-+ /* Xmega 7 */
-+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
-+
- };
-
- const bfd_arch_info_type bfd_avr_arch =
-diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c
-index cc06360..62ce9fb 100644
---- a/bfd/elf32-avr.c
-+++ b/bfd/elf32-avr.c
-@@ -1328,6 +1328,34 @@ bfd_elf_avr_final_write_processing (bfd *abfd,
- case bfd_mach_avr6:
- val = E_AVR_MACH_AVR6;
- break;
-+
-+ case bfd_mach_avrxmega1:
-+ val = E_AVR_MACH_XMEGA1;
-+ break;
-+
-+ case bfd_mach_avrxmega2:
-+ val = E_AVR_MACH_XMEGA2;
-+ break;
-+
-+ case bfd_mach_avrxmega3:
-+ val = E_AVR_MACH_XMEGA3;
-+ break;
-+
-+ case bfd_mach_avrxmega4:
-+ val = E_AVR_MACH_XMEGA4;
-+ break;
-+
-+ case bfd_mach_avrxmega5:
-+ val = E_AVR_MACH_XMEGA5;
-+ break;
-+
-+ case bfd_mach_avrxmega6:
-+ val = E_AVR_MACH_XMEGA6;
-+ break;
-+
-+ case bfd_mach_avrxmega7:
-+ val = E_AVR_MACH_XMEGA7;
-+ break;
- }
-
- elf_elfheader (abfd)->e_machine = EM_AVR;
-@@ -1390,6 +1418,34 @@ elf32_avr_object_p (bfd *abfd)
- case E_AVR_MACH_AVR6:
- e_set = bfd_mach_avr6;
- break;
-+
-+ case E_AVR_MACH_XMEGA1:
-+ e_set = bfd_mach_avrxmega1;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA2:
-+ e_set = bfd_mach_avrxmega2;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA3:
-+ e_set = bfd_mach_avrxmega3;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA4:
-+ e_set = bfd_mach_avrxmega4;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA5:
-+ e_set = bfd_mach_avrxmega5;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA6:
-+ e_set = bfd_mach_avrxmega6;
-+ break;
-+
-+ case E_AVR_MACH_XMEGA7:
-+ e_set = bfd_mach_avrxmega7;
-+ break;
- }
- }
- return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
-diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
-index 6a1c7ea..184b028 100644
---- a/gas/config/tc-avr.c
-+++ b/gas/config/tc-avr.c
-@@ -30,18 +30,19 @@ struct avr_opcodes_s
- {
- char * name;
- char * constraints;
-+ char *opcode;
- int insn_size; /* In words. */
- int isa;
- unsigned int bin_opcode;
- };
-
- #define AVR_INSN(NAME, CONSTR, OPCODE, SIZE, ISA, BIN) \
--{#NAME, CONSTR, SIZE, ISA, BIN},
-+{#NAME, CONSTR, OPCODE, SIZE, ISA, BIN},
-
- struct avr_opcodes_s avr_opcodes[] =
- {
- #include "opcode/avr.h"
-- {NULL, NULL, 0, 0, 0}
-+ {NULL, NULL, NULL, 0, 0, 0}
- };
-
- const char comment_chars[] = ";";
-@@ -80,6 +81,13 @@ static struct mcu_type_s mcu_types[] =
- {"avr5", AVR_ISA_AVR51, bfd_mach_avr5},
- {"avr51", AVR_ISA_AVR51, bfd_mach_avr51},
- {"avr6", AVR_ISA_AVR6, bfd_mach_avr6},
-+ {"avrxmega1", AVR_ISA_XMEGA, bfd_mach_avrxmega1},
-+ {"avrxmega2", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
-+ {"avrxmega3", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
-+ {"avrxmega4", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
-+ {"avrxmega5", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
-+ {"avrxmega6", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"avrxmega7", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
- {"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
- {"attiny11", AVR_ISA_AVR1, bfd_mach_avr1},
- {"attiny12", AVR_ISA_AVR1, bfd_mach_avr1},
-@@ -216,6 +224,21 @@ static struct mcu_type_s mcu_types[] =
- {"m3001b", AVR_ISA_AVR51, bfd_mach_avr51},
- {"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
- {"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
-+ {"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
-+ {"atxmega16d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
-+ {"atxmega32a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
-+ {"atxmega32d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
-+ {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
-+ {"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
-+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
-+ {"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
-+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
- {NULL, 0, 0}
- };
-
-@@ -393,6 +416,11 @@ md_show_usage (FILE *stream)
- " avr5 - enhanced AVR core with up to 64K program memory\n"
- " avr51 - enhanced AVR core with up to 128K program memory\n"
- " avr6 - enhanced AVR core with up to 256K program memory\n"
-+ " avrxmega3 - XMEGA, > 8K, <= 64K FLASH, > 64K RAM\n"
-+ " avrxmega4 - XMEGA, > 64K, <= 128K FLASH, <= 64K RAM\n"
-+ " avrxmega5 - XMEGA, > 64K, <= 128K FLASH, > 64K RAM\n"
-+ " avrxmega6 - XMEGA, > 128K, <= 256K FLASH, <= 64K RAM\n"
-+ " avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
- " or immediate microcontroller name.\n"));
- fprintf (stream,
- _(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
-@@ -820,7 +848,12 @@ avr_operand (struct avr_opcodes_s *opcode,
- if (*str == '+')
- {
- ++str;
-- op_mask |= 1;
-+ char *s;
-+ for (s = opcode->opcode; *s; ++s)
-+ {
-+ if (*s == '+')
-+ op_mask |= (1 << (15 - (s - opcode->opcode)));
-+ }
- }
-
- /* attiny26 can do "lpm" and "lpm r,Z" but not "lpm r,Z+". */
-@@ -937,6 +970,16 @@ avr_operand (struct avr_opcodes_s *opcode,
- }
- break;
-
-+ case 'E':
-+ {
-+ unsigned int x;
-+
-+ x = avr_get_constant (str, 15);
-+ str = input_line_pointer;
-+ op_mask |= (x << 4);
-+ }
-+ break;
-+
- case '?':
- break;
-
-diff --git a/gas/doc/c-avr.texi b/gas/doc/c-avr.texi
-index bc40a86..ba0927c 100644
---- a/gas/doc/c-avr.texi
-+++ b/gas/doc/c-avr.texi
-@@ -80,6 +80,27 @@ atmega128rfa1, at90can128, at90usb1286, at90usb1287, m3000f, m3000s, m3001b).
- Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
- atmega2560, atmega2561).
-
-+Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
-+memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
-+atxmega32d4).
-+
-+Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
-+memory space and greater than 64K data space (MCU types: atxmega32a4).
-+
-+Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
-+memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
-+
-+Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
-+memory space and greater than 64K data space (MCU types: atxmega64a1).
-+
-+Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
-+memory space and less than 64K data space (MCU types: atxmega128a3,
-+atxmega128d3, atxmega192a3, atxmega192d3, atxmega256a3, atxmega256a3b,
-+atxmega192d3).
-+
-+Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
-+memory space and greater than 64K data space (MCU types: atxmega128a1).
-+
- @cindex @code{-mall-opcodes} command line option, AVR
- @item -mall-opcodes
- Accept all AVR opcodes, even if not supported by @code{-mmcu}.
-diff --git a/include/elf/avr.h b/include/elf/avr.h
-index 627dc35..e86eb11 100644
---- a/include/elf/avr.h
-+++ b/include/elf/avr.h
-@@ -40,6 +40,13 @@
- #define E_AVR_MACH_AVR5 5
- #define E_AVR_MACH_AVR51 51
- #define E_AVR_MACH_AVR6 6
-+#define E_AVR_MACH_XMEGA1 101
-+#define E_AVR_MACH_XMEGA2 102
-+#define E_AVR_MACH_XMEGA3 103
-+#define E_AVR_MACH_XMEGA4 104
-+#define E_AVR_MACH_XMEGA5 105
-+#define E_AVR_MACH_XMEGA6 106
-+#define E_AVR_MACH_XMEGA7 107
-
- /* Relocations. */
- START_RELOC_NUMBERS (elf_avr_reloc_type)
-diff --git a/include/opcode/avr.h b/include/opcode/avr.h
-index 15a034a..cff7b06 100644
---- a/include/opcode/avr.h
-+++ b/include/opcode/avr.h
-@@ -30,6 +30,8 @@
- #define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */
- #define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */
- #define AVR_ISA_MOVW 0x1000 /* device has MOVW */
-+#define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */
-+#define AVR_ISA_DES 0x4000 /* device has DES */
-
- #define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
- #define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
-@@ -48,6 +50,8 @@
- #define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
- #define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK)
- #define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
-+#define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND)
-+#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
-
- #define AVR_ISA_AVR1 AVR_ISA_TINY1
- #define AVR_ISA_AVR2 AVR_ISA_2xxx
-@@ -108,6 +112,7 @@
- L - signed pc relative offset from -2048 to 2047
- h - absolute code address (call, jmp)
- S - immediate value from 0 to 7 (S = s << 4)
-+ E - immediate value from 0 to 15, shifted left by 4 (des)
- ? - use this opcode entry if no parameters, else use next opcode entry
-
- Order is important - some binary opcodes have more than one name,
-@@ -168,7 +173,8 @@ AVR_INSN (reti, "", "1001010100011000", 1, AVR_ISA_1200, 0x9518)
- AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588)
- AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598)
- AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
--AVR_INSN (spm, "", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
-+AVR_INSN (spm, "?", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
-+AVR_INSN (spm, "z", "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
-
- AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
- AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
-@@ -282,3 +288,6 @@ AVR_INSN (st, "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200)
- AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519)
- AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419)
-
-+/* DES instruction for encryption and decryption */
-+AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B)
-+
-diff --git a/ld/Makefile.am b/ld/Makefile.am
-index d8bd1f9..80b8f22 100644
---- a/ld/Makefile.am
-+++ b/ld/Makefile.am
-@@ -148,6 +148,13 @@ ALL_EMULATIONS = \
- eavr5.o \
- eavr51.o \
- eavr6.o \
-+ eavrxmega1.o \
-+ eavrxmega2.o \
-+ eavrxmega3.o \
-+ eavrxmega4.o \
-+ eavrxmega5.o \
-+ eavrxmega6.o \
-+ eavrxmega7.o \
- ecoff_i860.o \
- ecoff_sparc.o \
- eelf32_spu.o \
-@@ -727,6 +734,34 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
- $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
- ${GEN_DEPENDS}
- ${GENSCRIPTS} avr6 "$(tdir_avr2)"
-+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
-+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
-+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
-+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
-+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
-+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
-+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
- ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
-diff --git a/ld/Makefile.in b/ld/Makefile.in
-index 3a8b4f5..2d5c8a0 100644
---- a/ld/Makefile.in
-+++ b/ld/Makefile.in
-@@ -434,6 +434,13 @@ ALL_EMULATIONS = \
- eavr5.o \
- eavr51.o \
- eavr6.o \
-+ eavrxmega1.o \
-+ eavrxmega2.o \
-+ eavrxmega3.o \
-+ eavrxmega4.o \
-+ eavrxmega5.o \
-+ eavrxmega6.o \
-+ eavrxmega7.o \
- ecoff_i860.o \
- ecoff_sparc.o \
- eelf32_spu.o \
-@@ -2069,6 +2076,34 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
- $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
- ${GEN_DEPENDS}
- ${GENSCRIPTS} avr6 "$(tdir_avr2)"
-+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
-+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
-+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
-+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
-+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
-+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
-+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
-+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
-+ ${GEN_DEPENDS}
-+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
- ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
-diff --git a/ld/configure.tgt b/ld/configure.tgt
-index d6d86ab..9ceefa5 100644
---- a/ld/configure.tgt
-+++ b/ld/configure.tgt
-@@ -110,7 +110,7 @@ xscale-*-coff) targ_emul=armcoff ;;
- xscale-*-elf) targ_emul=armelf
- ;;
- avr-*-*) targ_emul=avr2
-- targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6"
-+ targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7"
- ;;
- bfin-*-elf) targ_emul=elf32bfin;
- targ_extra_emuls="elf32bfinfd"
-diff --git a/ld/emulparams/avrxmega1.sh b/ld/emulparams/avrxmega1.sh
-new file mode 100644
-index 0000000..95e8aac
---- /dev/null
-+++ b/ld/emulparams/avrxmega1.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:101
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega2.sh b/ld/emulparams/avrxmega2.sh
-new file mode 100644
-index 0000000..f282a69
---- /dev/null
-+++ b/ld/emulparams/avrxmega2.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:102
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega3.sh b/ld/emulparams/avrxmega3.sh
-new file mode 100644
-index 0000000..abaa5b3
---- /dev/null
-+++ b/ld/emulparams/avrxmega3.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:103
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega4.sh b/ld/emulparams/avrxmega4.sh
-new file mode 100644
-index 0000000..829c8b7
---- /dev/null
-+++ b/ld/emulparams/avrxmega4.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:104
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega5.sh b/ld/emulparams/avrxmega5.sh
-new file mode 100644
-index 0000000..0a09aee
---- /dev/null
-+++ b/ld/emulparams/avrxmega5.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:105
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega6.sh b/ld/emulparams/avrxmega6.sh
-new file mode 100644
-index 0000000..3c3a468
---- /dev/null
-+++ b/ld/emulparams/avrxmega6.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:106
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emulparams/avrxmega7.sh b/ld/emulparams/avrxmega7.sh
-new file mode 100644
-index 0000000..b84a0ba
---- /dev/null
-+++ b/ld/emulparams/avrxmega7.sh
-@@ -0,0 +1,12 @@
-+ARCH=avr:107
-+MACHINE=
-+SCRIPT_NAME=avr
-+OUTPUT_FORMAT="elf32-avr"
-+MAXPAGESIZE=1
-+EMBEDDED=yes
-+TEMPLATE_NAME=elf32
-+
-+TEXT_LENGTH=1024K
-+DATA_ORIGIN=0x802000
-+DATA_LENGTH=0xffa0
-+EXTRA_EM_FILE=avrelf
-diff --git a/ld/emultempl/avrelf.em b/ld/emultempl/avrelf.em
-index f0807dd..e328c77 100644
---- a/ld/emultempl/avrelf.em
-+++ b/ld/emultempl/avrelf.em
-@@ -71,8 +71,10 @@ avr_elf_${EMULATION_NAME}_before_allocation (void)
-
- gld${EMULATION_NAME}_before_allocation ();
-
-- /* We only need stubs for the avr6 family. */
-- if (strcmp ("${EMULATION_NAME}","avr6"))
-+ /* We only need stubs for avr6, avrxmega6, and avrxmega7. */
-+ if (strcmp ("${EMULATION_NAME}","avr6")
-+ && strcmp ("${EMULATION_NAME}","avrxmega6")
-+ && strcmp ("${EMULATION_NAME}","avrxmega7") )
- avr_no_stubs = TRUE;
-
- avr_elf_set_global_bfd_parameters ();
-diff --git a/opcodes/avr-dis.c b/opcodes/avr-dis.c
-index 976c371..e3ff59c 100644
---- a/opcodes/avr-dis.c
-+++ b/opcodes/avr-dis.c
-@@ -50,7 +50,7 @@ static const char * comment_start = "0x";
-
- static int
- avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constraint,
-- char *buf, char *comment, int regs, int *sym, bfd_vma *sym_addr)
-+ char *opcode_str, char *buf, char *comment, int regs, int *sym, bfd_vma *sym_addr)
- {
- int ok = 1;
- *sym = 0;
-@@ -118,8 +118,18 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
-
- case 'z':
- *buf++ = 'Z';
-- if (insn & 0x1)
-+
-+ /* Check for post-increment. */
-+ char *s;
-+ for (s = opcode_str; *s; ++s)
-+ {
-+ if (*s == '+')
-+ {
- *buf++ = '+';
-+ break;
-+ }
-+ }
-+
- *buf = '\0';
- if (AVR_UNDEF_P (insn))
- sprintf (comment, _("undefined"));
-@@ -227,6 +237,10 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
- }
- break;
-
-+ case 'E':
-+ sprintf (buf, "%d", (insn >> 4) & 15);
-+ break;
-+
- case '?':
- *buf = '\0';
- break;
-@@ -331,7 +345,8 @@ print_insn_avr (bfd_vma addr, disassemble_info *info)
-
- if (opcode->name)
- {
-- char *op = opcode->constraints;
-+ char *constraints = opcode->constraints;
-+ char *opcode_str = opcode->opcode;
-
- insn2 = 0;
- ok = 1;
-@@ -342,14 +357,14 @@ print_insn_avr (bfd_vma addr, disassemble_info *info)
- cmd_len = 4;
- }
-
-- if (*op && *op != '?')
-+ if (*constraints && *constraints != '?')
- {
-- int regs = REGISTER_P (*op);
-+ int regs = REGISTER_P (*constraints);
-
-- ok = avr_operand (insn, insn2, addr, *op, op1, comment1, 0, &sym_op1, &sym_addr1);
-+ ok = avr_operand (insn, insn2, addr, *constraints, opcode_str, op1, comment1, 0, &sym_op1, &sym_addr1);
-
-- if (ok && *(++op) == ',')
-- ok = avr_operand (insn, insn2, addr, *(++op), op2,
-+ if (ok && *(++constraints) == ',')
-+ ok = avr_operand (insn, insn2, addr, *(++constraints), opcode_str, op2,
- *comment1 ? comment2 : comment1, regs, &sym_op2, &sym_addr2);
- }
- }
---
-1.6.0.4
-