+++ /dev/null
---- libiberty/Makefile.in.orig Fri Apr 7 02:01:25 2006
-+++ libiberty/Makefile.in Mon Sep 25 21:54:25 2006
-@@ -330,7 +330,8 @@
- @MAINT@ echo stamp > stamp-functions
-
- INSTALL_DEST = @INSTALL_DEST@
--install: install_to_$(INSTALL_DEST) install-subdir
-+#install: install_to_$(INSTALL_DEST) install-subdir
-+install:
-
- install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
---- bfd/Makefile.in.orig Fri Jun 23 20:17:19 2006
-+++ bfd/Makefile.in Mon Sep 25 21:54:49 2006
-@@ -1158,7 +1158,8 @@
- for dir in "$(DESTDIR)$(bfdlibdir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
--install: install-recursive
-+#install: install-recursive
-+install:
- install-exec: install-exec-recursive
- install-data: install-data-recursive
- uninstall: uninstall-recursive
---- opcodes/Makefile.in.orig Thu Apr 6 23:49:35 2006
-+++ opcodes/Makefile.in Mon Sep 25 21:55:23 2006
-@@ -837,7 +837,8 @@
- for dir in "$(DESTDIR)$(bfdlibdir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
--install: install-recursive
-+#install: install-recursive
-+install:
- install-exec: install-exec-recursive
- install-data: install-data-recursive
- uninstall: uninstall-recursive
---- etc/Makefile.in.orig Thu Apr 6 23:49:30 2006
-+++ etc/Makefile.in Mon Sep 25 21:55:51 2006
-@@ -59,7 +59,8 @@
- HTMLFILES = standards.html configure.html
-
- all: info
--install: install-info
-+#install: install-info
-+install:
-
- uninstall:
-
--- /dev/null
+--- gas/config/tc-avr.c.orig 2008-11-03 20:26:36.667612400 -0700
++++ gas/config/tc-avr.c 2008-11-04 10:21:02.655736600 -0700
+@@ -181,6 +181,7 @@ static struct mcu_type_s mcu_types[] =
+ {"atmega32c1", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega32m1", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega32u4", AVR_ISA_AVR5, bfd_mach_avr5},
++ {"atmega32u6", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"at90usb646", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"at90usb647", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"at94k", AVR_ISA_94K, bfd_mach_avr5},
+--- gas/doc/c-avr.texi.orig 2008-08-29 10:58:02.000000000 -0600
++++ gas/doc/c-avr.texi 2008-11-04 13:20:43.724525000 -0700
+@@ -67,7 +67,7 @@ atmega323, atmega324p, atmega325, atmega
+ atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, atmega406, atmega64,
+ atmega640, atmega644, atmega644p, atmega645, atmega6450, atmega649, atmega6490,
+ atmega16hva, at90can32, at90can64, at90pwm216, at90pwm316, atmega16u4,
+-atmega32c1, atmega32m1, atmega32u4, at90usb646, at90usb647, at94k).
++atmega32c1, atmega32m1, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k).
+
+ Instruction set avr51 is for the enhanced AVR core with exactly 128K program
+ memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,
---- binutils-2.18.orig/binutils/Makefile.am Tue Oct 23 21:44:42 2007
-+++ binutils-2.18/binutils/Makefile.am Tue Oct 23 22:22:40 2007
+AVR specific only
+Deprecated
+--------------------------------------------------------------------------------
+diff -Nur ../binutils-2.18.orig/binutils/doc/objcopy.1 ./binutils/doc/objcopy.1
+--- ../binutils-2.18.orig/binutils/doc/objcopy.1 Tue Oct 23 21:44:42 2007
++++ ./binutils/doc/objcopy.1 Tue Oct 23 22:18:44 2007
+@@ -193,6 +193,8 @@
+ [\fB\-\-readonly\-text\fR]
+ [\fB\-\-pure\fR]
+ [\fB\-\-impure\fR]
++ [\fB\-\-change\-pathname\fR \fIold\fR=\fInew\fR]
++ [\fB\-\-basename\fR]
+ [\fB\-v\fR|\fB\-\-verbose\fR]
+ [\fB\-V\fR|\fB\-\-version\fR]
+ [\fB\-\-help\fR] [\fB\-\-info\fR]
+@@ -807,6 +809,23 @@
+ It can also be a useful way of reducing the size of a \fB\-\-just\-symbols\fR
+ linker input file.
+ .RE
++.IP "\fB\-\-change\-pathname\fR \fIold\fR=\fInew\fR" 4
++.IX Item "--change-pathname old=new"
++When converting debugging information using \fB\-\-debugging\fR, for
++every pathname that starts with \fIold\fR, replace the matching part
++by \fInew\fR. This is intented to map pathnames between different
++debugging tools, or when parts of the object file(s) had their
++pathnames recorded in a different build environment. Note that only
++leading directory name components might be changed that way, since the
++trailing filename could be recorded elsewhere as well (depending on the
++debugging format of the input file).
++.IP "\fB\-\-basename\fR"
++.IX Item "--basename"
++When converting debugging information using \fB\-\-debugging\fR, for
++every pathname, strip all leading directory information. This option
++takes precedence over any \fB\-\-change\-pathname\fR option. For some
++debugging formats that cannot handle long filenames, this options is
++implied (notably, some COFF debugging formats).
+ .IP "\fB\-V\fR" 4
+ .IX Item "-V"
+ .PD 0
+diff -Nur ../binutils-2.18.orig/binutils/Makefile.am ./binutils/Makefile.am
+--- ../binutils-2.18.orig/binutils/Makefile.am Tue Oct 23 21:44:42 2007
++++ ./binutils/Makefile.am Tue Oct 23 22:22:40 2007
@@ -98,7 +98,7 @@
resbin.c rescoff.c resrc.c resres.c \
size.c srconv.c stabs.c strings.c sysdump.c \
# Code shared by all the binutils.
BULIBS = bucomm.c version.c filemode.c
---- binutils-2.18.orig/binutils/Makefile.in Tue Oct 23 21:44:42 2007
-+++ binutils-2.18/binutils/Makefile.in Tue Oct 23 22:26:52 2007
+diff -Nur ../binutils-2.18.orig/binutils/Makefile.in ./binutils/Makefile.in
+--- ../binutils-2.18.orig/binutils/Makefile.in Tue Oct 23 21:44:42 2007
++++ ./binutils/Makefile.in Tue Oct 23 22:26:52 2007
@@ -129,7 +129,7 @@
nm_new_OBJECTS = $(am_nm_new_OBJECTS)
nm_new_LDADD = $(LDADD)
# Code shared by all the binutils.
BULIBS = bucomm.c version.c filemode.c
---- binutils-2.18.orig/binutils/bucomm.c Tue Oct 23 21:44:42 2007
-+++ binutils-2.18/binutils/bucomm.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/bucomm.c ./binutils/bucomm.c
+--- ../binutils-2.18.orig/binutils/bucomm.c Tue Oct 23 21:44:42 2007
++++ ./binutils/bucomm.c Tue Oct 23 22:18:44 2007
@@ -501,6 +501,32 @@
return ret;
}
/* Returns the size of the named file. If the file does not
exist, or if it is not a real file, then a suitable non-fatal
error message is printed and zero is returned. */
---- binutils-2.18.orig/binutils/bucomm.h Tue Oct 23 21:44:42 2007
-+++ binutils-2.18/binutils/bucomm.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/bucomm.h ./binutils/bucomm.h
+--- ../binutils-2.18.orig/binutils/bucomm.h Tue Oct 23 21:44:42 2007
++++ ./binutils/bucomm.h Tue Oct 23 22:18:44 2007
@@ -54,6 +54,8 @@
off_t get_file_size (const char *);
extern char *program_name;
/* filemode.c */
---- binutils-2.18.orig/binutils/budbg.h Tue Oct 23 21:44:42 2007
-+++ binutils-2.18/binutils/budbg.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/budbg.h ./binutils/budbg.h
+--- ../binutils-2.18.orig/binutils/budbg.h Tue Oct 23 21:44:42 2007
++++ ./binutils/budbg.h Tue Oct 23 22:18:44 2007
@@ -51,8 +51,11 @@
extern bfd_boolean write_ieee_debugging_info (bfd *, void *);
+ (bfd *abfd, void *, long *symcountp, asymbol ***);
#endif
---- binutils-2.18.orig/binutils/debug.c.orig Mon Aug 6 21:55:10 2007
-+++ binutils-2.18/binutils/debug.c Tue Oct 23 23:43:19 2007
+--- binutils/debug.c.orig Mon Aug 6 21:55:10 2007
++++ binutils/debug.c Tue Oct 23 23:43:19 2007
@@ -31,6 +31,7 @@
#include <assert.h>
#include "bfd.h"
+ /* Not found, pass the original name on. */
+ return oname;
}
---- binutils-2.18.orig/binutils/debug.h Tue Oct 23 21:44:43 2007
-+++ binutils-2.18/binutils/debug.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/debug.h ./binutils/debug.h
+--- ../binutils-2.18.orig/binutils/debug.h Tue Oct 23 21:44:43 2007
++++ ./binutils/debug.h Tue Oct 23 22:18:44 2007
@@ -440,6 +440,12 @@
extern bfd_boolean debug_start_source (void *, const char *);
/* Record a function definition. This implicitly starts a function
block. The debug_type argument is the type of the return value.
The bfd_boolean indicates whether the function is globally visible.
---- binutils-2.18.orig/binutils/objcopy.c Tue Oct 23 21:44:43 2007
-+++ binutils-2.18/binutils/objcopy.c Tue Oct 23 22:38:29 2007
+diff -Nur ../binutils-2.18.orig/binutils/objcopy.c ./binutils/objcopy.c
+--- ../binutils-2.18.orig/binutils/objcopy.c Tue Oct 23 21:44:43 2007
++++ ./binutils/objcopy.c Tue Oct 23 22:38:29 2007
@@ -32,6 +32,7 @@
#include "elf-bfd.h"
#include <sys/stat.h>
break;
case OPTION_READONLY_TEXT:
---- binutils-2.18.orig/binutils/rdcoff.c Tue Oct 23 21:44:43 2007
-+++ binutils-2.18/binutils/rdcoff.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/rdcoff.c ./binutils/rdcoff.c
+--- ../binutils-2.18.orig/binutils/rdcoff.c Tue Oct 23 21:44:43 2007
++++ ./binutils/rdcoff.c Tue Oct 23 22:18:44 2007
@@ -82,6 +82,9 @@
struct coff_slots *slots;
/* Basic types. */
if (ISFCN (syment.n_type))
{
fnname = name;
---- binutils-2.18.orig/binutils/wrcoff.c Thu Jan 1 01:00:00 1970
-+++ binutils-2.18/binutils/wrcoff.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/binutils/wrcoff.c ./binutils/wrcoff.c
+--- ../binutils-2.18.orig/binutils/wrcoff.c Thu Jan 1 01:00:00 1970
++++ ./binutils/wrcoff.c Tue Oct 23 22:18:44 2007
@@ -0,0 +1,3410 @@
+/* wrcoff.c -- Generate (AVR) COFF debugging information
+ Copyright 2003 Free Software Foundation, Inc.
+
+ return TRUE;
+}
---- binutils-2.18.orig/bfd/Makefile.am Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/Makefile.am Tue Oct 23 22:41:01 2007
+diff -Nur ../binutils-2.18.orig/bfd/Makefile.am ./bfd/Makefile.am
+--- ../binutils-2.18.orig/bfd/Makefile.am Tue Oct 23 21:44:07 2007
++++ ./bfd/Makefile.am Tue Oct 23 22:41:01 2007
@@ -208,6 +208,8 @@
coff-apollo.lo \
coff-arm.lo \
coff-h8300.c \
coff-h8500.c \
coff-i386.c \
-@@ -976,13 +980,13 @@
- bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
- @echo "creating $@"
- @bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
-- bfd_version_string="\"$(VERSION)\"" ;\
-+ bfd_version_string="\"$(VERSION) + coff-avr-patch (20050630)\"" ;\
- bfd_soversion="$(VERSION)" ;\
- bfd_version_package="\"$(PKGVERSION)\"" ;\
- report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
- if test "x$(RELEASE)" = x ; then \
- bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
-- bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
-+ bfd_version_string="\"$(VERSION).$${bfd_version_date} + coff-avr-patch (20050630)\"" ;\
- bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
- fi ;\
- sed -e "s,@bfd_version@,$$bfd_version," \
@@ -1186,6 +1190,12 @@
coff-m68k.c $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h \
$(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \
coff-h8300.lo: coff-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/h8300.h \
$(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
---- binutils-2.18.orig/bfd/Makefile.in Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/Makefile.in Tue Oct 23 22:41:31 2007
+diff -Nur ../binutils-2.18.orig/bfd/Makefile.in ./bfd/Makefile.in
+--- ../binutils-2.18.orig/bfd/Makefile.in Tue Oct 23 21:44:07 2007
++++ ./bfd/Makefile.in Tue Oct 23 22:41:31 2007
@@ -458,6 +458,8 @@
coff-apollo.lo \
coff-arm.lo \
coff-h8300.c \
coff-h8500.c \
coff-i386.c \
-@@ -1556,13 +1560,13 @@
- bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
- @echo "creating $@"
- @bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
-- bfd_version_string="\"$(VERSION)\"" ;\
-+ bfd_version_string="\"$(VERSION) + coff-avr-patch (20050630)\"" ;\
- bfd_soversion="$(VERSION)" ;\
- bfd_version_package="\"$(PKGVERSION)\"" ;\
- report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
- if test "x$(RELEASE)" = x ; then \
- bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
-- bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
-+ bfd_version_string="\"$(VERSION).$${bfd_version_date} + coff-avr-patch (20050630)\"" ;\
- bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
- fi ;\
- sed -e "s,@bfd_version@,$$bfd_version," \
@@ -1766,6 +1770,12 @@
coff-m68k.c $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h \
$(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \
coff-h8300.lo: coff-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/h8300.h \
$(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
---- binutils-2.18.orig/bfd/coff-avr.c Thu Jan 1 01:00:00 1970
-+++ binutils-2.18/bfd/coff-avr.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/coff-avr.c ./bfd/coff-avr.c
+--- ../binutils-2.18.orig/bfd/coff-avr.c Thu Jan 1 01:00:00 1970
++++ ./bfd/coff-avr.c Tue Oct 23 22:18:44 2007
@@ -0,0 +1,613 @@
+/* BFD back-end for Atmel AVR COFF files.
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2003
+
+ COFF_SWAP_TABLE
+};
---- binutils-2.18.orig/bfd/coff-ext-avr.c Thu Jan 1 01:00:00 1970
-+++ binutils-2.18/bfd/coff-ext-avr.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/coff-ext-avr.c ./bfd/coff-ext-avr.c
+--- ../binutils-2.18.orig/bfd/coff-ext-avr.c Thu Jan 1 01:00:00 1970
++++ ./bfd/coff-ext-avr.c Tue Oct 23 22:18:44 2007
@@ -0,0 +1,428 @@
+/* BFD back-end for Atmel AVR "extended" COFF files.
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2003
+
+ COFF_SWAP_TABLE
+};
---- binutils-2.18.orig/bfd/coffcode.h Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/coffcode.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/coffcode.h ./bfd/coffcode.h
+--- ../binutils-2.18.orig/bfd/coffcode.h Tue Oct 23 21:44:07 2007
++++ ./bfd/coffcode.h Tue Oct 23 22:18:44 2007
@@ -1,3 +1,4 @@
+
/* Support for the generic parts of most COFF variants, for BFD.
case C_ULABEL: /* Undefined label. */
case C_USTATIC: /* Undefined static. */
#ifndef COFF_WITH_PE
---- binutils-2.18.orig/bfd/coffgen.c Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/coffgen.c Tue Oct 23 23:07:23 2007
+diff -Nur ../binutils-2.18.orig/bfd/coffgen.c ./bfd/coffgen.c
+--- ../binutils-2.18.orig/bfd/coffgen.c Tue Oct 23 21:44:07 2007
++++ ./bfd/coffgen.c Tue Oct 23 23:07:23 2007
@@ -687,6 +687,20 @@
if (last_file != NULL)
last_file->n_value = native_index;
new->native = bfd_zalloc (abfd, amt);
if (!new->native)
return NULL;
---- binutils-2.18.orig/bfd/coffswap.h Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/coffswap.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/coffswap.h ./bfd/coffswap.h
+--- ../binutils-2.18.orig/bfd/coffswap.h Tue Oct 23 21:44:07 2007
++++ ./bfd/coffswap.h Tue Oct 23 22:18:44 2007
@@ -383,7 +383,11 @@
void * ext1,
int type,
}
else
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
---- binutils-2.18.orig/bfd/config.bfd Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/config.bfd Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/config.bfd ./bfd/config.bfd
+--- ../binutils-2.18.orig/bfd/config.bfd Tue Oct 23 21:44:07 2007
++++ ./bfd/config.bfd Tue Oct 23 22:18:44 2007
@@ -327,6 +327,7 @@
avr-*-*)
;;
bfin-*-*)
---- binutils-2.18.orig/bfd/configure Tue Oct 23 21:44:09 2007
-+++ binutils-2.18/bfd/configure Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/configure ./bfd/configure
+--- ../binutils-2.18.orig/bfd/configure Tue Oct 23 21:44:09 2007
++++ ./bfd/configure Tue Oct 23 22:18:44 2007
@@ -19034,6 +19034,8 @@
armpe_little_vec) tb="$tb pe-arm.lo peigen.lo cofflink.lo " ;;
armpei_big_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;;
b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;;
b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;;
bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
---- binutils-2.18.orig/bfd/configure.in Tue Oct 23 21:44:07 2007
-+++ binutils-2.18/bfd/configure.in Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/configure.in ./bfd/configure.in
+--- ../binutils-2.18.orig/bfd/configure.in Tue Oct 23 21:44:07 2007
++++ ./bfd/configure.in Tue Oct 23 22:18:44 2007
@@ -612,6 +612,8 @@
armpe_little_vec) tb="$tb pe-arm.lo peigen.lo cofflink.lo " ;;
armpei_big_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;;
b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;;
b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;;
bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
---- binutils-2.18.orig/bfd/targets.c Tue Oct 23 21:44:09 2007
-+++ binutils-2.18/bfd/targets.c Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/bfd/targets.c ./bfd/targets.c
+--- ../binutils-2.18.orig/bfd/targets.c Tue Oct 23 21:44:09 2007
++++ ./bfd/targets.c Tue Oct 23 22:18:44 2007
@@ -558,6 +558,8 @@
extern const bfd_target armpe_little_vec;
extern const bfd_target armpei_big_vec;
&b_out_vec_big_host,
&b_out_vec_little_host,
&bfd_efi_app_ia32_vec,
---- binutils-2.18.orig/include/coff/avr.h Thu Jan 1 01:00:00 1970
-+++ binutils-2.18/include/coff/avr.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/include/coff/avr.h ./include/coff/avr.h
+--- ../binutils-2.18.orig/include/coff/avr.h Thu Jan 1 01:00:00 1970
++++ ./include/coff/avr.h Tue Oct 23 22:18:44 2007
@@ -0,0 +1,110 @@
+/* coff information for Atmel AVR.
+
+
+#define RELOC struct external_reloc
+#define RELSZ 10
---- binutils-2.18.orig/include/coff/internal.h Tue Oct 23 21:44:43 2007
-+++ binutils-2.18/include/coff/internal.h Tue Oct 23 22:18:44 2007
+diff -Nur ../binutils-2.18.orig/include/coff/internal.h ./include/coff/internal.h
+--- ../binutils-2.18.orig/include/coff/internal.h Tue Oct 23 21:44:43 2007
++++ ./include/coff/internal.h Tue Oct 23 22:18:44 2007
@@ -630,6 +630,8 @@
};
static int show_version = 0;
static int show_help = 0;
static int show_totals = 0;
-@@ -63,6 +83,156 @@ static bfd_size_type total_textsize;
+@@ -63,6 +83,163 @@ static bfd_size_type total_textsize;
/* Program exit status. */
static int return_code = 0;
+
+avr_device_t avr[] =
+{
-+ {"atmega2560", AVR256K, AVR8K, AVR4K},
-+ {"atmega2561", AVR256K, AVR8K, AVR4K},
++ {"atmega2560", AVR256K, AVR8K, AVR4K},
++ {"atmega2561", AVR256K, AVR8K, AVR4K},
++ {"atxmega256a3", AVR256K, AVR8K, AVR4K},
++ {"atxmega256a3b", AVR256K, AVR8K, AVR4K},
++ {"atxmega256a3v", AVR256K, AVR8K, AVR4K},
+
-+ {"at43usb320", AVR128K, 608UL, 0},
-+ {"at90can128", AVR128K, AVR4K, AVR4K},
-+ {"at90usb1286", AVR128K, AVR8K, AVR4K},
-+ {"at90usb1287", AVR128K, AVR8K, AVR4K},
-+ {"atmega128", AVR128K, AVR4K, AVR4K},
-+ {"atmega1280", AVR128K, AVR8K, AVR4K},
-+ {"atmega1281", AVR128K, AVR8K, AVR4K},
-+ {"atmega1284P", AVR128K, AVR16K, AVR4K},
-+ {"atmega103", AVR128K, 4000UL, AVR4K},
-+ {"atxmega128a1",AVR128K, AVR8K, AVR2K},
++ {"at43usb320", AVR128K, 608UL, 0},
++ {"at90can128", AVR128K, AVR4K, AVR4K},
++ {"at90usb1286", AVR128K, AVR8K, AVR4K},
++ {"at90usb1287", AVR128K, AVR8K, AVR4K},
++ {"atmega128", AVR128K, AVR4K, AVR4K},
++ {"atmega1280", AVR128K, AVR8K, AVR4K},
++ {"atmega1281", AVR128K, AVR8K, AVR4K},
++ {"atmega1284P", AVR128K, AVR16K, AVR4K},
++ {"atmega103", AVR128K, 4000UL, AVR4K},
++ {"atxmega128a1", AVR128K, AVR8K, AVR2K},
++ {"atxmega128a3", AVR128K, AVR16K, AVR2K},
+
-+ {"at90can64", AVR64K, AVR4K, AVR2K},
-+ {"at90usb646", AVR64K, AVR4K, AVR2K},
-+ {"at90usb647", AVR64K, AVR4K, AVR2K},
-+ {"atmega64", AVR64K, AVR4K, AVR2K},
-+ {"atmega640", AVR64K, AVR8K, AVR4K},
-+ {"atmega644", AVR64K, AVR4K, AVR2K},
-+ {"atmega644p", AVR64K, AVR4K, AVR2K},
-+ {"atmega645", AVR64K, AVR4K, AVR2K},
-+ {"atmega6450", AVR64K, AVR4K, AVR2K},
-+ {"atmega649", AVR64K, AVR4K, AVR2K},
-+ {"atmega6490", AVR64K, AVR4K, AVR2K},
-+ {"atxmega64a1", AVR64K, AVR4K, AVR2K},
++ {"at90can64", AVR64K, AVR4K, AVR2K},
++ {"at90usb646", AVR64K, AVR4K, AVR2K},
++ {"at90usb647", AVR64K, AVR4K, AVR2K},
++ {"atmega64", AVR64K, AVR4K, AVR2K},
++ {"atmega640", AVR64K, AVR8K, AVR4K},
++ {"atmega644", AVR64K, AVR4K, AVR2K},
++ {"atmega644p", AVR64K, AVR4K, AVR2K},
++ {"atmega645", AVR64K, AVR4K, AVR2K},
++ {"atmega6450", AVR64K, AVR4K, AVR2K},
++ {"atmega649", AVR64K, AVR4K, AVR2K},
++ {"atmega6490", AVR64K, AVR4K, AVR2K},
++ {"atxmega64a1", AVR64K, AVR4K, AVR2K},
++ {"atxmega64a3", AVR64K, AVR4K, AVR2K},
+
-+ {"atmega406", AVR40K, AVR512, AVR2K},
++ {"atmega406", AVR40K, AVR2K, AVR512},
+
-+ {"at90can32", AVR32K, AVR2K, AVR1K},
-+ {"at94k", AVR32K, AVR4K, 0},
-+ {"atmega32", AVR32K, AVR2K, AVR1K},
-+ {"atmega323", AVR32K, AVR2K, AVR1K},
-+ {"atmega324p", AVR32K, AVR2K, AVR1K},
-+ {"atmega325", AVR32K, AVR2K, AVR1K},
-+ {"atmega325p", AVR32K, AVR2K, AVR1K},
-+ {"atmega3250", AVR32K, AVR2K, AVR1K},
-+ {"atmega3250p", AVR32K, AVR2K, AVR1K},
-+ {"atmega328p", AVR32K, AVR2K, AVR1K},
-+ {"atmega329", AVR32K, AVR2K, AVR1K},
-+ {"atmega329p", AVR32K, AVR2K, AVR1K},
-+ {"atmega3290", AVR32K, AVR2K, AVR1K},
-+ {"atmega3290p", AVR32K, AVR2K, AVR1K},
-+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
-+ {"atmega32c1", AVR32K, AVR2K, AVR1K},
-+ {"atmega32m1", AVR32K, AVR2K, AVR1K},
-+ {"atmega32u4", AVR32K, 2560UL, AVR1K},
++ {"at90can32", AVR32K, AVR2K, AVR1K},
++ {"at94k", AVR32K, AVR4K, 0},
++ {"atmega32", AVR32K, AVR2K, AVR1K},
++ {"atmega323", AVR32K, AVR2K, AVR1K},
++ {"atmega324p", AVR32K, AVR2K, AVR1K},
++ {"atmega325", AVR32K, AVR2K, AVR1K},
++ {"atmega325p", AVR32K, AVR2K, AVR1K},
++ {"atmega3250", AVR32K, AVR2K, AVR1K},
++ {"atmega3250p", AVR32K, AVR2K, AVR1K},
++ {"atmega328p", AVR32K, AVR2K, AVR1K},
++ {"atmega329", AVR32K, AVR2K, AVR1K},
++ {"atmega329p", AVR32K, AVR2K, AVR1K},
++ {"atmega3290", AVR32K, AVR2K, AVR1K},
++ {"atmega3290p", AVR32K, AVR2K, AVR1K},
++ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
++ {"atmega32c1", AVR32K, AVR2K, AVR1K},
++ {"atmega32m1", AVR32K, AVR2K, AVR1K},
++ {"atmega32u4", AVR32K, 2560UL, AVR1K},
++ {"atmega32u6", AVR32K, 2560UL, AVR1K},
+
-+ {"at43usb355", AVR24K, 1120, 0},
++ {"at43usb355", AVR24K, 1120, 0},
+
-+ {"at76c711", AVR16K, AVR2K, 0},
-+ {"at90pwm216", AVR16K, AVR1K, AVR512},
-+ {"at90pwm316", AVR16K, AVR1K, AVR512},
-+ {"at90usb162", AVR16K, AVR512, AVR512},
-+ {"atmega16", AVR16K, AVR1K, AVR512},
-+ {"atmega161", AVR16K, AVR1K, AVR512},
-+ {"atmega162", AVR16K, AVR1K, AVR512},
-+ {"atmega163", AVR16K, AVR1K, AVR512},
-+ {"atmega164", AVR16K, AVR1K, AVR512},
-+ {"atmega164p", AVR16K, AVR1K, AVR512},
-+ {"atmega165", AVR16K, AVR1K, AVR512},
-+ {"atmega165p", AVR16K, AVR1K, AVR512},
-+ {"atmega168", AVR16K, AVR1K, AVR512},
-+ {"atmega168p", AVR16K, AVR1K, AVR512},
-+ {"atmega169", AVR16K, AVR1K, AVR512},
-+ {"atmega169p", AVR16K, AVR1K, AVR512},
-+ {"attiny167", AVR16K, AVR512, AVR512},
++ {"at76c711", AVR16K, AVR2K, 0},
++ {"at90pwm216", AVR16K, AVR1K, AVR512},
++ {"at90pwm316", AVR16K, AVR1K, AVR512},
++ {"at90usb162", AVR16K, AVR512, AVR512},
++ {"atmega16", AVR16K, AVR1K, AVR512},
++ {"atmega161", AVR16K, AVR1K, AVR512},
++ {"atmega162", AVR16K, AVR1K, AVR512},
++ {"atmega163", AVR16K, AVR1K, AVR512},
++ {"atmega164", AVR16K, AVR1K, AVR512},
++ {"atmega164p", AVR16K, AVR1K, AVR512},
++ {"atmega165", AVR16K, AVR1K, AVR512},
++ {"atmega165p", AVR16K, AVR1K, AVR512},
++ {"atmega168", AVR16K, AVR1K, AVR512},
++ {"atmega168p", AVR16K, AVR1K, AVR512},
++ {"atmega169", AVR16K, AVR1K, AVR512},
++ {"atmega169p", AVR16K, AVR1K, AVR512},
++ {"atmega16u4", AVR16K, 1280UL, AVR512},
++ {"attiny167", AVR16K, AVR512, AVR512},
+
-+ {"at90c8534", AVR8K, 352, AVR512},
-+ {"at90pwm1", AVR8K, AVR512, AVR512},
-+ {"at90pwm2", AVR8K, AVR512, AVR512},
-+ {"at90pwm2b", AVR8K, AVR512, AVR512},
-+ {"at90pwm3", AVR8K, AVR512, AVR512},
-+ {"at90pwm3b", AVR8K, AVR512, AVR512},
-+ {"at90s8515", AVR8K, AVR512, AVR512},
-+ {"at90s8535", AVR8K, AVR512, AVR512},
-+ {"at90usb82", AVR8K, AVR512, AVR512},
-+ {"atmega8", AVR8K, AVR1K, AVR512},
-+ {"atmega8515", AVR8K, AVR512, AVR512},
-+ {"atmega8535", AVR8K, AVR512, AVR512},
-+ {"atmega88", AVR8K, AVR1K, AVR512},
-+ {"atmega88p", AVR8K, AVR1K, AVR512},
-+ {"attiny84", AVR8K, AVR512, AVR512},
-+ {"attiny85", AVR8K, AVR512, AVR512},
-+ {"attiny861", AVR8K, AVR512, AVR512},
-+ {"attiny88", AVR8K, AVR256, AVR64},
++ {"at90c8534", AVR8K, 352, AVR512},
++ {"at90pwm1", AVR8K, AVR512, AVR512},
++ {"at90pwm2", AVR8K, AVR512, AVR512},
++ {"at90pwm2b", AVR8K, AVR512, AVR512},
++ {"at90pwm3", AVR8K, AVR512, AVR512},
++ {"at90pwm3b", AVR8K, AVR512, AVR512},
++ {"at90s8515", AVR8K, AVR512, AVR512},
++ {"at90s8535", AVR8K, AVR512, AVR512},
++ {"at90usb82", AVR8K, AVR512, AVR512},
++ {"atmega8", AVR8K, AVR1K, AVR512},
++ {"atmega8515", AVR8K, AVR512, AVR512},
++ {"atmega8535", AVR8K, AVR512, AVR512},
++ {"atmega88", AVR8K, AVR1K, AVR512},
++ {"atmega88p", AVR8K, AVR1K, AVR512},
++ {"attiny84", AVR8K, AVR512, AVR512},
++ {"attiny85", AVR8K, AVR512, AVR512},
++ {"attiny861", AVR8K, AVR512, AVR512},
++ {"attiny88", AVR8K, AVR256, AVR64},
+
-+ {"at90s4414", AVR4K, 352, AVR256},
-+ {"at90s4433", AVR4K, AVR128, AVR256},
-+ {"at90s4434", AVR4K, 352, AVR256},
-+ {"atmega48", AVR4K, AVR512, AVR256},
-+ {"atmega48p", AVR4K, AVR512, AVR256},
-+ {"attiny43u", AVR4K, AVR256, AVR64},
-+ {"attiny44", AVR4K, AVR256, AVR256},
-+ {"attiny45", AVR4K, AVR256, AVR256},
-+ {"attiny461", AVR4K, AVR256, AVR256},
-+ {"attiny48", AVR4K, AVR256, AVR64},
++ {"at90s4414", AVR4K, 352, AVR256},
++ {"at90s4433", AVR4K, AVR128, AVR256},
++ {"at90s4434", AVR4K, 352, AVR256},
++ {"atmega48", AVR4K, AVR512, AVR256},
++ {"atmega48p", AVR4K, AVR512, AVR256},
++ {"attiny43u", AVR4K, AVR256, AVR64},
++ {"attiny44", AVR4K, AVR256, AVR256},
++ {"attiny45", AVR4K, AVR256, AVR256},
++ {"attiny461", AVR4K, AVR256, AVR256},
++ {"attiny48", AVR4K, AVR256, AVR64},
+
-+ {"at86rf401", AVR2K, 224, AVR128},
-+ {"at90s2313", AVR2K, AVR128, AVR128},
-+ {"at90s2323", AVR2K, AVR128, AVR128},
-+ {"at90s2333", AVR2K, 224, AVR128},
-+ {"at90s2343", AVR2K, AVR128, AVR128},
-+ {"attiny22", AVR2K, 224, AVR128},
-+ {"attiny2313", AVR2K, AVR128, AVR128},
-+ {"attiny24", AVR2K, AVR128, AVR128},
-+ {"attiny25", AVR2K, AVR128, AVR128},
-+ {"attiny26", AVR2K, AVR128, AVR128},
-+ {"attiny261", AVR2K, AVR128, AVR128},
-+ {"attiny28", AVR2K, 0, 0},
++ {"at86rf401", AVR2K, 224, AVR128},
++ {"at90s2313", AVR2K, AVR128, AVR128},
++ {"at90s2323", AVR2K, AVR128, AVR128},
++ {"at90s2333", AVR2K, 224, AVR128},
++ {"at90s2343", AVR2K, AVR128, AVR128},
++ {"attiny22", AVR2K, 224, AVR128},
++ {"attiny2313", AVR2K, AVR128, AVR128},
++ {"attiny24", AVR2K, AVR128, AVR128},
++ {"attiny25", AVR2K, AVR128, AVR128},
++ {"attiny26", AVR2K, AVR128, AVR128},
++ {"attiny261", AVR2K, AVR128, AVR128},
++ {"attiny28", AVR2K, 0, 0},
+
-+ {"at90s1200", AVR1K, 0, AVR64},
-+ {"attiny11", AVR1K, 0, AVR64},
-+ {"attiny12", AVR1K, 0, AVR64},
-+ {"attiny13", AVR1K, AVR64, AVR64},
-+ {"attiny15", AVR1K, 0, AVR64},
++ {"at90s1200", AVR1K, 0, AVR64},
++ {"attiny11", AVR1K, 0, AVR64},
++ {"attiny12", AVR1K, 0, AVR64},
++ {"attiny13", AVR1K, AVR64, AVR64},
++ {"attiny15", AVR1K, 0, AVR64},
+};
+
+static char *avrmcu = NULL;
static char *target = NULL;
/* Forward declarations. */
-@@ -78,7 +240,8 @@ usage (FILE *stream, int status)
+@@ -78,7 +247,8 @@ usage (FILE *stream, int status)
fprintf (stream, _(" Displays the sizes of sections inside binary files\n"));
fprintf (stream, _(" If no input file(s) are specified, a.out is assumed\n"));
fprintf (stream, _(" The options are:\n\
-o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n\
-t --totals Display the total sizes (Berkeley only)\n\
--common Display total size for *COM* syms\n\
-@@ -87,11 +250,7 @@ usage (FILE *stream, int status)
+@@ -87,11 +257,7 @@ usage (FILE *stream, int status)
-h --help Display this information\n\
-v --version Display the program's version\n\
\n"),
);
list_supported_targets (program_name, stream);
if (REPORT_BUGS_TO[0] && status == 0)
-@@ -102,6 +261,7 @@ usage (FILE *stream, int status)
+@@ -102,6 +268,7 @@ usage (FILE *stream, int status)
#define OPTION_FORMAT (200)
#define OPTION_RADIX (OPTION_FORMAT + 1)
#define OPTION_TARGET (OPTION_RADIX + 1)
static struct option long_options[] =
{
-@@ -109,6 +269,7 @@ static struct option long_options[] =
+@@ -109,6 +276,7 @@ static struct option long_options[] =
{"format", required_argument, 0, OPTION_FORMAT},
{"radix", required_argument, 0, OPTION_RADIX},
{"target", required_argument, 0, OPTION_TARGET},
{"totals", no_argument, &show_totals, 1},
{"version", no_argument, &show_version, 1},
{"help", no_argument, &show_help, 1},
-@@ -140,7 +301,7 @@ main (int argc, char **argv)
+@@ -140,7 +308,7 @@ main (int argc, char **argv)
bfd_init ();
set_default_bfd_target ();
(int *) 0)) != EOF)
switch (c)
{
-@@ -149,11 +310,15 @@ main (int argc, char **argv)
+@@ -149,11 +317,15 @@ main (int argc, char **argv)
{
case 'B':
case 'b':
break;
default:
non_fatal (_("invalid argument to --format: %s"), optarg);
-@@ -161,6 +326,10 @@ main (int argc, char **argv)
+@@ -161,6 +333,10 @@ main (int argc, char **argv)
}
break;
case OPTION_TARGET:
target = optarg;
break;
-@@ -189,11 +358,14 @@ main (int argc, char **argv)
+@@ -189,11 +365,14 @@ main (int argc, char **argv)
break;
case 'A':
case 'v':
case 'V':
show_version = 1;
-@@ -239,7 +411,7 @@ main (int argc, char **argv)
+@@ -239,7 +418,7 @@ main (int argc, char **argv)
for (; optind < argc;)
display_file (argv[optind++]);
{
bfd_size_type total = total_textsize + total_datasize + total_bsssize;
-@@ -600,13 +772,117 @@ print_sysv_format (bfd *file)
+@@ -600,13 +779,117 @@ print_sysv_format (bfd *file)
printf ("\n\n");
}
--- /dev/null
+Not committed.
+Patch by Anatoly Sokolov
+--------------------------------------------------------------------------------
+Index: ld/emulparams/avr1.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr1.sh,v
+retrieving revision 1.2
+diff -u -r1.2 avr1.sh
+--- ld/emulparams/avr1.sh 24 May 2006 07:36:11 -0000 1.2
++++ ld/emulparams/avr1.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=8K
++DATA_ORIGIN=0x800060
+ DATA_LENGTH=0
+ EXTRA_EM_FILE=avrelf
+Index: ld/emulparams/avr2.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr2.sh,v
+retrieving revision 1.2
+diff -u -r1.2 avr2.sh
+--- ld/emulparams/avr2.sh 24 May 2006 07:36:11 -0000 1.2
++++ ld/emulparams/avr2.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=8K
++DATA_ORIGIN=0x800060
+ DATA_LENGTH=0xffa0
+ EXTRA_EM_FILE=avrelf
+Index: ld/emulparams/avr3.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr3.sh,v
+retrieving revision 1.2
+diff -u -r1.2 avr3.sh
+--- ld/emulparams/avr3.sh 24 May 2006 07:36:11 -0000 1.2
++++ ld/emulparams/avr3.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=128K
++DATA_ORIGIN=0x800060
+ DATA_LENGTH=0xffa0
+ EXTRA_EM_FILE=avrelf
+Index: ld/emulparams/avr4.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr4.sh,v
+retrieving revision 1.2
+diff -u -r1.2 avr4.sh
+--- ld/emulparams/avr4.sh 24 May 2006 07:36:11 -0000 1.2
++++ ld/emulparams/avr4.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=8K
++DATA_ORIGIN=0x800060
+ DATA_LENGTH=0xffa0
+ EXTRA_EM_FILE=avrelf
+Index: ld/emulparams/avr5.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr5.sh,v
+retrieving revision 1.2
+diff -u -r1.2 avr5.sh
+--- ld/emulparams/avr5.sh 24 May 2006 07:36:11 -0000 1.2
++++ ld/emulparams/avr5.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=128K
++DATA_ORIGIN=0x800060
+ DATA_LENGTH=0xffa0
+ EXTRA_EM_FILE=avrelf
+Index: ld/emulparams/avr6.sh
+===================================================================
+RCS file: /cvs/src/src/ld/emulparams/avr6.sh,v
+retrieving revision 1.1
+diff -u -r1.1 avr6.sh
+--- ld/emulparams/avr6.sh 24 May 2006 07:36:11 -0000 1.1
++++ ld/emulparams/avr6.sh 29 Feb 2008 23:39:37 -0000
+@@ -7,5 +7,6 @@
+ TEMPLATE_NAME=elf32
+
+ TEXT_LENGTH=1024K
+-DATA_LENGTH=0xffa0
++DATA_ORIGIN=0x800200
++DATA_LENGTH=0xfe00
+ EXTRA_EM_FILE=avrelf
+--- ld/scripttempl/avr.sc.orig 2008-02-19 16:36:36.382765500 -0700
++++ ld/scripttempl/avr.sc 2008-02-19 16:41:07.653804500 -0700
+@@ -5,7 +5,7 @@ OUTPUT_ARCH(${ARCH})
+ MEMORY
+ {
+ text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
+- data (rw!x) : ORIGIN = 0x800060, LENGTH = $DATA_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
--- /dev/null
+Not committed.
+--------------------------------------------------------------------------------
+--- ld/scripttempl/avr.sc.old 2007-09-14 06:32:02.437500000 -0600
++++ ld/scripttempl/avr.sc 2007-09-14 06:50:28.854125000 -0600
+@@ -4,9 +4,12 @@ OUTPUT_ARCH(${ARCH})
+
+ MEMORY
+ {
+- text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
+- data (rw!x) : ORIGIN = 0x800060, LENGTH = $DATA_LENGTH
+- eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
++ text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
++ data (rw!x) : ORIGIN = 0x800060, 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
+ }
+
+ SECTIONS
+@@ -196,6 +199,24 @@ SECTIONS
+ ${RELOCATING+ __eeprom_end = . ; }
+ } ${RELOCATING+ > eeprom}
+
++ .fuse ${RELOCATING-0}:
++ {
++ KEEP(*(.fuse))
++ KEEP(*(.lfuse))
++ KEEP(*(.hfuse))
++ KEEP(*(.efuse))
++ } ${RELOCATING+ > fuse}
++
++ .lock ${RELOCATING-0}:
++ {
++ KEEP(*(.lock*))
++ } ${RELOCATING+ > lock}
++
++ .signature ${RELOCATING-0}:
++ {
++ KEEP(*(.signature*))
++ } ${RELOCATING+ > signature}
++
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
--- /dev/null
+Not committed
+--------------------------------------------------------------------------------
+--- opcodes/avr-dis.c.orig 2007-08-06 13:58:38.000000000 -0600
++++ opcodes/avr-dis.c 2008-04-09 16:37:17.233737600 -0600
+@@ -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
+
+ case 'z':
+ *buf++ = 'Z';
+- if (insn & 0x1)
+- *buf++ = '+';
++
++ /* 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"));
+@@ -226,6 +236,10 @@ avr_operand (unsigned int insn, unsigned
+ sprintf (comment, "%d", x);
+ }
+ break;
++
++ case 'E':
++ sprintf (buf, "%d", (insn >> 4) & 15);
++ break;
+
+ case '?':
+ *buf = '\0';
+@@ -331,7 +345,8 @@ print_insn_avr (bfd_vma addr, disassembl
+
+ 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, disassembl
+ 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);
+ }
+ }
+--- gas/config/tc-avr.c.orig 2008-08-29 10:58:02.000000000 -0600
++++ gas/config/tc-avr.c 2008-09-22 14:11:05.345349200 -0600
+@@ -27,20 +27,21 @@
+
+ struct avr_opcodes_s
+ {
+- char * name;
+- char * constraints;
+- int insn_size; /* In words. */
+- int isa;
++ 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[] = ";";
+@@ -79,6 +80,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},
+@@ -185,6 +193,8 @@ static struct mcu_type_s mcu_types[] =
+ {"at90usb1287",AVR_ISA_AVR51, bfd_mach_avr51},
+ {"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
++ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
++ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
+ {NULL, 0, 0}
+ };
+
+@@ -789,7 +799,12 @@ avr_operand (struct avr_opcodes_s *opcod
+ 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+". */
+@@ -906,6 +921,16 @@ avr_operand (struct avr_opcodes_s *opcod
+ }
+ break;
+
++ case 'E':
++ {
++ unsigned int x;
++
++ x = avr_get_constant (str, 15);
++ str = input_line_pointer;
++ op_mask |= (x << 4);
++ }
++ break;
++
+ case '?':
+ break;
+
+--- include/opcode/avr.h.orig 2008-04-09 14:03:00.411627300 -0600
++++ include/opcode/avr.h 2008-04-09 16:34:28.329060900 -0600
+@@ -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_PWMx (AVR_ISA_M8 | AVR_ISA_BRK)
+@@ -53,6 +55,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_ALL 0xFFFF
+
+@@ -98,6 +102,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,
+@@ -158,7 +163,8 @@ AVR_INSN (reti, "", "1001010100011000
+ 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)
+@@ -272,3 +278,6 @@ AVR_INSN (st, "e,r", "100!001rrrrree-+
+ 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)
++
+Index: bfd/archures.c
+===================================================================
+RCS file: /cvs/src/src/bfd/archures.c,v
+retrieving revision 1.130
+diff -a -u -p -r1.130 archures.c
+--- bfd/archures.c 4 Feb 2008 19:15:50 -0000 1.130
++++ bfd/archures.c 14 Feb 2008 18:01:43 -0000
+@@ -352,6 +352,13 @@ DESCRIPTION
+ .#define bfd_mach_avr4 4
+ .#define bfd_mach_avr5 5
+ .#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). *}
+--- bfd/cpu-avr.c.orig 2008-08-08 23:35:12.000000000 -0600
++++ bfd/cpu-avr.c 2008-09-22 14:14:33.969548200 -0600
+@@ -126,7 +126,29 @@ static const bfd_arch_info_type arch_inf
+ 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 =
+--- include/elf/avr.h.orig 2008-08-08 23:35:13.000000000 -0600
++++ include/elf/avr.h 2008-09-22 14:16:17.550944200 -0600
+@@ -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)
+Index: ld/Makefile.am
+===================================================================
+RCS file: /cvs/src/src/ld/Makefile.am,v
+retrieving revision 1.244
+diff -a -u -p -r1.244 Makefile.am
+--- ld/Makefile.am 24 Oct 2007 04:56:47 -0000 1.244
++++ ld/Makefile.am 14 Feb 2008 18:01:45 -0000
+@@ -138,6 +138,13 @@ ALL_EMULATIONS = \
+ eavr4.o \
+ eavr5.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 \
+@@ -622,6 +629,34 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $(
+ $(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)"
+Index: ld/Makefile.in
+===================================================================
+RCS file: /cvs/src/src/ld/Makefile.in,v
+retrieving revision 1.262
+diff -a -u -p -r1.262 Makefile.in
+--- ld/Makefile.in 24 Oct 2007 04:56:47 -0000 1.262
++++ ld/Makefile.in 14 Feb 2008 18:01:45 -0000
+@@ -385,6 +385,13 @@ ALL_EMULATIONS = \
+ eavr4.o \
+ eavr5.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 \
+@@ -1448,6 +1455,34 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $(
+ $(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)"
+--- ld/configure.tgt.orig 2008-08-08 23:35:13.000000000 -0600
++++ ld/configure.tgt 2008-09-22 14:17:42.272546800 -0600
+@@ -107,7 +107,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"
+Index: ld/emultempl/avrelf.em
+===================================================================
+RCS file: /cvs/src/src/ld/emultempl/avrelf.em,v
+retrieving revision 1.5
+diff -a -u -p -r1.5 avrelf.em
+--- ld/emultempl/avrelf.em 17 Aug 2007 13:50:48 -0000 1.5
++++ ld/emultempl/avrelf.em 14 Feb 2008 18:01:45 -0000
+@@ -71,8 +71,10 @@ avr_elf_${EMULATION_NAME}_before_allocat
+
+ 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 ();
+--- /dev/null 2008-02-14 11:03:14.488602600 -0700
++++ ld/emulparams/avrxmega1.sh 2008-02-14 09:08:29.531250000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:18.394502600 -0700
++++ ld/emulparams/avrxmega2.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:22.050425000 -0700
++++ ld/emulparams/avrxmega3.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:25.784465400 -0700
++++ ld/emulparams/avrxmega4.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:25.784465400 -0700
++++ ld/emulparams/avrxmega5.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:25.784465400 -0700
++++ ld/emulparams/avrxmega6.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- /dev/null 2008-02-14 11:03:25.784465400 -0700
++++ ld/emulparams/avrxmega7.sh 2008-02-14 09:08:29.546875000 -0700
+@@ -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
+--- bfd/elf32-avr.c.old 2008-10-14 11:27:16.515625000 -0600
++++ bfd/elf32-avr.c 2008-10-14 11:46:35.453125000 -0600
+@@ -1324,6 +1324,34 @@ bfd_elf_avr_final_write_processing (bfd
+ 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;
+@@ -1386,6 +1414,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,
--- /dev/null
+--- gas/config/tc-avr.c.orig 2008-10-29 14:10:04.264816900 -0600
++++ gas/config/tc-avr.c 2008-10-29 15:55:03.798197900 -0600
+@@ -193,7 +193,11 @@ static struct mcu_type_s mcu_types[] =
+ {"at90usb1287",AVR_ISA_AVR51, bfd_mach_avr51},
+ {"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
++ {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
++ {"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
++ {"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
++ {"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
+ {NULL, 0, 0}
+ };
+@@ -372,6 +376,10 @@ 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"
++ " 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"
+--- gas/doc/c-avr.texi.orig 2008-08-29 10:58:02.000000000 -0600
++++ gas/doc/c-avr.texi 2008-10-29 15:59:25.299307900 -0600
+@@ -76,6 +76,19 @@ at90can128, at90usb1286, at90usb1287).
+ Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
+ atmega2560, atmega2561).
+
++Instruction set avrxmega4 is for the XMEGA AVR cor with up to 64K program
++memory space and less than 64K data space (MCU types: atxmega64a3).
++
++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,
++atxmega256a3, atxmega256a3b).
++
++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}.