arduino-0018-windows
This commit is contained in:
parent
157fd6f1a1
commit
f39fc49523
5182 changed files with 950586 additions and 0 deletions
|
@ -0,0 +1,438 @@
|
|||
AVR specific only
|
||||
--------------------------------------------------------------------------------
|
||||
--- binutils/size.c 2007-08-06 13:56:14.000000000 -0600
|
||||
+++ binutils/size.c 2007-09-13 09:13:10.281250000 -0600
|
||||
@@ -35,10 +35,31 @@
|
||||
#include "getopt.h"
|
||||
#include "bucomm.h"
|
||||
|
||||
-#ifndef BSD_DEFAULT
|
||||
-#define BSD_DEFAULT 1
|
||||
+typedef enum
|
||||
+{
|
||||
+ format_sysv = 0,
|
||||
+ format_bsd = 1,
|
||||
+ format_avr = 2,
|
||||
+} format_type_t;
|
||||
+
|
||||
+
|
||||
+/* Set the default format. */
|
||||
+#define FORMAT_DEFAULT_SYSV 0
|
||||
+#define FORMAT_DEFAULT_BSD 1
|
||||
+#define FORMAT_DEFAULT_AVR 0
|
||||
+
|
||||
+#if FORMAT_DEFAULT_SYSV
|
||||
+ #define FORMAT_DEFAULT format_sysv
|
||||
+ #define FORMAT_NAME "sysv"
|
||||
+#elif FORMAT_DEFAULT_BSD
|
||||
+ #define FORMAT_DEFAULT format_bsd
|
||||
+ #define FORMAT_NAME "berkeley"
|
||||
+#elif FORMAT_DEFAULT_AVR
|
||||
+ #define FORMAT_DEFAULT format_avr
|
||||
+ #define FORMAT_NAME "avr"
|
||||
#endif
|
||||
|
||||
+
|
||||
/* Program options. */
|
||||
|
||||
static enum
|
||||
@@ -47,9 +68,8 @@ static enum
|
||||
}
|
||||
radix = decimal;
|
||||
|
||||
-/* 0 means use AT&T-style output. */
|
||||
-static int berkeley_format = BSD_DEFAULT;
|
||||
|
||||
+format_type_t format = FORMAT_DEFAULT;
|
||||
static int show_version = 0;
|
||||
static int show_help = 0;
|
||||
static int show_totals = 0;
|
||||
@@ -63,6 +83,163 @@ static bfd_size_type total_textsize;
|
||||
/* Program exit status. */
|
||||
static int return_code = 0;
|
||||
|
||||
+
|
||||
+/* AVR Size specific stuff */
|
||||
+
|
||||
+#define AVR64 64UL
|
||||
+#define AVR128 128UL
|
||||
+#define AVR256 256UL
|
||||
+#define AVR512 512UL
|
||||
+#define AVR1K 1024UL
|
||||
+#define AVR2K 2048UL
|
||||
+#define AVR4K 4096UL
|
||||
+#define AVR8K 8192UL
|
||||
+#define AVR16K 16384UL
|
||||
+#define AVR24K 24576UL
|
||||
+#define AVR32K 32768UL
|
||||
+#define AVR40K 40960UL
|
||||
+#define AVR64K 65536UL
|
||||
+#define AVR128K 131072UL
|
||||
+#define AVR256K 262144UL
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ char *name;
|
||||
+ long flash;
|
||||
+ long ram;
|
||||
+ long eeprom;
|
||||
+} avr_device_t;
|
||||
+
|
||||
+avr_device_t avr[] =
|
||||
+{
|
||||
+ {"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},
|
||||
+ {"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},
|
||||
+ {"atxmega64a3", AVR64K, AVR4K, 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},
|
||||
+ {"atmega32u6", AVR32K, 2560UL, AVR1K},
|
||||
+
|
||||
+ {"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},
|
||||
+ {"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},
|
||||
+
|
||||
+ {"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},
|
||||
+
|
||||
+ {"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 +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\
|
||||
- -A|-B --format={sysv|berkeley} Select output style (default is %s)\n\
|
||||
+ -A|-B|-C --format={sysv|berkeley|avr} Select output style (default is %s)\n\
|
||||
+ --mcu=<avrmcu> MCU name for AVR format only\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 +257,7 @@ usage (FILE *stream, int status)
|
||||
-h --help Display this information\n\
|
||||
-v --version Display the program's version\n\
|
||||
\n"),
|
||||
-#if BSD_DEFAULT
|
||||
- "berkeley"
|
||||
-#else
|
||||
- "sysv"
|
||||
-#endif
|
||||
+FORMAT_NAME
|
||||
);
|
||||
list_supported_targets (program_name, stream);
|
||||
if (REPORT_BUGS_TO[0] && status == 0)
|
||||
@@ -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)
|
||||
+#define OPTION_MCU (OPTION_TARGET + 1)
|
||||
|
||||
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},
|
||||
+ {"mcu", required_argument, 0, 203},
|
||||
{"totals", no_argument, &show_totals, 1},
|
||||
{"version", no_argument, &show_version, 1},
|
||||
{"help", no_argument, &show_help, 1},
|
||||
@@ -140,7 +308,7 @@ main (int argc, char **argv)
|
||||
bfd_init ();
|
||||
set_default_bfd_target ();
|
||||
|
||||
- while ((c = getopt_long (argc, argv, "ABHhVvdfotx", long_options,
|
||||
+ while ((c = getopt_long (argc, argv, "ABCHhVvdfotx", long_options,
|
||||
(int *) 0)) != EOF)
|
||||
switch (c)
|
||||
{
|
||||
@@ -149,11 +317,15 @@ main (int argc, char **argv)
|
||||
{
|
||||
case 'B':
|
||||
case 'b':
|
||||
- berkeley_format = 1;
|
||||
+ format = format_bsd;
|
||||
break;
|
||||
case 'S':
|
||||
case 's':
|
||||
- berkeley_format = 0;
|
||||
+ format = format_sysv;
|
||||
+ break;
|
||||
+ case 'A':
|
||||
+ case 'a':
|
||||
+ format = format_avr;
|
||||
break;
|
||||
default:
|
||||
non_fatal (_("invalid argument to --format: %s"), optarg);
|
||||
@@ -161,6 +333,10 @@ main (int argc, char **argv)
|
||||
}
|
||||
break;
|
||||
|
||||
+ case OPTION_MCU:
|
||||
+ avrmcu = optarg;
|
||||
+ break;
|
||||
+
|
||||
case OPTION_TARGET:
|
||||
target = optarg;
|
||||
break;
|
||||
@@ -189,11 +365,14 @@ main (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
- berkeley_format = 0;
|
||||
+ format = format_sysv;
|
||||
break;
|
||||
case 'B':
|
||||
- berkeley_format = 1;
|
||||
+ format = format_bsd;
|
||||
break;
|
||||
+ case 'C':
|
||||
+ format = format_avr;
|
||||
+ break;
|
||||
case 'v':
|
||||
case 'V':
|
||||
show_version = 1;
|
||||
@@ -239,7 +418,7 @@ main (int argc, char **argv)
|
||||
for (; optind < argc;)
|
||||
display_file (argv[optind++]);
|
||||
|
||||
- if (show_totals && berkeley_format)
|
||||
+ if (show_totals && format == format_bsd)
|
||||
{
|
||||
bfd_size_type total = total_textsize + total_datasize + total_bsssize;
|
||||
|
||||
@@ -600,13 +779,117 @@ print_sysv_format (bfd *file)
|
||||
printf ("\n\n");
|
||||
}
|
||||
|
||||
+
|
||||
+static avr_device_t *
|
||||
+avr_find_device (void)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ if (avrmcu != NULL)
|
||||
+ {
|
||||
+ for (i = 0; i < sizeof(avr) / sizeof(avr[0]); i++)
|
||||
+ {
|
||||
+ if (strcmp(avr[i].name, avrmcu) == 0)
|
||||
+ {
|
||||
+ /* Match found */
|
||||
+ return (&avr[i]);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return (NULL);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+print_avr_format (bfd *file)
|
||||
+{
|
||||
+ char *avr_name = "Unknown";
|
||||
+ int flashmax = 0;
|
||||
+ int rammax = 0;
|
||||
+ int eeprommax = 0;
|
||||
+ asection *section;
|
||||
+ bfd_size_type datasize = 0;
|
||||
+ bfd_size_type textsize = 0;
|
||||
+ bfd_size_type bsssize = 0;
|
||||
+ bfd_size_type bootloadersize = 0;
|
||||
+ bfd_size_type noinitsize = 0;
|
||||
+ bfd_size_type eepromsize = 0;
|
||||
+
|
||||
+ avr_device_t *avrdevice = avr_find_device();
|
||||
+ if (avrdevice != NULL)
|
||||
+ {
|
||||
+ avr_name = avrdevice->name;
|
||||
+ flashmax = avrdevice->flash;
|
||||
+ rammax = avrdevice->ram;
|
||||
+ eeprommax = avrdevice->eeprom;
|
||||
+ }
|
||||
+
|
||||
+ if ((section = bfd_get_section_by_name (file, ".data")) != NULL)
|
||||
+ datasize = bfd_section_size (file, section);
|
||||
+ if ((section = bfd_get_section_by_name (file, ".text")) != NULL)
|
||||
+ textsize = bfd_section_size (file, section);
|
||||
+ if ((section = bfd_get_section_by_name (file, ".bss")) != NULL)
|
||||
+ bsssize = bfd_section_size (file, section);
|
||||
+ if ((section = bfd_get_section_by_name (file, ".bootloader")) != NULL)
|
||||
+ bootloadersize = bfd_section_size (file, section);
|
||||
+ if ((section = bfd_get_section_by_name (file, ".noinit")) != NULL)
|
||||
+ noinitsize = bfd_section_size (file, section);
|
||||
+ if ((section = bfd_get_section_by_name (file, ".eeprom")) != NULL)
|
||||
+ eepromsize = bfd_section_size (file, section);
|
||||
+
|
||||
+ bfd_size_type text = textsize + datasize + bootloadersize;
|
||||
+ bfd_size_type data = datasize + bsssize + noinitsize;
|
||||
+ bfd_size_type eeprom = eepromsize;
|
||||
+
|
||||
+ printf ("AVR Memory Usage\n"
|
||||
+ "----------------\n"
|
||||
+ "Device: %s\n\n", avr_name);
|
||||
+
|
||||
+ /* Text size */
|
||||
+ printf ("Program:%8ld bytes", text);
|
||||
+ if (flashmax > 0)
|
||||
+ {
|
||||
+ printf (" (%2.1f%% Full)", ((float)text / flashmax) * 100);
|
||||
+ }
|
||||
+ printf ("\n(.text + .data + .bootloader)\n\n");
|
||||
+
|
||||
+ /* Data size */
|
||||
+ printf ("Data: %8ld bytes", data);
|
||||
+ if (rammax > 0)
|
||||
+ {
|
||||
+ printf (" (%2.1f%% Full)", ((float)data / rammax) * 100);
|
||||
+ }
|
||||
+ printf ("\n(.data + .bss + .noinit)\n\n");
|
||||
+
|
||||
+ /* EEPROM size */
|
||||
+ if (eeprom > 0)
|
||||
+ {
|
||||
+ printf ("EEPROM: %8ld bytes", eeprom);
|
||||
+ if (eeprommax > 0)
|
||||
+ {
|
||||
+ printf (" (%2.1f%% Full)", ((float)eeprom / eeprommax) * 100);
|
||||
+ }
|
||||
+ printf ("\n(.eeprom)\n\n");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
print_sizes (bfd *file)
|
||||
{
|
||||
if (show_common)
|
||||
calculate_common_size (file);
|
||||
- if (berkeley_format)
|
||||
- print_berkeley_format (file);
|
||||
- else
|
||||
- print_sysv_format (file);
|
||||
+ switch (format)
|
||||
+ {
|
||||
+ case format_sysv:
|
||||
+ print_sysv_format (file);
|
||||
+ break;
|
||||
+ case format_bsd:
|
||||
+ print_berkeley_format (file);
|
||||
+ break;
|
||||
+ case format_avr:
|
||||
+ default:
|
||||
+ print_avr_format (file);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,45 @@
|
|||
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) }
|
|
@ -0,0 +1,99 @@
|
|||
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
|
|
@ -0,0 +1,22 @@
|
|||
--- bfd/elf32-avr.c.old 2008-11-11 10:30:09.000000000 -0700
|
||||
+++ bfd/elf32-avr.c 2008-11-11 10:31:40.171875000 -0700
|
||||
@@ -1298,6 +1298,7 @@ bfd_elf_avr_final_write_processing (bfd
|
||||
|
||||
case bfd_mach_avr25:
|
||||
val = E_AVR_MACH_AVR25;
|
||||
+ break;
|
||||
|
||||
case bfd_mach_avr3:
|
||||
val = E_AVR_MACH_AVR3;
|
||||
@@ -1305,9 +1306,11 @@ bfd_elf_avr_final_write_processing (bfd
|
||||
|
||||
case bfd_mach_avr31:
|
||||
val = E_AVR_MACH_AVR31;
|
||||
+ break;
|
||||
|
||||
case bfd_mach_avr35:
|
||||
val = E_AVR_MACH_AVR35;
|
||||
+ break;
|
||||
|
||||
case bfd_mach_avr4:
|
||||
val = E_AVR_MACH_AVR4;
|
|
@ -0,0 +1,594 @@
|
|||
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,
|
|
@ -0,0 +1,47 @@
|
|||
--- 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}.
|
|
@ -0,0 +1,21 @@
|
|||
--- 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,
|
Reference in a new issue