This commit is contained in:
Federico Fissore 2013-09-27 15:29:39 +02:00
commit d0ae43bb2f
119 changed files with 34583 additions and 0 deletions

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
*.bz2
objdir
*-build
avr-libc-1.6.4
binutils-2.20.1
gcc-4.3.2

442
avr-libc-patches/eeprom.h Normal file
View file

@ -0,0 +1,442 @@
/* Copyright (c) 2002, 2003, 2004, 2007 Marek Michalkiewicz
Copyright (c) 2005, 2006 Bjoern Haase
Copyright (c) 2008 Atmel Corporation
Copyright (c) 2008 Wouter van Gulik
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
/* $Id: eeprom.h,v 1.21.2.6 2008/08/19 22:10:39 arcanum Exp $ */
#ifndef _AVR_EEPROM_H_
#define _AVR_EEPROM_H_ 1
#include <avr/io.h>
#include <stddef.h> /* size_t */
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __ATTR_PURE__
# ifdef __DOXYGEN__
# define __ATTR_PURE__
# else
# define __ATTR_PURE__ __attribute__((__pure__))
# endif
#endif
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
uint16_t __eerd_word (const uint16_t *, uint8_t (*)(const uint8_t *))
__ATTR_PURE__;
uint32_t __eerd_dword (const uint32_t *, uint8_t (*)(const uint8_t *))
__ATTR_PURE__;
void __eerd_block (void *, const void *, size_t, uint8_t (*)(const uint8_t *));
void __eewr_word (uint16_t *, uint16_t, void (*)(uint8_t *, uint8_t));
void __eewr_dword (uint32_t *, uint32_t, void (*)(uint8_t *, uint8_t));
void __eewr_block (void *, const void *, size_t, void (*)(uint8_t *, uint8_t));
#endif /* (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) ) */
#if !E2END && !defined(__DOXYGEN__)
# ifndef __COMPILING_AVR_LIBC__
# warning "Device does not have EEPROM available."
# endif
/* Omit below for chips without EEPROM. */
#else
/** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
\code #include <avr/eeprom.h> \endcode
This header file declares the interface to some simple library
routines suitable for handling the data EEPROM contained in the
AVR microcontrollers. The implementation uses a simple polled
mode interface. Applications that require interrupt-controlled
EEPROM access to ensure that no time will be wasted in spinloops
will have to deploy their own implementation.
\note All of the read/write functions first make sure the EEPROM
is ready to be accessed. Since this may cause long delays if a
write operation is still pending, time-critical applications
should first poll the EEPROM e. g. using eeprom_is_ready() before
attempting any actual I/O. But this functions are not wait until
SELFPRGEN in SPMCSR becomes zero. Do this manually, if your
softwate contains the Flash burning.
\note As these functions modify IO registers, they are known to be
non-reentrant. If any of these functions are used from both,
standard and interrupt context, the applications must ensure
proper protection (e.g. by disabling interrupts before accessing
them).
\note All write functions force erase_and_write programming mode.
*/
/** \def EEMEM
\ingroup avr_eeprom
Attribute expression causing a variable to be allocated within the
.eeprom section. */
#define EEMEM __attribute__((section(".eeprom")))
/* Register definitions */
/* Check for aliases. */
#if !defined(EEWE) && defined(EEPE)
# define EEWE EEPE
#endif
#if !defined(EEMWE) && defined(EEMPE)
# define EEMWE EEMPE
#endif
#if !defined(EECR) && defined(DEECR)
/* AT86RF401 */
# define EECR DEECR
# define EEAR DEEAR
# define EEARL DEEAR
# define EEDR DEEDR
# define EERE EER
# define EEWE EEL
# define EEMWE EEU
#endif
#if !defined(EECR) || !defined(EEDR) || !defined(EEARL)
# if !defined(__EEPROM_REG_LOCATIONS__) \
&& !defined(EEPROM_REG_LOCATIONS_OVERRIDE)
/* 6-byte string denoting where to find the EEPROM registers in memory
space. Adresses denoted in hex syntax with uppercase letters. Used
by the EEPROM subroutines.
First two letters: EECR address.
Second two letters: EEDR address.
Last two letters: EEAR address.
*/
# error "Unknown EEPROM register(s) location."
# endif
/* If needed, override the locations defined in the IO headers. */
# ifdef EEPROM_REG_LOCATIONS_OVERRIDE
# undef __EEPROM_REG_LOCATIONS__
# define __EEPROM_REG_LOCATIONS__ EEPROM_REG_LOCATIONS_OVERRIDE
# endif
# define CONCAT1(a, b) CONCAT2(a, b)
# define CONCAT2(a, b) a ## b
# define HEXNR CONCAT1(0x, __EEPROM_REG_LOCATIONS__)
# undef EECR
# define EECR _SFR_IO8((HEXNR >> 16) & 0xFF)
# undef EEDR
# define EEDR _SFR_IO8((HEXNR >> 8) & 0xFF)
# undef EEAR
# define EEAR _SFR_IO8(HEXNR & 0xFF)
# undef EEARH
# undef EEARL
# define EEARL EEAR
#endif
/** \def eeprom_is_ready
\ingroup avr_eeprom
\returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
*/
#if defined(__DOXYGEN__)
# define eeprom_is_ready()
#elif defined(DEECR)
# define eeprom_is_ready() bit_is_clear(DEECR, BSY)
#else
# define eeprom_is_ready() bit_is_clear(EECR, EEWE)
#endif
/** \def eeprom_busy_wait
\ingroup avr_eeprom
Loops until the eeprom is no longer busy.
\returns Nothing.
*/
#define eeprom_busy_wait() do {} while (!eeprom_is_ready())
/** \ingroup avr_eeprom
Read one byte from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
do {} while (!eeprom_is_ready ());
#if E2END <= 0xFF
EEARL = (uint8_t)(uint16_t)__p;
#else
EEAR = (uint16_t)__p;
#endif
/* Use inline assembly below as some AVRs have problems with accessing
EECR with STS instructions. For example, see errata for ATmega64.
The code below also assumes that EECR and EEDR are in the I/O space.
*/
uint8_t __result;
__asm__ __volatile__
(
"/* START EEPROM READ CRITICAL SECTION */ \n\t"
"sbi %1, %2 \n\t"
"in %0, %3 \n\t"
"/* END EEPROM READ CRITICAL SECTION */ \n\t"
: "=r" (__result)
: "i" (_SFR_IO_ADDR(EECR)),
"i" (EERE),
"i" (_SFR_IO_ADDR(EEDR))
);
return __result;
}
/** \ingroup avr_eeprom
Read one 16-bit word (little endian) from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint16_t eeprom_read_word (const uint16_t *__p)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
return __eerd_word (__p, eeprom_read_byte);
#else
/* If ATmega256x device, do not call function. */
union
{
uint16_t word;
struct
{
uint8_t lo;
uint8_t hi;
} byte;
} x;
x.byte.lo = eeprom_read_byte ((const uint8_t *)__p);
x.byte.hi = eeprom_read_byte ((const uint8_t *)__p + 1);
return x.word;
#endif
}
/** \ingroup avr_eeprom
Read one 32-bit double word (little endian) from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__
uint32_t eeprom_read_dword (const uint32_t *__p)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
return __eerd_dword (__p, eeprom_read_byte);
#else
/* If ATmega256x device, do not call function. */
union
{
uint32_t dword;
struct
{
uint8_t byte0;
uint8_t byte1;
uint8_t byte2;
uint8_t byte3;
} byte;
} x;
x.byte.byte0 = eeprom_read_byte ((const uint8_t *)__p);
x.byte.byte1 = eeprom_read_byte ((const uint8_t *)__p + 1);
x.byte.byte2 = eeprom_read_byte ((const uint8_t *)__p + 2);
x.byte.byte3 = eeprom_read_byte ((const uint8_t *)__p + 3);
return x.dword;
#endif
}
/** \ingroup avr_eeprom
Read a block of \a __n bytes from EEPROM address \a __src to SRAM
\a __dst.
*/
static __inline__ void
eeprom_read_block (void *__dst, const void *__src, size_t __n)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
__eerd_block (__dst, __src, __n, eeprom_read_byte);
#else
/* If ATmega256x device, do not call function. */
char *_myDstPtr;
char *_mySrcPtr;
_myDstPtr = (char *)__dst;
_mySrcPtr = (char *)__src;
while (__n--)
{
//* Jul 6, 2010 modifed by Mark Sproul to work with the 2560
// *(char *)__dst++ = eeprom_read_byte((const uint8_t *)__src++);
*_myDstPtr = eeprom_read_byte((const uint8_t *)_mySrcPtr);
_myDstPtr++;
_mySrcPtr++;
}
#endif
}
/** \ingroup avr_eeprom
Write a byte \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
do {} while (!eeprom_is_ready ());
#if defined(EEPM0) && defined(EEPM1)
EECR = 0; /* Set programming mode: erase and write. */
#elif defined(EEPM0) || defined(EEPM1)
# warning "Unknown EECR register, eeprom_write_byte() has become outdated."
#endif
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
#endif
EEDR = __value;
__asm__ __volatile__ (
"/* START EEPROM WRITE CRITICAL SECTION */\n\t"
"in r0, %[__sreg] \n\t"
"cli \n\t"
"sbi %[__eecr], %[__eemwe] \n\t"
"sbi %[__eecr], %[__eewe] \n\t"
"out %[__sreg], r0 \n\t"
"/* END EEPROM WRITE CRITICAL SECTION */"
:
: [__eecr] "i" (_SFR_IO_ADDR(EECR)),
[__sreg] "i" (_SFR_IO_ADDR(SREG)),
[__eemwe] "i" (EEMWE),
[__eewe] "i" (EEWE)
: "r0"
);
}
/** \ingroup avr_eeprom
Write a word \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_word (uint16_t *__p, uint16_t __value)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
__eewr_word (__p, __value, eeprom_write_byte);
#else
/* If ATmega256x device, do not call function. */
union
{
uint16_t word;
struct
{
uint8_t lo;
uint8_t hi;
} byte;
} x;
x.word = __value;
eeprom_write_byte ((uint8_t *)__p, x.byte.lo);
eeprom_write_byte ((uint8_t *)__p + 1, x.byte.hi);
#endif
}
/** \ingroup avr_eeprom
Write a 32-bit double word \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_dword (uint32_t *__p, uint32_t __value)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
__eewr_dword (__p, __value, eeprom_write_byte);
#else
/* If ATmega256x device, do not call function. */
union
{
uint32_t dword;
struct
{
uint8_t byte0;
uint8_t byte1;
uint8_t byte2;
uint8_t byte3;
} byte;
} x;
x.dword = __value;
eeprom_write_byte ((uint8_t *)__p, x.byte.byte0);
eeprom_write_byte ((uint8_t *)__p + 1, x.byte.byte1);
eeprom_write_byte ((uint8_t *)__p + 2, x.byte.byte2);
eeprom_write_byte ((uint8_t *)__p + 3, x.byte.byte3);
#endif
}
/** \ingroup avr_eeprom
Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
\note The argument order is mismatch with common functions like strcpy().
*/
static __inline__ void
eeprom_write_block (const void *__src, void *__dst, size_t __n)
{
#if (! (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) )
__eewr_block (__dst, __src, __n, eeprom_write_byte);
#else
/* If ATmega256x device, do not call function. */
uint8_t *_myDstPtr;
uint8_t *_mySrcPtr;
//* Jul 6, 2010 modifed by Mark Sproul to work with the 2560
_myDstPtr = (uint8_t *)__dst;
_mySrcPtr = (uint8_t *)__src;
while (__n--)
{
// eeprom_write_byte((uint8_t *)__dst++, *(uint8_t *)__src++);
eeprom_write_byte(_myDstPtr++, *_mySrcPtr++);
}
#endif
}
/** \name IAR C compatibility defines */
/*@{*/
/** \def _EEPUT
\ingroup avr_eeprom
Write a byte to EEPROM. Compatibility define for IAR C. */
#define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
/** \def _EEGET
\ingroup avr_eeprom
Read a byte from EEPROM. Compatibility define for IAR C. */
#define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
/*@}*/
#endif /* E2END || defined(__DOXYGEN__) */
#ifdef __cplusplus
}
#endif
#endif /* !_AVR_EEPROM_H */

29
avr-libc.build.bash Executable file
View file

@ -0,0 +1,29 @@
#!/bin/bash -e
if [[ ! -f avr-libc-1.6.4.tar.bz2 ]] ;
then
wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.6.4.tar.bz2
fi
tar xfjv avr-libc-1.6.4.tar.bz2
cp avr-libc-patches/eeprom.h avr-libc-1.6.4/include/avr/eeprom.h
mkdir -p objdir
cd objdir
PREFIX=`pwd`
cd -
mkdir -p avr-libc-build
cd avr-libc-build
CONFARGS=" \
--prefix=$PREFIX \
--host=avr"
PATH=$PREFIX/bin:$PATH CFLAGS=-w CXXFLAGS=-w ../avr-libc-1.6.4/configure $CONFARGS
PATH=$PREFIX/bin:$PATH nice -n 10 make -j 5
PATH=$PREFIX/bin:$PATH make install

View file

@ -0,0 +1,8 @@
To make it possible to have different versions of binutils packages
installed for diffrent targets the locale and most common documentation have
been removed from the cross packages. If you want these files aswell you'll
have to install the same version of the native package as of this package.
For nesC/TinyOS users, the addition of "OPTFLAGS:= -Wa,--allow-dollars"
to their makefiles will allow the use of dollars in function names (with
nesC >=1.1.3).

View file

@ -0,0 +1,521 @@
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
@@ -36,10 +36,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
@@ -48,9 +69,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;
@@ -64,6 +84,246 @@ 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 AVR20K 20480UL
+#define AVR24K 24576UL
+#define AVR32K 32768UL
+#define AVR36K 36864UL
+#define AVR40K 40960UL
+#define AVR64K 65536UL
+#define AVR68K 69632UL
+#define AVR128K 131072UL
+#define AVR136K 139264UL
+#define AVR200K 204800UL
+#define AVR256K 262144UL
+#define AVR264K 270336UL
+
+typedef struct
+{
+ char *name;
+ long flash;
+ long ram;
+ long eeprom;
+} avr_device_t;
+
+avr_device_t avr[] =
+{
+ {"atxmega256a3", AVR264K, AVR16K, AVR4K},
+ {"atxmega256a3b", AVR264K, AVR16K, AVR4K},
+ {"atxmega256d3", AVR264K, AVR16K, AVR4K},
+
+ {"atmega2560", AVR256K, AVR8K, AVR4K},
+ {"atmega2561", AVR256K, AVR8K, AVR4K},
+
+ {"atxmega192a3", AVR200K, AVR16K, AVR2K},
+ {"atxmega192d3", AVR200K, AVR16K, AVR2K},
+
+ {"atxmega128a1", AVR136K, AVR8K, AVR2K},
+ {"atxmega128a1u", AVR136K, AVR8K, AVR2K},
+ {"atxmega128a3", AVR136K, AVR8K, AVR2K},
+ {"atxmega128d3", AVR136K, AVR8K, AVR2K},
+
+ {"at43usb320", AVR128K, 608UL, 0UL},
+ {"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},
+ {"atmega128rfa1", AVR128K, AVR16K, AVR4K},
+ {"atmega103", AVR128K, 4000UL, AVR4K},
+
+ {"atxmega64a1", AVR68K, AVR4K, AVR2K},
+ {"atxmega64a1u", AVR68K, AVR4K, AVR2K},
+ {"atxmega64a3", AVR68K, AVR4K, AVR2K},
+ {"atxmega64d3", AVR68K, AVR4K, AVR2K},
+
+ {"at90can64", AVR64K, AVR4K, AVR2K},
+ {"at90scr100", AVR64K, AVR4K, AVR2K},
+ {"at90usb646", AVR64K, AVR4K, AVR2K},
+ {"at90usb647", AVR64K, AVR4K, AVR2K},
+ {"atmega64", AVR64K, AVR4K, AVR2K},
+ {"atmega640", AVR64K, AVR8K, AVR4K},
+ {"atmega644", AVR64K, AVR4K, AVR2K},
+ {"atmega644a", AVR64K, AVR4K, AVR2K},
+ {"atmega644p", AVR64K, AVR4K, AVR2K},
+ {"atmega644pa", AVR64K, AVR4K, AVR2K},
+ {"atmega645", AVR64K, AVR4K, AVR2K},
+ {"atmega645a", AVR64K, AVR4K, AVR2K},
+ {"atmega645p", AVR64K, AVR4K, AVR2K},
+ {"atmega6450", AVR64K, AVR4K, AVR2K},
+ {"atmega6450a", AVR64K, AVR4K, AVR2K},
+ {"atmega6450p", AVR64K, AVR4K, AVR2K},
+ {"atmega649", AVR64K, AVR4K, AVR2K},
+ {"atmega649a", AVR64K, AVR4K, AVR2K},
+ {"atmega649p", AVR64K, AVR4K, AVR2K},
+ {"atmega6490", AVR64K, AVR4K, AVR2K},
+ {"atmega6490a", AVR64K, AVR4K, AVR2K},
+ {"atmega6490p", AVR64K, AVR4K, AVR2K},
+ {"atmega64c1", AVR64K, AVR4K, AVR2K},
+ {"atmega64hve", AVR64K, AVR4K, AVR1K},
+ {"atmega64m1", AVR64K, AVR4K, AVR2K},
+ {"m3000", AVR64K, AVR4K, 0UL},
+
+ {"atmega406", AVR40K, AVR2K, AVR512},
+
+ {"atxmega32a4", AVR36K, AVR4K, AVR1K},
+ {"atxmega32d4", AVR36K, AVR4K, AVR1K},
+
+ {"at90can32", AVR32K, AVR2K, AVR1K},
+ {"at94k", AVR32K, AVR4K, 0UL},
+ {"atmega32", AVR32K, AVR2K, AVR1K},
+ {"atmega323", AVR32K, AVR2K, AVR1K},
+ {"atmega324a", AVR32K, AVR2K, AVR1K},
+ {"atmega324p", AVR32K, AVR2K, AVR1K},
+ {"atmega324pa", AVR32K, AVR2K, AVR1K},
+ {"atmega325", AVR32K, AVR2K, AVR1K},
+ {"atmega325a", AVR32K, AVR2K, AVR1K},
+ {"atmega325p", AVR32K, AVR2K, AVR1K},
+ {"atmega3250", AVR32K, AVR2K, AVR1K},
+ {"atmega3250a", AVR32K, AVR2K, AVR1K},
+ {"atmega3250p", AVR32K, AVR2K, AVR1K},
+ {"atmega328", AVR32K, AVR2K, AVR1K},
+ {"atmega328p", AVR32K, AVR2K, AVR1K},
+ {"atmega329", AVR32K, AVR2K, AVR1K},
+ {"atmega329a", AVR32K, AVR2K, AVR1K},
+ {"atmega329p", AVR32K, AVR2K, AVR1K},
+ {"atmega329pa", AVR32K, AVR2K, AVR1K},
+ {"atmega3290", AVR32K, AVR2K, AVR1K},
+ {"atmega3290a", AVR32K, AVR2K, AVR1K},
+ {"atmega3290p", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32c1", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32m1", AVR32K, AVR2K, AVR1K},
+ {"atmega32u2", AVR32K, AVR1K, AVR1K},
+ {"atmega32u4", AVR32K, 2560UL, AVR1K},
+ {"atmega32u6", AVR32K, 2560UL, AVR1K},
+
+ {"at43usb355", AVR24K, 1120UL, 0UL},
+
+ {"atxmega16a4", AVR20K, AVR2K, AVR1K},
+ {"atxmega16d4", AVR20K, AVR2K, AVR1K},
+
+ {"at76c711", AVR16K, AVR2K, 0UL},
+ {"at90pwm216", AVR16K, AVR1K, AVR512},
+ {"at90pwm316", AVR16K, AVR1K, AVR512},
+ {"at90usb162", AVR16K, AVR512, AVR512},
+ {"atmega16", AVR16K, AVR1K, AVR512},
+ {"atmega16a", AVR16K, AVR1K, AVR512},
+ {"atmega161", AVR16K, AVR1K, AVR512},
+ {"atmega162", AVR16K, AVR1K, AVR512},
+ {"atmega163", AVR16K, AVR1K, AVR512},
+ {"atmega164", AVR16K, AVR1K, AVR512},
+ {"atmega164a", AVR16K, AVR1K, AVR512},
+ {"atmega164p", AVR16K, AVR1K, AVR512},
+ {"atmega165a", AVR16K, AVR1K, AVR512},
+ {"atmega165", AVR16K, AVR1K, AVR512},
+ {"atmega165p", AVR16K, AVR1K, AVR512},
+ {"atmega168", AVR16K, AVR1K, AVR512},
+ {"atmega168a", AVR16K, AVR1K, AVR512},
+ {"atmega168p", AVR16K, AVR1K, AVR512},
+ {"atmega169", AVR16K, AVR1K, AVR512},
+ {"atmega169a", AVR16K, AVR1K, AVR512},
+ {"atmega169p", AVR16K, AVR1K, AVR512},
+ {"atmega169pa", AVR16K, AVR1K, AVR512},
+ {"atmega16hva", AVR16K, 768UL, AVR256},
+ {"atmega16hva2", AVR16K, AVR1K, AVR256},
+ {"atmega16hvb", AVR16K, AVR1K, AVR512},
+ {"atmega16m1", AVR16K, AVR1K, AVR512},
+ {"atmega16u2", AVR16K, AVR512, AVR512},
+ {"atmega16u4", AVR16K, 1280UL, AVR512},
+ {"attiny167", AVR16K, AVR512, AVR512},
+
+ {"at90c8534", AVR8K, 352UL, AVR512},
+ {"at90pwm1", AVR8K, AVR512, AVR512},
+ {"at90pwm2", AVR8K, AVR512, AVR512},
+ {"at90pwm2b", AVR8K, AVR512, AVR512},
+ {"at90pwm3", AVR8K, AVR512, AVR512},
+ {"at90pwm3b", AVR8K, AVR512, AVR512},
+ {"at90pwm81", AVR8K, AVR256, AVR512},
+ {"at90s8515", AVR8K, AVR512, AVR512},
+ {"at90s8535", AVR8K, AVR512, AVR512},
+ {"at90usb82", AVR8K, AVR512, AVR512},
+ {"ata6289", AVR8K, AVR512, 320UL},
+ {"atmega8", AVR8K, AVR1K, AVR512},
+ {"atmega8515", AVR8K, AVR512, AVR512},
+ {"atmega8535", AVR8K, AVR512, AVR512},
+ {"atmega88", AVR8K, AVR1K, AVR512},
+ {"atmega88a", AVR8K, AVR1K, AVR512},
+ {"atmega88p", AVR8K, AVR1K, AVR512},
+ {"atmega88pa", AVR8K, AVR1K, AVR512},
+ {"atmega8hva", AVR8K, 768UL, AVR256},
+ {"atmega8u2", AVR8K, AVR512, AVR512},
+ {"attiny84", AVR8K, AVR512, AVR512},
+ {"attiny84a", AVR8K, AVR512, AVR512},
+ {"attiny85", AVR8K, AVR512, AVR512},
+ {"attiny861", AVR8K, AVR512, AVR512},
+ {"attiny861a", AVR8K, AVR512, AVR512},
+ {"attiny87", AVR8K, AVR512, AVR512},
+ {"attiny88", AVR8K, AVR512, AVR64},
+
+ {"at90s4414", AVR4K, 352UL, AVR256},
+ {"at90s4433", AVR4K, AVR128, AVR256},
+ {"at90s4434", AVR4K, 352UL, AVR256},
+ {"atmega48", AVR4K, AVR512, AVR256},
+ {"atmega48a", AVR4K, AVR512, AVR256},
+ {"atmega48p", AVR4K, AVR512, AVR256},
+ {"attiny4313", AVR4K, AVR256, AVR256},
+ {"attiny43u", AVR4K, AVR256, AVR64},
+ {"attiny44", AVR4K, AVR256, AVR256},
+ {"attiny44a", AVR4K, AVR256, AVR256},
+ {"attiny45", AVR4K, AVR256, AVR256},
+ {"attiny461", AVR4K, AVR256, AVR256},
+ {"attiny461a", AVR4K, AVR256, AVR256},
+ {"attiny48", AVR4K, AVR256, AVR64},
+
+ {"at86rf401", AVR2K, 224UL, AVR128},
+ {"at90s2313", AVR2K, AVR128, AVR128},
+ {"at90s2323", AVR2K, AVR128, AVR128},
+ {"at90s2333", AVR2K, 224UL, AVR128},
+ {"at90s2343", AVR2K, AVR128, AVR128},
+ {"attiny20", AVR2K, AVR128, 0UL},
+ {"attiny22", AVR2K, 224UL, AVR128},
+ {"attiny2313", AVR2K, AVR128, AVR128},
+ {"attiny2313a", AVR2K, AVR128, AVR128},
+ {"attiny24", AVR2K, AVR128, AVR128},
+ {"attiny24a", AVR2K, AVR128, AVR128},
+ {"attiny25", AVR2K, AVR128, AVR128},
+ {"attiny26", AVR2K, AVR128, AVR128},
+ {"attiny261", AVR2K, AVR128, AVR128},
+ {"attiny261a", AVR2K, AVR128, AVR128},
+ {"attiny28", AVR2K, 0UL, 0UL},
+ {"attiny40", AVR2K, AVR256, 0UL},
+
+ {"at90s1200", AVR1K, 0UL, AVR64},
+ {"attiny9", AVR1K, 32UL, 0UL},
+ {"attiny10", AVR1K, 32UL, 0UL},
+ {"attiny11", AVR1K, 0UL, AVR64},
+ {"attiny12", AVR1K, 0UL, AVR64},
+ {"attiny13", AVR1K, AVR64, AVR64},
+ {"attiny13a", AVR1K, AVR64, AVR64},
+ {"attiny15", AVR1K, 0UL, AVR64},
+
+ {"attiny4", AVR512, 32UL, 0UL},
+ {"attiny5", AVR512, 32UL, 0UL},
+};
+
+static char *avrmcu = NULL;
+
+
static char *target = NULL;
/* Forward declarations. */
@@ -79,7 +337,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\
@@ -88,11 +337,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)
@@ -103,6 +359,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[] =
{
@@ -110,6 +368,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},
@@ -141,7 +399,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)
{
@@ -150,11 +409,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);
@@ -162,6 +424,10 @@ main (int argc, char **argv)
}
break;
+ case OPTION_MCU:
+ avrmcu = optarg;
+ break;
+
case OPTION_TARGET:
target = optarg;
break;
@@ -190,11 +457,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;
@@ -240,7 +509,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;
@@ -599,13 +869,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

View file

@ -0,0 +1,38 @@
diff -ruwN ld/scripttempl/avr.sc ld/scripttempl/avr.sc
--- ld/scripttempl/avr.sc 2009-10-09 18:42:35.000000000 +0530
+++ ld/scripttempl/avr.sc 2010-03-11 12:26:00.563046000 +0530
@@ -7,6 +7,9 @@
text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
+ fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
+ lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
+ signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
}
SECTIONS
@@ -196,6 +199,24 @@
${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) }

View file

@ -0,0 +1,29 @@
diff -ruwN gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2010-03-11 14:56:16.484109300 +0530
+++ gas/config/tc-avr.c 2010-03-11 14:58:59.248690500 +0530
@@ -24,6 +24,7 @@
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
+#include "dwarf2dbg.h"
struct avr_opcodes_s
{
@@ -1368,6 +1369,7 @@
dwarf2_emit_insn (0);
+ dwarf2_emit_insn (0);
/* We used to set input_line_pointer to the result of get_operands,
but that is wrong. Our caller assumes we don't change it. */
{
diff -ruwN gas/config/tc-avr.h gas/config/tc-avr.h
--- gas/config/tc-avr.h 2010-03-11 14:56:16.484109300 +0530
+++ gas/config/tc-avr.h 2010-03-11 14:58:59.264313900 +0530
@@ -147,3 +147,6 @@
/* This target is buggy, and sets fix size too large. */
#define TC_FX_SIZE_SLACK(FIX) 2
+
+/* keep DWARF2_ADDR_SIZE in consistency with C compiler produced information */
+#define DWARF2_ADDR_SIZE(bfd) 4

View file

@ -0,0 +1,28 @@
diff -ruwN gas/dwarf2dbg.c gas/dwarf2dbg.c
--- gas/dwarf2dbg.c 2010-03-11 15:06:25.773290700 +0530
+++ gas/dwarf2dbg.c 2010-03-11 15:08:20.410311300 +0530
@@ -112,8 +112,11 @@
Note: If you want to change this, you'll have to update the
"standard_opcode_lengths" table that is emitted below in
out_debug_line(). */
+#ifndef TC_AVR
#define DWARF2_LINE_OPCODE_BASE 13
-
+#else
+#define DWARF2_LINE_OPCODE_BASE 10
+#endif
#ifndef DWARF2_LINE_BASE
/* Minimum line offset in a special line info. opcode. This value
was chosen to give a reasonable range of values. */
@@ -1439,9 +1442,11 @@
out_byte (0); /* DW_LNS_set_basic_block */
out_byte (0); /* DW_LNS_const_add_pc */
out_byte (1); /* DW_LNS_fixed_advance_pc */
+#ifndef TC_AVR
out_byte (0); /* DW_LNS_set_prologue_end */
out_byte (0); /* DW_LNS_set_epilogue_begin */
out_byte (1); /* DW_LNS_set_isa */
+#endif
out_file_list ();

View file

@ -0,0 +1,12 @@
diff -Naurp ./gas/config/tc-avr.c ./gas/config/tc-avr.c
--- ./gas/config/tc-avr.c 2011-02-08 10:59:27.000000000 -0600
+++ ./gas/config/tc-avr.c 2011-02-08 11:01:47.000000000 -0600
@@ -378,7 +378,7 @@ void
md_show_usage (FILE *stream)
{
fprintf (stream,
- _("AVR options:\n"
+ _("AVR Assembler options:\n"
" -mmcu=[avr-name] select microcontroller variant\n"
" [avr-name] can be:\n"
" avr1 - classic AVR core without data RAM\n"

View file

@ -0,0 +1,679 @@
avrxmega1
avrxmega2
avrxmega3
avrxmega4
avrxmega5
avrxmega6
avrxmega7
atxmega16a4
atxmega16d4
atxmega32d4
atxmega32a4
atxmega64a3
atxmega64d3
atxmega64a1
atxmega128a3
atxmega128d3
atxmega192a3
atxmega192d3
atxmega256a3
atxmega256a3b
atxmega256d3
atxmega128a1
=======================================================
diff -ruwN bfd/archures.c bfd/archures.c
--- bfd/archures.c 2010-03-11 15:11:01.594960800 +0530
+++ bfd/archures.c 2010-03-11 15:12:26.227001600 +0530
@@ -368,6 +368,13 @@
.#define bfd_mach_avr5 5
.#define bfd_mach_avr51 51
.#define bfd_mach_avr6 6
+.#define bfd_mach_avrxmega1 101
+.#define bfd_mach_avrxmega2 102
+.#define bfd_mach_avrxmega3 103
+.#define bfd_mach_avrxmega4 104
+.#define bfd_mach_avrxmega5 105
+.#define bfd_mach_avrxmega6 106
+.#define bfd_mach_avrxmega7 107
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
diff -ruwN bfd/bfd-in2.h bfd/bfd-in2.h
--- bfd/bfd-in2.h 2010-03-11 15:11:01.594960800 +0530
+++ bfd/bfd-in2.h 2010-03-11 15:12:26.242627900 +0530
@@ -2035,6 +2035,13 @@
#define bfd_mach_avr5 5
#define bfd_mach_avr51 51
#define bfd_mach_avr6 6
+#define bfd_mach_avrxmega1 101
+#define bfd_mach_avrxmega2 102
+#define bfd_mach_avrxmega3 103
+#define bfd_mach_avrxmega4 104
+#define bfd_mach_avrxmega5 105
+#define bfd_mach_avrxmega6 106
+#define bfd_mach_avrxmega7 107
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
diff -ruwN bfd/cpu-avr.c bfd/cpu-avr.c
--- bfd/cpu-avr.c 2010-03-11 15:11:01.813729000 +0530
+++ bfd/cpu-avr.c 2010-03-11 15:12:26.242627900 +0530
@@ -133,7 +133,29 @@
N (22, bfd_mach_avr51, "avr:51", FALSE, & arch_info_struct[9]),
/* 3-Byte PC. */
- N (22, bfd_mach_avr6, "avr:6", FALSE, NULL)
+ N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[10]),
+
+ /* Xmega 1 */
+ N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[11]),
+
+ /* Xmega 2 */
+ N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[12]),
+
+ /* Xmega 3 */
+ N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[13]),
+
+ /* Xmega 4 */
+ N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[14]),
+
+ /* Xmega 5 */
+ N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[15]),
+
+ /* Xmega 6 */
+ N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[16]),
+
+ /* Xmega 7 */
+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
+
};
const bfd_arch_info_type bfd_avr_arch =
diff -ruwN bfd/elf32-avr.c bfd/elf32-avr.c
--- bfd/elf32-avr.c 2010-03-11 15:11:02.079376100 +0530
+++ bfd/elf32-avr.c 2010-03-11 15:12:26.258254200 +0530
@@ -1328,6 +1328,34 @@
case bfd_mach_avr6:
val = E_AVR_MACH_AVR6;
break;
+
+ case bfd_mach_avrxmega1:
+ val = E_AVR_MACH_XMEGA1;
+ break;
+
+ case bfd_mach_avrxmega2:
+ val = E_AVR_MACH_XMEGA2;
+ break;
+
+ case bfd_mach_avrxmega3:
+ val = E_AVR_MACH_XMEGA3;
+ break;
+
+ case bfd_mach_avrxmega4:
+ val = E_AVR_MACH_XMEGA4;
+ break;
+
+ case bfd_mach_avrxmega5:
+ val = E_AVR_MACH_XMEGA5;
+ break;
+
+ case bfd_mach_avrxmega6:
+ val = E_AVR_MACH_XMEGA6;
+ break;
+
+ case bfd_mach_avrxmega7:
+ val = E_AVR_MACH_XMEGA7;
+ break;
}
elf_elfheader (abfd)->e_machine = EM_AVR;
@@ -1390,6 +1418,34 @@
case E_AVR_MACH_AVR6:
e_set = bfd_mach_avr6;
break;
+
+ case E_AVR_MACH_XMEGA1:
+ e_set = bfd_mach_avrxmega1;
+ break;
+
+ case E_AVR_MACH_XMEGA2:
+ e_set = bfd_mach_avrxmega2;
+ break;
+
+ case E_AVR_MACH_XMEGA3:
+ e_set = bfd_mach_avrxmega3;
+ break;
+
+ case E_AVR_MACH_XMEGA4:
+ e_set = bfd_mach_avrxmega4;
+ break;
+
+ case E_AVR_MACH_XMEGA5:
+ e_set = bfd_mach_avrxmega5;
+ break;
+
+ case E_AVR_MACH_XMEGA6:
+ e_set = bfd_mach_avrxmega6;
+ break;
+
+ case E_AVR_MACH_XMEGA7:
+ e_set = bfd_mach_avrxmega7;
+ break;
}
}
return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
diff -ruwN gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2010-03-11 15:11:05.704677700 +0530
+++ gas/config/tc-avr.c 2010-03-11 15:12:26.273880500 +0530
@@ -30,18 +30,19 @@
{
char * name;
char * constraints;
+ char *opcode;
int insn_size; /* In words. */
int isa;
unsigned int bin_opcode;
};
#define AVR_INSN(NAME, CONSTR, OPCODE, SIZE, ISA, BIN) \
-{#NAME, CONSTR, SIZE, ISA, BIN},
+{#NAME, CONSTR, OPCODE, SIZE, ISA, BIN},
struct avr_opcodes_s avr_opcodes[] =
{
#include "opcode/avr.h"
- {NULL, NULL, 0, 0, 0}
+ {NULL, NULL, NULL, 0, 0, 0}
};
const char comment_chars[] = ";";
@@ -80,6 +81,13 @@
{"avr5", AVR_ISA_AVR51, bfd_mach_avr5},
{"avr51", AVR_ISA_AVR51, bfd_mach_avr51},
{"avr6", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"avrxmega1", AVR_ISA_XMEGA, bfd_mach_avrxmega1},
+ {"avrxmega2", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"avrxmega3", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
+ {"avrxmega4", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"avrxmega5", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"avrxmega6", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"avrxmega7", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
{"attiny11", AVR_ISA_AVR1, bfd_mach_avr1},
{"attiny12", AVR_ISA_AVR1, bfd_mach_avr1},
@@ -216,6 +224,21 @@
{"m3001b", AVR_ISA_AVR51, bfd_mach_avr51},
{"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
{"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega16d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{NULL, 0, 0}
};
@@ -393,6 +416,11 @@
" avr5 - enhanced AVR core with up to 64K program memory\n"
" avr51 - enhanced AVR core with up to 128K program memory\n"
" avr6 - enhanced AVR core with up to 256K program memory\n"
+ " avrxmega3 - XMEGA, > 8K, <= 64K FLASH, > 64K RAM\n"
+ " avrxmega4 - XMEGA, > 64K, <= 128K FLASH, <= 64K RAM\n"
+ " avrxmega5 - XMEGA, > 64K, <= 128K FLASH, > 64K RAM\n"
+ " avrxmega6 - XMEGA, > 128K, <= 256K FLASH, <= 64K RAM\n"
+ " avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
" or immediate microcontroller name.\n"));
fprintf (stream,
_(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -820,7 +848,12 @@
if (*str == '+')
{
++str;
- op_mask |= 1;
+ char *s;
+ for (s = opcode->opcode; *s; ++s)
+ {
+ if (*s == '+')
+ op_mask |= (1 << (15 - (s - opcode->opcode)));
+ }
}
/* attiny26 can do "lpm" and "lpm r,Z" but not "lpm r,Z+". */
@@ -937,6 +970,16 @@
}
break;
+ case 'E':
+ {
+ unsigned int x;
+
+ x = avr_get_constant (str, 15);
+ str = input_line_pointer;
+ op_mask |= (x << 4);
+ }
+ break;
+
case '?':
break;
diff -ruwN gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2010-03-11 15:11:06.736013500 +0530
+++ gas/doc/c-avr.texi 2010-03-11 15:12:26.289506800 +0530
@@ -80,6 +80,27 @@
Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
atmega2560, atmega2561).
+Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
+memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
+atxmega32d4).
+
+Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
+memory space and greater than 64K data space (MCU types: atxmega32a4).
+
+Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
+memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
+
+Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
+memory space and greater than 64K data space (MCU types: atxmega64a1).
+
+Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
+memory space and less than 64K data space (MCU types: atxmega128a3,
+atxmega128d3, atxmega192a3, atxmega192d3, atxmega256a3, atxmega256a3b,
+atxmega192d3).
+
+Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
+memory space and greater than 64K data space (MCU types: atxmega128a1).
+
@cindex @code{-mall-opcodes} command line option, AVR
@item -mall-opcodes
Accept all AVR opcodes, even if not supported by @code{-mmcu}.
diff -ruwN include/elf/avr.h include/elf/avr.h
--- include/elf/avr.h 2010-03-11 15:11:19.705842500 +0530
+++ include/elf/avr.h 2010-03-11 15:12:26.336385700 +0530
@@ -40,6 +40,13 @@
#define E_AVR_MACH_AVR5 5
#define E_AVR_MACH_AVR51 51
#define E_AVR_MACH_AVR6 6
+#define E_AVR_MACH_XMEGA1 101
+#define E_AVR_MACH_XMEGA2 102
+#define E_AVR_MACH_XMEGA3 103
+#define E_AVR_MACH_XMEGA4 104
+#define E_AVR_MACH_XMEGA5 105
+#define E_AVR_MACH_XMEGA6 106
+#define E_AVR_MACH_XMEGA7 107
/* Relocations. */
START_RELOC_NUMBERS (elf_avr_reloc_type)
diff -ruwN include/opcode/avr.h include/opcode/avr.h
--- include/opcode/avr.h 2010-03-11 15:11:19.940237000 +0530
+++ include/opcode/avr.h 2010-03-11 15:12:26.336385700 +0530
@@ -30,6 +30,8 @@
#define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */
#define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */
#define AVR_ISA_MOVW 0x1000 /* device has MOVW */
+#define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */
+#define AVR_ISA_DES 0x4000 /* device has DES */
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
@@ -48,6 +50,8 @@
#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK)
#define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
+#define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND)
+#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
#define AVR_ISA_AVR1 AVR_ISA_TINY1
#define AVR_ISA_AVR2 AVR_ISA_2xxx
@@ -108,6 +112,7 @@
L - signed pc relative offset from -2048 to 2047
h - absolute code address (call, jmp)
S - immediate value from 0 to 7 (S = s << 4)
+ E - immediate value from 0 to 15, shifted left by 4 (des)
? - use this opcode entry if no parameters, else use next opcode entry
Order is important - some binary opcodes have more than one name,
@@ -168,7 +173,8 @@
AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588)
AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598)
AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
-AVR_INSN (spm, "", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "?", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "z", "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
@@ -282,3 +288,6 @@
AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519)
AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419)
+/* DES instruction for encryption and decryption */
+AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B)
+
diff -ruwN ld/Makefile.am ld/Makefile.am
--- ld/Makefile.am 2010-03-11 15:11:21.893524500 +0530
+++ ld/Makefile.am 2010-03-11 15:12:26.352012000 +0530
@@ -148,6 +148,13 @@
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -727,6 +734,34 @@
$(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr6 "$(tdir_avr2)"
+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
diff -ruwN ld/Makefile.in ld/Makefile.in
--- ld/Makefile.in 2010-03-11 15:11:21.909150800 +0530
+++ ld/Makefile.in 2010-03-11 15:12:26.367638300 +0530
@@ -434,6 +434,13 @@
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -2068,6 +2075,34 @@
$(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr6 "$(tdir_avr2)"
+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
diff -ruwN ld/configure.tgt ld/configure.tgt
--- ld/configure.tgt 2010-03-11 15:11:20.237136700 +0530
+++ ld/configure.tgt 2010-03-11 15:12:26.367638300 +0530
@@ -110,7 +110,7 @@
xscale-*-elf) targ_emul=armelf
;;
avr-*-*) targ_emul=avr2
- targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6"
+ targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7"
;;
bfin-*-elf) targ_emul=elf32bfin;
targ_extra_emuls="elf32bfinfd"
diff -ruwN ld/emulparams/avrxmega1.sh ld/emulparams/avrxmega1.sh
--- ld/emulparams/avrxmega1.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega1.sh 2010-03-11 15:12:26.398890900 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:101
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega2.sh ld/emulparams/avrxmega2.sh
--- ld/emulparams/avrxmega2.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega2.sh 2010-03-11 15:12:26.414517200 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:102
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega3.sh ld/emulparams/avrxmega3.sh
--- ld/emulparams/avrxmega3.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega3.sh 2010-03-11 15:12:26.414517200 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:103
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega4.sh ld/emulparams/avrxmega4.sh
--- ld/emulparams/avrxmega4.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega4.sh 2010-03-11 15:12:26.430143500 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:104
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega5.sh ld/emulparams/avrxmega5.sh
--- ld/emulparams/avrxmega5.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega5.sh 2010-03-11 15:12:26.430143500 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:105
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega6.sh ld/emulparams/avrxmega6.sh
--- ld/emulparams/avrxmega6.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega6.sh 2010-03-11 15:12:26.430143500 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:106
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emulparams/avrxmega7.sh ld/emulparams/avrxmega7.sh
--- ld/emulparams/avrxmega7.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrxmega7.sh 2010-03-11 15:12:26.445769800 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:107
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -ruwN ld/emultempl/avrelf.em ld/emultempl/avrelf.em
--- ld/emultempl/avrelf.em 2010-03-11 15:11:21.346604000 +0530
+++ ld/emultempl/avrelf.em 2010-03-11 15:12:26.383264600 +0530
@@ -71,8 +71,10 @@
gld${EMULATION_NAME}_before_allocation ();
- /* We only need stubs for the avr6 family. */
- if (strcmp ("${EMULATION_NAME}","avr6"))
+ /* We only need stubs for avr6, avrxmega6, and avrxmega7. */
+ if (strcmp ("${EMULATION_NAME}","avr6")
+ && strcmp ("${EMULATION_NAME}","avrxmega6")
+ && strcmp ("${EMULATION_NAME}","avrxmega7") )
avr_no_stubs = TRUE;
avr_elf_set_global_bfd_parameters ();
diff -ruwN opcodes/avr-dis.c opcodes/avr-dis.c
--- opcodes/avr-dis.c 2010-03-11 15:11:30.066079400 +0530
+++ opcodes/avr-dis.c 2010-03-11 15:12:26.398890900 +0530
@@ -50,7 +50,7 @@
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 @@
case 'z':
*buf++ = 'Z';
- if (insn & 0x1)
+
+ /* Check for post-increment. */
+ char *s;
+ for (s = opcode_str; *s; ++s)
+ {
+ if (*s == '+')
+ {
*buf++ = '+';
+ break;
+ }
+ }
+
*buf = '\0';
if (AVR_UNDEF_P (insn))
sprintf (comment, _("undefined"));
@@ -227,6 +237,10 @@
}
break;
+ case 'E':
+ sprintf (buf, "%d", (insn >> 4) & 15);
+ break;
+
case '?':
*buf = '\0';
break;
@@ -331,7 +345,8 @@
if (opcode->name)
{
- char *op = opcode->constraints;
+ char *constraints = opcode->constraints;
+ char *opcode_str = opcode->opcode;
insn2 = 0;
ok = 1;
@@ -342,14 +357,14 @@
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);
}
}

View file

@ -0,0 +1,229 @@
attiny461a
atmega48a
atmega88a
atmega88pa
atmega16a
atmega164a
atmega165a
atmega168a
atmega169a
atmega169pa
atmega324a
atmega324pa
atmega328
atmega329pa
atmega644a
atmega645a
atmega645p
atmega649p
atmega649a
atmega6450a
atmega6450p
atmega6490a
atmega6490p
atmega64hve
atmega16hva2
attiny84a
atmega325a
atmega3250a
atmega329a
atmega3290a
m3000
Remove: m3000f, m3000s, m3001b, atmega16c1, atmega4hvd, atmega8hvd, atmega8m1,
atmega8c1, attiny327
===========================================================
diff -Naurp gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2011-01-12 14:20:58.000000000 -0600
+++ gas/config/tc-avr.c 2011-01-12 14:24:17.000000000 -0600
@@ -115,12 +115,14 @@ static struct mcu_type_s mcu_types[] =
{"attiny44", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny44a", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny84", AVR_ISA_AVR25, bfd_mach_avr25},
+ {"attiny84a", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny25", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny45", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny85", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny261", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny261a", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny461", AVR_ISA_AVR25, bfd_mach_avr25},
+ {"attiny461a", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny861", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny861a", AVR_ISA_AVR25, bfd_mach_avr25},
{"attiny87", AVR_ISA_AVR25, bfd_mach_avr25},
@@ -134,7 +136,6 @@ static struct mcu_type_s mcu_types[] =
{"atmega103", AVR_ISA_AVR31, bfd_mach_avr31},
{"at43usb320", AVR_ISA_AVR31, bfd_mach_avr31},
{"attiny167", AVR_ISA_AVR35, bfd_mach_avr35},
- {"attiny327", AVR_ISA_AVR35, bfd_mach_avr35},
{"at90usb82", AVR_ISA_AVR35, bfd_mach_avr35},
{"at90usb162", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega8u2", AVR_ISA_AVR35, bfd_mach_avr35},
@@ -142,16 +143,15 @@ static struct mcu_type_s mcu_types[] =
{"atmega32u2", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega48", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega48a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48p", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88p", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88pa", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_AVR4, bfd_mach_avr4},
- {"atmega4hvd", AVR_ISA_AVR4, bfd_mach_avr4},
- {"atmega8hvd", AVR_ISA_AVR4, bfd_mach_avr4},
- {"atmega8c1", AVR_ISA_AVR4, bfd_mach_avr4},
- {"atmega8m1", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm1", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm2", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm2b", AVR_ISA_AVR4, bfd_mach_avr4},
@@ -159,40 +159,64 @@ static struct mcu_type_s mcu_types[] =
{"at90pwm3b", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm81", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega16", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega163", AVR_ISA_M161, bfd_mach_avr5},
+ {"atmega164a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega164p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega165a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega168a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169p", AVR_ISA_AVR5, bfd_mach_avr5},
- {"atmega16c1", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega323", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega324p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega325a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega3250a",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega328", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega328p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega329a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega329pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega3290a",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290p",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega406", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega64", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega640", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega644a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega645", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645a", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega649", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6450", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450p",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6490", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega64hve",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hva2",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"at90can32" , AVR_ISA_AVR5, bfd_mach_avr5},
@@ -211,6 +235,7 @@ static struct mcu_type_s mcu_types[] =
{"at90usb647", AVR_ISA_AVR5, bfd_mach_avr5},
{"at90scr100", AVR_ISA_AVR5, bfd_mach_avr5},
{"at94k", AVR_ISA_94K, bfd_mach_avr5},
+ {"m3000", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega128", AVR_ISA_AVR51, bfd_mach_avr51},
{"atmega1280", AVR_ISA_AVR51, bfd_mach_avr51},
{"atmega1281", AVR_ISA_AVR51, bfd_mach_avr51},
@@ -219,9 +244,6 @@ static struct mcu_type_s mcu_types[] =
{"at90can128", AVR_ISA_AVR51, bfd_mach_avr51},
{"at90usb1286",AVR_ISA_AVR51, bfd_mach_avr51},
{"at90usb1287",AVR_ISA_AVR51, bfd_mach_avr51},
- {"m3000f", AVR_ISA_AVR51, bfd_mach_avr51},
- {"m3000s", AVR_ISA_AVR51, bfd_mach_avr51},
- {"m3001b", AVR_ISA_AVR51, bfd_mach_avr51},
{"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
{"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
{"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
diff -Naurp gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2011-01-12 14:20:58.000000000 -0600
+++ gas/doc/c-avr.texi 2011-01-12 14:22:42.000000000 -0600
@@ -43,9 +43,10 @@ at90s8535).
Instruction set avr25 is for the classic AVR core with up to 8K program memory
space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
-attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
-attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461, attiny861,
-attiny861a, attiny87, attiny43u, attiny48, attiny88, at86rf401, ata6289).
+attiny2313a, attiny24, attiny24a, attiny4313, attiny43u, attiny44, attiny44a,
+attiny84, attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a,
+attiny461, attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48,
+attiny88, at86rf401, ata6289).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: at43usb355, at76c711).
@@ -54,28 +55,33 @@ Instruction set avr31 is for the classic
memory space (MCU types: atmega103, at43usb320).
Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP
-instructions (MCU types: attiny167, attiny327, at90usb82, at90usb162, atmega8u2,
+instructions (MCU types: attiny167, at90usb82, at90usb162, atmega8u2,
atmega16u2, atmega32u2).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega48p,atmega8, atmega88, atmega88p,
-atmega8515, atmega8535, atmega8hva, atmega4hvd, atmega8hvd, at90pwm1,
-at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, atmega8m1, atmega8c1).
+memory space (MCU types: atmega48, atmega48a, atmega48p,atmega8, atmega88,
+atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva,
+at90pwm1,at90pwm2, at90pwm2b, at90pwm3, at90pwm3b,
+at90pwm81).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega161, atmega162, atmega163, atmega164p,
-atmega165, atmega165p, atmega168, atmega168p, atmega169, atmega169p, atmega16c1,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega3250, atmega3250p,
-atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, atmega406, atmega64,
-atmega640, atmega644, atmega644p, atmega644pa, atmega645, atmega6450, atmega649,
-atmega6490, atmega16hva, atmega16hvb, atmega32hvb, at90can32, at90can64,
-at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1,
-atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
-at90scr100).
+memory space (MCU types: atmega16, atmega16a, atmega161, atmega162, atmega163,
+atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
+atmega168a, atmega168p, atmega169, atmega169p, atmega169pa,
+atmega32, atmega323, atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
+atmega325p, atmega3250, atmega3250a, atmega3250p, atmega328, atmega328p,
+atmega329, atmega329a, atmega329p, atmega329pa, atmega3290, atmega3290a,
+atmega3290p, atmega406, atmega64, atmega640, atmega644, atmega644a, atmega644p,
+atmega644pa, atmega645, atmega645a, atmega645p, atmega6450, atmega6450a,
+atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
+atmega6490p, atmega64hve, atmega16hva, atmega16hva2, atmega16hvb, atmega32hvb,
+at90can32, at90can64, at90pwm216, at90pwm316, atmega16u4, atmega32c1,
+atmega64c1, atmega64m1, atmega16m1, atmega32m1, atmega64m1, atmega16u4,
+atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
Instruction set avr51 is for the enhanced AVR core with exactly 128K program
memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,
-atmega128rfa1, at90can128, at90usb1286, at90usb1287, m3000f, m3000s, m3001b).
+atmega128rfa1, at90can128, at90usb1286, at90usb1287, m3000).
Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
atmega2560, atmega2561).

View file

@ -0,0 +1,219 @@
diff -rupwN bfd/archures.c bfd/archures.c
--- bfd/archures.c 2010-03-03 16:20:55.885794700 +0530
+++ bfd/archures.c 2010-03-03 16:31:28.276419700 +0530
@@ -364,6 +364,7 @@ DESCRIPTION
.#define bfd_mach_avrxmega5 105
.#define bfd_mach_avrxmega6 106
.#define bfd_mach_avrxmega7 107
+.#define bfd_mach_avrtiny10 201
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
diff -rupwN bfd/bfd-in2.h bfd/bfd-in2.h
--- bfd/bfd-in2.h 2010-03-03 16:20:55.901419700 +0530
+++ bfd/bfd-in2.h 2010-03-03 16:29:05.932669700 +0530
@@ -1986,6 +1986,7 @@ enum bfd_architecture
#define bfd_mach_avrxmega5 105
#define bfd_mach_avrxmega6 106
#define bfd_mach_avrxmega7 107
+#define bfd_mach_avrtiny10 201
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
diff -rupwN bfd/cpu-avr.c bfd/cpu-avr.c
--- bfd/cpu-avr.c 2010-03-03 16:20:55.917044700 +0530
+++ bfd/cpu-avr.c 2010-03-03 16:32:05.245169700 +0530
@@ -147,7 +147,10 @@ static const bfd_arch_info_type arch_inf
N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[16]),
/* Xmega 7 */
- N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, & arch_info_struct[17]),
+
+ /* attiny 10 */
+ N (16, bfd_mach_avrtiny10, "avr:201", FALSE, NULL)
};
diff -rupwN bfd/elf32-avr.c bfd/elf32-avr.c
--- bfd/elf32-avr.c 2010-03-03 16:20:55.917044700 +0530
+++ bfd/elf32-avr.c 2010-03-03 16:29:41.088919700 +0530
@@ -1356,6 +1356,10 @@ bfd_elf_avr_final_write_processing (bfd
case bfd_mach_avrxmega7:
val = E_AVR_MACH_XMEGA7;
break;
+
+ case bfd_mach_avrtiny10:
+ val = E_AVR_MACH_AVRTINY10;
+ break;
}
elf_elfheader (abfd)->e_machine = EM_AVR;
@@ -1446,6 +1450,10 @@ elf32_avr_object_p (bfd *abfd)
case E_AVR_MACH_XMEGA7:
e_set = bfd_mach_avrxmega7;
break;
+
+ case E_AVR_MACH_AVRTINY10:
+ e_set = bfd_mach_avrtiny10;
+ break;
}
}
return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
diff -rupwN gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2010-03-03 16:21:04.370169700 +0530
+++ gas/config/tc-avr.c 2010-03-24 13:32:53.117135700 +0530
@@ -88,6 +88,7 @@ static struct mcu_type_s mcu_types[] =
{"avrxmega5", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
{"avrxmega6", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"avrxmega7", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
+ {"avrtiny10", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
{"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
{"attiny11", AVR_ISA_AVR1, bfd_mach_avr1},
{"attiny12", AVR_ISA_AVR1, bfd_mach_avr1},
@@ -261,6 +262,12 @@ static struct mcu_type_s mcu_types[] =
{"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
+ {"attiny4", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
+ {"attiny5", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
+ {"attiny9", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
+ {"attiny10", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
+ {"attiny20", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
+ {"attiny40", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
{NULL, 0, 0}
};
@@ -443,6 +450,7 @@ md_show_usage (FILE *stream)
" avrxmega5 - XMEGA, > 64K, <= 128K FLASH, > 64K RAM\n"
" avrxmega6 - XMEGA, > 128K, <= 256K FLASH, <= 64K RAM\n"
" avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
+ " avrtiny10 - tiny devices with 16 gp registers\n"
" or immediate microcontroller name.\n"));
fprintf (stream,
_(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -790,6 +798,17 @@ avr_operand (struct avr_opcodes_s *opcod
op_mask = avr_get_constant (str, 31);
str = input_line_pointer;
}
+ if (strcmp(avr_mcu->name, "avrtiny10") == 0
+ || strcmp(avr_mcu->name, "attiny10") == 0
+ || strcmp(avr_mcu->name, "attiny4") == 0
+ || strcmp(avr_mcu->name, "attiny5") == 0
+ || strcmp(avr_mcu->name, "attiny9") == 0
+ || strcmp(avr_mcu->name, "attiny20") == 0
+ || strcmp(avr_mcu->name, "attiny40") == 0)
+ {
+ if(op_mask < 16)
+ as_bad (_("register number above 15 required"));
+ }
if (op_mask <= 31)
{
diff -rupwN include/elf/avr.h include/elf/avr.h
--- include/elf/avr.h 2010-03-03 16:20:55.963919700 +0530
+++ include/elf/avr.h 2010-03-03 16:35:50.448294700 +0530
@@ -47,6 +47,7 @@
#define E_AVR_MACH_XMEGA5 105
#define E_AVR_MACH_XMEGA6 106
#define E_AVR_MACH_XMEGA7 107
+#define E_AVR_MACH_AVRTINY10 201
/* Relocations. */
START_RELOC_NUMBERS (elf_avr_reloc_type)
diff -rupwN include/opcode/avr.h include/opcode/avr.h
--- include/opcode/avr.h 2010-03-09 11:43:29.977081100 +0530
+++ include/opcode/avr.h 2010-03-09 11:41:29.492706100 +0530
@@ -67,7 +67,7 @@
AVR_ISA_ELPM | AVR_ISA_ELPMX | AVR_ISA_SPM | \
AVR_ISA_SPM | AVR_ISA_BRK | AVR_ISA_EIND | \
AVR_ISA_MOVW)
-
+#define AVR_ISA_AVRTINY10 (AVR_ISA_1200 | AVR_ISA_BRK | AVR_ISA_SRAM)
#define REGISTER_P(x) ((x) == 'r' \
|| (x) == 'd' \
|| (x) == 'w' \
@@ -157,8 +157,8 @@ AVR_INSN (sez, "", "1001010000011000
AVR_INSN (bclr, "S", "100101001SSS1000", 1, AVR_ISA_1200, 0x9488)
AVR_INSN (bset, "S", "100101000SSS1000", 1, AVR_ISA_1200, 0x9408)
-AVR_INSN (icall,"", "1001010100001001", 1, AVR_ISA_2xxx, 0x9509)
-AVR_INSN (ijmp, "", "1001010000001001", 1, AVR_ISA_2xxx, 0x9409)
+AVR_INSN (icall,"", "1001010100001001", 1, AVR_ISA_SRAM, 0x9509)
+AVR_INSN (ijmp, "", "1001010000001001", 1, AVR_ISA_SRAM, 0x9409)
AVR_INSN (lpm, "?", "1001010111001000", 1, AVR_ISA_TINY1,0x95c8)
AVR_INSN (lpm, "r,z", "1001000ddddd010+", 1, AVR_ISA_LPMX, 0x9004)
@@ -258,8 +258,8 @@ AVR_INSN (dec, "r", "1001010rrrrr1010
AVR_INSN (inc, "r", "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403)
AVR_INSN (lsr, "r", "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406)
AVR_INSN (neg, "r", "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401)
-AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_2xxx, 0x900f)
-AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f)
+AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_SRAM, 0x900f)
+AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_SRAM, 0x920f)
AVR_INSN (ror, "r", "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407)
AVR_INSN (swap, "r", "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402)
@@ -271,8 +271,8 @@ AVR_INSN (fmul, "a,a", "000000110ddd1rrr
AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL, 0x0380)
AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL, 0x0388)
-AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200)
-AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000)
+AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_SRAM, 0x9200)
+AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_SRAM, 0x9000)
/* Special case for b+0, `e' must be next entry after `b',
b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X. */
diff -rupwN ld/Makefile.am ld/Makefile.am
--- ld/Makefile.am 2010-03-03 16:20:55.995169700 +0530
+++ ld/Makefile.am 2010-03-03 16:27:57.917044700 +0530
@@ -149,6 +149,7 @@ ALL_EMULATIONS = \
eavrxmega5.o \
eavrxmega6.o \
eavrxmega7.o \
+ eavrtiny10.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -681,6 +682,10 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxm
$(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
+eavrtiny10.c: $(srcdir)/emulparams/avrtiny10.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrtiny10 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
diff -rupwN ld/Makefile.in ld/Makefile.in
diff -rupwN ld/configure.tgt ld/configure.tgt
--- ld/configure.tgt 2010-03-03 16:20:56.010794700 +0530
+++ ld/configure.tgt 2010-03-03 16:34:44.854544700 +0530
@@ -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 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7"
+ targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny10"
;;
bfin-*-elf) targ_emul=elf32bfin;
targ_extra_emuls="elf32bfinfd"
diff -rupwN ld/emulparams/avrtiny10.sh ld/emulparams/avrtiny10.sh
--- ld/emulparams/avrtiny10.sh 1970-01-01 05:30:00.000000000 +0530
+++ ld/emulparams/avrtiny10.sh 2010-03-09 16:34:11.695439900 +0530
@@ -0,0 +1,12 @@
+ARCH=avr:201
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=4K
+DATA_ORIGIN=0x800040
+DATA_LENGTH=0x140
+EXTRA_EM_FILE=avrelf

View file

@ -0,0 +1,40 @@
--- gas/config/tc-avr.c 2010-03-27 12:26:07.250000000 -0600
+++ gas/config/tc-avr.c 2010-03-28 13:56:11.937500000 -0600
@@ -260,6 +260,7 @@ static struct mcu_type_s mcu_types[] =
{"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
{"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
{"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"atxmega64a1u",AVR_ISA_XMEGA, bfd_mach_avrxmega5},
{"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
@@ -268,6 +269,7 @@ static struct mcu_type_s mcu_types[] =
{"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
+ {"atxmega128a1u",AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{"attiny4", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
{"attiny5", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
{"attiny9", AVR_ISA_AVRTINY10, bfd_mach_avrtiny10},
--- gas/doc/c-avr.texi 2010-03-27 12:26:07.000000000 -0600
+++ gas/doc/c-avr.texi 2010-03-28 13:56:39.171875000 -0600
@@ -97,7 +97,8 @@ Instruction set avrxmega4 is for the XME
memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
-memory space and greater than 64K data space (MCU types: atxmega64a1).
+memory space and greater than 64K data space (MCU types: atxmega64a1,
+atxmega64a1u).
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,
@@ -105,7 +106,8 @@ atxmega128d3, atxmega192a3, atxmega192d3
atxmega192d3).
Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
-memory space and greater than 64K data space (MCU types: atxmega128a1).
+memory space and greater than 64K data space (MCU types: atxmega128a1,
+atxmega128a1u).
@cindex @code{-mall-opcodes} command line option, AVR
@item -mall-opcodes

View file

@ -0,0 +1,28 @@
--- gas/config/tc-avr.c 2010-09-21 20:24:16.703125000 -0600
+++ gas/config/tc-avr.c 2010-09-21 20:26:21.312500000 -0600
@@ -252,8 +252,10 @@ static struct mcu_type_s mcu_types[] =
{"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
{"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
{"atxmega16d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega16x1", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
{"atxmega32a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
{"atxmega32d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32x1", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
{"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
{"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
{"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
--- gas/doc/c-avr.texi 2010-09-21 20:24:37.281250000 -0600
+++ gas/doc/c-avr.texi 2010-09-21 20:27:33.656250000 -0600
@@ -88,10 +88,10 @@ atmega2560, atmega2561).
Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
-atxmega32d4).
+atxmega16x1, atxmega32a4, atxmega32d4, atxmega32x1).
Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
-memory space and greater than 64K data space (MCU types: atxmega32a4).
+memory space and greater than 64K data space (MCU types: none).
Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).

View file

@ -0,0 +1,36 @@
diff -Naur ./binutils/size.c ./binutils/size.c
--- ./binutils/size.c 2010-11-12 11:03:40.000000000 -0600
+++ ./binutils/size.c 2010-11-12 11:15:58.000000000 -0600
@@ -132,6 +132,7 @@
{"atxmega128a1", AVR136K, AVR8K, AVR2K},
{"atxmega128a1u", AVR136K, AVR8K, AVR2K},
{"atxmega128a3", AVR136K, AVR8K, AVR2K},
+ {"atxmega128b1", AVR136K, AVR8K, AVR2K},
{"atxmega128d3", AVR136K, AVR8K, AVR2K},
{"at43usb320", AVR128K, 608UL, 0UL},
diff -Naur ./gas/config/tc-avr.c ./gas/config/tc-avr.c
--- ./gas/config/tc-avr.c 2010-11-12 11:03:43.000000000 -0600
+++ ./gas/config/tc-avr.c 2010-11-12 11:35:32.000000000 -0600
@@ -261,6 +261,7 @@
{"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
{"atxmega64a1u",AVR_ISA_XMEGA, bfd_mach_avrxmega5},
{"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128b1", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
diff -Naur ./gas/doc/c-avr.texi ./gas/doc/c-avr.texi
--- ./gas/doc/c-avr.texi 2010-11-12 11:03:43.000000000 -0600
+++ ./gas/doc/c-avr.texi 2010-11-12 11:36:39.000000000 -0600
@@ -102,8 +102,8 @@
Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
memory space and less than 64K data space (MCU types: atxmega128a3,
-atxmega128d3, atxmega192a3, atxmega192d3, atxmega256a3, atxmega256a3b,
-atxmega192d3).
+atxmega128d3, atxmega192a3, atxmega128b1, atxmega192d3, atxmega256a3,
+atxmega256a3b, atxmega192d3).
Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
memory space and greater than 64K data space (MCU types: atxmega128a1,

View file

@ -0,0 +1,34 @@
diff -Naur binutils/size.c binutils/size.c
--- binutils/size.c 2010-12-13 12:31:10.000000000 -0600
+++ binutils/size.c 2010-12-13 12:38:19.000000000 -0600
@@ -121,6 +121,7 @@
{
{"atxmega256a3", AVR264K, AVR16K, AVR4K},
{"atxmega256a3b", AVR264K, AVR16K, AVR4K},
+ {"atxmega256a3bu",AVR264K, AVR16K, AVR4K},
{"atxmega256d3", AVR264K, AVR16K, AVR4K},
{"atmega2560", AVR256K, AVR8K, AVR4K},
diff -Naur gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2010-12-13 12:31:10.000000000 -0600
+++ gas/config/tc-avr.c 2010-12-13 13:14:34.000000000 -0600
@@ -267,6 +267,7 @@
{"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3bu",AVR_ISA_XMEGA,bfd_mach_avrxmega6},
{"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
{"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{"atxmega128a1u",AVR_ISA_XMEGA, bfd_mach_avrxmega7},
diff -Naur gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2010-12-13 12:31:10.000000000 -0600
+++ gas/doc/c-avr.texi 2010-12-13 13:15:34.000000000 -0600
@@ -103,7 +103,7 @@
Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
memory space and less than 64K data space (MCU types: atxmega128a3,
atxmega128d3, atxmega192a3, atxmega128b1, atxmega192d3, atxmega256a3,
-atxmega256a3b, atxmega192d3).
+atxmega256a3b, atxmega256a3bu, atxmega192d3).
Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
memory space and greater than 64K data space (MCU types: atxmega128a1,

View file

@ -0,0 +1,73 @@
diff -rupw binutils/size.c binutils/size.c
--- binutils/size.c 2011-01-10 13:22:40.000000000 -0600
+++ binutils/size.c 2011-01-05 19:15:32.000000000 -0600
@@ -220,6 +220,7 @@ avr_device_t avr[] =
{"atxmega16d4", AVR20K, AVR2K, AVR1K},
{"at76c711", AVR16K, AVR2K, 0UL},
+ {"at90pwm161", AVR16K, AVR1K, AVR512},
{"at90pwm216", AVR16K, AVR1K, AVR512},
{"at90pwm316", AVR16K, AVR1K, AVR512},
{"at90usb162", AVR16K, AVR512, AVR512},
diff -rupw gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2011-01-10 13:22:40.000000000 -0600
+++ gas/config/tc-avr.c 2011-01-05 19:09:23.000000000 -0600
@@ -159,6 +159,7 @@ static struct mcu_type_s mcu_types[] =
{"at90pwm3", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm3b", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm81", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"at90pwm161", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
diff -rupw gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2011-01-10 13:22:40.000000000 -0600
+++ gas/doc/c-avr.texi 2011-01-05 19:10:26.000000000 -0600
@@ -65,8 +65,8 @@ at90pwm1,at90pwm2, at90pwm2b, at90pwm3,
at90pwm81).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega16a, atmega161, atmega162, atmega163,
-atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
+memory space (MCU types: at90pwm161, atmega16, atmega16a, atmega161, atmega162,
+atmega163, atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
atmega168a, atmega168p, atmega169, atmega169p, atmega169pa,
atmega32, atmega323, atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
atmega325p, atmega3250, atmega3250a, atmega3250p, atmega328, atmega328p,
diff -rupw ld/Makefile.in ld/Makefile.in
--- ld/Makefile.in 2011-01-10 13:22:05.000000000 -0600
+++ ld/Makefile.in 2011-01-06 11:18:12.000000000 -0600
@@ -441,6 +441,7 @@ ALL_EMULATIONS = \
eavrxmega5.o \
eavrxmega6.o \
eavrxmega7.o \
+ eavrtiny10.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -952,6 +953,14 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr51.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavr6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrtiny10.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eavrxmega7.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff_i860.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff_sparc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecrisaout.Po@am__quote@
@@ -2104,6 +2113,10 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxm
$(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
+eavrtiny10.c: $(srcdir)/emulparams/avrtiny10.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrtiny10 "$(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)"

View file

@ -0,0 +1,52 @@
diff -Naur binutils/size.c binutils/size.c
--- binutils/size.c 2011-01-19 13:46:48.000000000 -0600
+++ binutils/size.c 2011-01-19 13:50:05.000000000 -0600
@@ -207,8 +207,8 @@
{"atmega3290a", AVR32K, AVR2K, AVR1K},
{"atmega3290p", AVR32K, AVR2K, AVR1K},
{"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvbrevb",AVR32K, AVR2K, AVR1K},
{"atmega32c1", AVR32K, AVR2K, AVR1K},
- {"atmega32hvb", AVR32K, AVR2K, AVR1K},
{"atmega32m1", AVR32K, AVR2K, AVR1K},
{"atmega32u2", AVR32K, AVR1K, AVR1K},
{"atmega32u4", AVR32K, 2560UL, AVR1K},
@@ -244,7 +244,8 @@
{"atmega169pa", AVR16K, AVR1K, AVR512},
{"atmega16hva", AVR16K, 768UL, AVR256},
{"atmega16hva2", AVR16K, AVR1K, AVR256},
- {"atmega16hvb", AVR16K, AVR1K, AVR512},
+ {"atmega16hvb", AVR16K, AVR1K, AVR512},
+ {"atmega16hvbrevb",AVR16K, AVR1K, AVR512},
{"atmega16m1", AVR16K, AVR1K, AVR512},
{"atmega16u2", AVR16K, AVR512, AVR512},
{"atmega16u4", AVR16K, 1280UL, AVR512},
diff -Naur gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2011-01-19 13:46:48.000000000 -0600
+++ gas/config/tc-avr.c 2011-01-19 13:51:06.000000000 -0600
@@ -220,7 +220,9 @@
{"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hva2",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hvbrevb",AVR_ISA_AVR5,bfd_mach_avr5},
{"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega32hvbrevb",AVR_ISA_AVR5,bfd_mach_avr5},
{"at90can32" , AVR_ISA_AVR5, bfd_mach_avr5},
{"at90can64" , AVR_ISA_AVR5, bfd_mach_avr5},
{"at90pwm216", AVR_ISA_AVR5, bfd_mach_avr5},
diff -Naur gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2011-01-19 13:46:48.000000000 -0600
+++ gas/doc/c-avr.texi 2011-01-19 13:52:30.000000000 -0600
@@ -75,9 +75,9 @@
atmega644pa, atmega645, atmega645a, atmega645p, atmega6450, atmega6450a,
atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
atmega6490p, atmega64hve, atmega16hva, atmega16hva2, atmega16hvb, atmega32hvb,
-at90can32, at90can64, at90pwm216, at90pwm316, atmega16u4, atmega32c1,
-atmega64c1, atmega64m1, atmega16m1, atmega32m1, atmega64m1, atmega16u4,
-atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
+atmega16hvbrevb, atmega32hvbrevb, at90can32, at90can64, at90pwm216, at90pwm316,
+atmega16u4, atmega32c1, atmega64c1, atmega64m1, atmega16m1, atmega32m1, atmega64m1,
+atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
Instruction set avr51 is for the enhanced AVR core with exactly 128K program
memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,

View file

@ -0,0 +1,88 @@
diff -Naurp ./binutils/size.c ./binutils/size.c
--- ./binutils/size.c 2011-02-17 11:55:20.000000000 -0600
+++ ./binutils/size.c 2011-02-16 15:37:59.000000000 -0600
@@ -194,9 +194,11 @@ avr_device_t avr[] =
{"atmega325", AVR32K, AVR2K, AVR1K},
{"atmega325a", AVR32K, AVR2K, AVR1K},
{"atmega325p", AVR32K, AVR2K, AVR1K},
+ {"atmega325pa", AVR32K, AVR2K, AVR1K},
{"atmega3250", AVR32K, AVR2K, AVR1K},
{"atmega3250a", AVR32K, AVR2K, AVR1K},
{"atmega3250p", AVR32K, AVR2K, AVR1K},
+ {"atmega3250pa", AVR32K, AVR2K, AVR1K},
{"atmega328", AVR32K, AVR2K, AVR1K},
{"atmega328p", AVR32K, AVR2K, AVR1K},
{"atmega329", AVR32K, AVR2K, AVR1K},
@@ -206,6 +208,7 @@ avr_device_t avr[] =
{"atmega3290", AVR32K, AVR2K, AVR1K},
{"atmega3290a", AVR32K, AVR2K, AVR1K},
{"atmega3290p", AVR32K, AVR2K, AVR1K},
+ {"atmega3290pa", AVR32K, AVR2K, AVR1K},
{"atmega32hvb", AVR32K, AVR2K, AVR1K},
{"atmega32hvbrevb",AVR32K, AVR2K, AVR1K},
{"atmega32c1", AVR32K, AVR2K, AVR1K},
diff -Naurp ./gas/config/tc-avr.c ./gas/config/tc-avr.c
--- ./gas/config/tc-avr.c 2011-02-17 11:55:20.000000000 -0600
+++ ./gas/config/tc-avr.c 2011-02-16 15:22:24.000000000 -0600
@@ -185,9 +185,11 @@ static struct mcu_type_s mcu_types[] =
{"atmega325", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega325pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250a",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega3250pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega328", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega328p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329", AVR_ISA_AVR5, bfd_mach_avr5},
@@ -197,6 +199,7 @@ static struct mcu_type_s mcu_types[] =
{"atmega3290", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290a",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega3290pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega406", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega64", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega640", AVR_ISA_AVR5, bfd_mach_avr5},
diff -Naurp ./gas/doc/as.info ./gas/doc/as.info
--- ./gas/doc/as.info 2010-03-01 07:49:55.000000000 -0600
+++ ./gas/doc/as.info 2011-02-17 11:59:53.000000000 -0600
@@ -7097,14 +7097,15 @@ File: as.info, Node: AVR Options, Next
program memory space (MCU types: atmega16, atmega161, atmega162,
atmega163, atmega164p, atmega165, atmega165p, atmega168,
atmega168p, atmega169, atmega169p, atmega16c1, atmega32,
- atmega323, atmega324p, atmega325, atmega325p, atmega3250,
- atmega3250p, atmega328p, atmega329, atmega329p, atmega3290,
- atmega3290p, atmega406, atmega64, atmega640, atmega644,
- atmega644p, atmega644pa, atmega645, atmega6450, atmega649,
- atmega6490, atmega16hva, atmega16hvb, atmega32hvb, at90can32,
- at90can64, at90pwm216, at90pwm316, atmega32c1, atmega64c1,
- atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4,
- atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
+ atmega323, atmega324p, atmega325, atmega325p, atmega325pa,
+ atmega3250, atmega3250p, atmega3250pa, atmega328p, atmega329,
+ atmega329p, atmega3290, atmega3290p, atmega3290pa, atmega406,
+ atmega64, atmega640, atmega644, atmega644p, atmega644pa, atmega645,
+ atmega6450, atmega649, atmega6490, atmega16hva, atmega16hvb,
+ atmega32hvb, at90can32, at90can64, at90pwm216, at90pwm316,
+ atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1,
+ atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647,
+ at94k, at90scr100).
Instruction set avr51 is for the enhanced AVR core with exactly
128K program memory space (MCU types: atmega128, atmega1280,
diff -Naurp ./gas/doc/c-avr.texi ./gas/doc/c-avr.texi
--- ./gas/doc/c-avr.texi 2011-02-17 11:55:20.000000000 -0600
+++ ./gas/doc/c-avr.texi 2011-02-16 15:42:20.000000000 -0600
@@ -69,9 +69,9 @@ memory space (MCU types: at90pwm161, atm
atmega163, atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
atmega168a, atmega168p, atmega169, atmega169p, atmega169pa,
atmega32, atmega323, atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
-atmega325p, atmega3250, atmega3250a, atmega3250p, atmega328, atmega328p,
+atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, atmega328, atmega328p,
atmega329, atmega329a, atmega329p, atmega329pa, atmega3290, atmega3290a,
-atmega3290p, atmega406, atmega64, atmega640, atmega644, atmega644a, atmega644p,
+atmega3290p, atmega3290pa, atmega406, atmega64, atmega640, atmega644, atmega644a, atmega644p,
atmega644pa, atmega645, atmega645a, atmega645p, atmega6450, atmega6450a,
atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
atmega6490p, atmega64hve, atmega16hva, atmega16hva2, atmega16hvb, atmega32hvb,

View file

@ -0,0 +1,377 @@
diff -rupN bfd/archures.c bfd/archures.c
--- bfd/archures.c 2011-05-11 20:06:37.000000000 -0500
+++ bfd/archures.c 2011-05-10 13:35:37.000000000 -0500
@@ -368,6 +368,7 @@ DESCRIPTION
.#define bfd_mach_avr5 5
.#define bfd_mach_avr51 51
.#define bfd_mach_avr6 6
+.#define bfd_mach_avrtiny10 100
.#define bfd_mach_avrxmega1 101
.#define bfd_mach_avrxmega2 102
.#define bfd_mach_avrxmega3 103
@@ -375,7 +376,6 @@ DESCRIPTION
.#define bfd_mach_avrxmega5 105
.#define bfd_mach_avrxmega6 106
.#define bfd_mach_avrxmega7 107
-.#define bfd_mach_avrtiny10 201
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
diff -rupN bfd/bfd-in2.h bfd/bfd-in2.h
--- bfd/bfd-in2.h 2011-05-11 20:06:39.000000000 -0500
+++ bfd/bfd-in2.h 2011-05-10 13:35:37.000000000 -0500
@@ -2042,6 +2042,7 @@ enum bfd_architecture
#define bfd_mach_avr5 5
#define bfd_mach_avr51 51
#define bfd_mach_avr6 6
+#define bfd_mach_avrtiny10 100
#define bfd_mach_avrxmega1 101
#define bfd_mach_avrxmega2 102
#define bfd_mach_avrxmega3 103
@@ -2049,7 +2050,6 @@ enum bfd_architecture
#define bfd_mach_avrxmega5 105
#define bfd_mach_avrxmega6 106
#define bfd_mach_avrxmega7 107
-#define bfd_mach_avrtiny10 201
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
diff -rupN bfd/cpu-avr.c bfd/cpu-avr.c
--- bfd/cpu-avr.c 2011-05-11 20:06:41.000000000 -0500
+++ bfd/cpu-avr.c 2011-05-10 13:35:37.000000000 -0500
@@ -135,29 +135,29 @@ static const bfd_arch_info_type arch_inf
/* 3-Byte PC. */
N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[10]),
+ /* attiny 10 */
+ N (16, bfd_mach_avrtiny10, "avr:100", FALSE, & arch_info_struct[11]),
+
/* Xmega 1 */
- N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[11]),
+ N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[12]),
/* Xmega 2 */
- N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[12]),
+ N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[13]),
/* Xmega 3 */
- N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[13]),
+ N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[14]),
/* Xmega 4 */
- N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[14]),
+ N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[15]),
/* Xmega 5 */
- N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[15]),
+ N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[16]),
/* Xmega 6 */
- N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[16]),
+ N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[17]),
/* Xmega 7 */
- N (24, bfd_mach_avrxmega7, "avr:107", FALSE, & arch_info_struct[17]),
-
- /* attiny 10 */
- N (16, bfd_mach_avrtiny10, "avr:201", FALSE, NULL)
+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
};
diff -rupN include/elf/avr.h include/elf/avr.h
--- include/elf/avr.h 2011-05-11 20:06:42.000000000 -0500
+++ include/elf/avr.h 2011-05-10 13:35:37.000000000 -0500
@@ -40,6 +40,7 @@
#define E_AVR_MACH_AVR5 5
#define E_AVR_MACH_AVR51 51
#define E_AVR_MACH_AVR6 6
+#define E_AVR_MACH_AVRTINY10 100
#define E_AVR_MACH_XMEGA1 101
#define E_AVR_MACH_XMEGA2 102
#define E_AVR_MACH_XMEGA3 103
@@ -47,7 +48,6 @@
#define E_AVR_MACH_XMEGA5 105
#define E_AVR_MACH_XMEGA6 106
#define E_AVR_MACH_XMEGA7 107
-#define E_AVR_MACH_AVRTINY10 201
/* Relocations. */
START_RELOC_NUMBERS (elf_avr_reloc_type)
diff -rupN ld/emulparams/avrtiny10.sh ld/emulparams/avrtiny10.sh
--- ld/emulparams/avrtiny10.sh 2011-05-11 20:06:44.000000000 -0500
+++ ld/emulparams/avrtiny10.sh 2011-05-10 13:39:44.000000000 -0500
@@ -1,12 +1,13 @@
-ARCH=avr:201
+ARCH=avr:100
MACHINE=
-SCRIPT_NAME=avr
+SCRIPT_NAME=avrtiny10
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
TEMPLATE_NAME=elf32
+TEXT_ORIGIN=0x0
TEXT_LENGTH=4K
-DATA_ORIGIN=0x800040
-DATA_LENGTH=0x140
+DATA_ORIGIN=0x0800040
+DATA_LENGTH=0x1F
EXTRA_EM_FILE=avrelf
diff -rupN ld/Makefile.am ld/Makefile.am
--- ld/Makefile.am 2011-05-11 20:06:47.000000000 -0500
+++ ld/Makefile.am 2011-05-10 13:35:37.000000000 -0500
@@ -764,7 +764,7 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxm
${GEN_DEPENDS}
${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
eavrtiny10.c: $(srcdir)/emulparams/avrtiny10.sh \
- $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avrtiny10.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avrtiny10 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
diff -rupN ld/scripttempl/avrtiny10.sc ld/scripttempl/avrtiny10.sc
--- ld/scripttempl/avrtiny10.sc 1969-12-31 18:00:00.000000000 -0600
+++ ld/scripttempl/avrtiny10.sc 2011-05-10 13:35:37.000000000 -0500
@@ -0,0 +1,240 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+ text (rx) : ORIGIN = $TEXT_ORIGIN, LENGTH = $TEXT_LENGTH
+ data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH
+ lock (rw!x) : ORIGIN = 0x3F00, LENGTH = 2
+ signature (rw!x) : ORIGIN = 0x3FC0, LENGTH = 4
+/* REVISIT: fuse(rw!x) : */
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
+
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} :
+ {
+ *(.rel.text)
+ ${RELOCATING+*(.rel.text.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+ }
+ .rela.text ${RELOCATING-0} :
+ {
+ *(.rela.text)
+ ${RELOCATING+*(.rela.text.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+ }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} :
+ {
+ *(.rel.rodata)
+ ${RELOCATING+*(.rel.rodata.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+ }
+ .rela.rodata ${RELOCATING-0} :
+ {
+ *(.rela.rodata)
+ ${RELOCATING+*(.rela.rodata.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+ }
+ .rel.data ${RELOCATING-0} :
+ {
+ *(.rel.data)
+ ${RELOCATING+*(.rel.data.*)}
+ ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+ }
+ .rela.data ${RELOCATING-0} :
+ {
+ *(.rela.data)
+ ${RELOCATING+*(.rela.data.*)}
+ ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+ }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+
+ /* Internal text space or external memory. */
+ .text ${RELOCATING-0} : ${RELOCATING+ AT (0x0)}
+ {
+ *(.vectors)
+ KEEP(*(.vectors))
+
+ /* For data that needs to reside in the lower 64k of progmem. */
+ *(.progmem.gcc*)
+ *(.progmem*)
+ ${RELOCATING+. = ALIGN(2);}
+
+ ${CONSTRUCTING+ __trampolines_start = . ; }
+ /* The jump trampolines for the 16-bit limited relocs will reside here. */
+ *(.trampolines)
+ *(.trampolines*)
+ ${CONSTRUCTING+ __trampolines_end = . ; }
+
+ /* For future tablejump instruction arrays for 3 byte pc devices.
+ We don't relax jump/call instructions within these sections. */
+ *(.jumptables)
+ *(.jumptables*)
+
+ /* For code that needs to reside in the lower 128k progmem. */
+ *(.lowtext)
+ *(.lowtext*)
+
+ ${CONSTRUCTING+ __ctors_start = . ; }
+ ${CONSTRUCTING+ *(.ctors) }
+ ${CONSTRUCTING+ __ctors_end = . ; }
+ ${CONSTRUCTING+ __dtors_start = . ; }
+ ${CONSTRUCTING+ *(.dtors) }
+ ${CONSTRUCTING+ __dtors_end = . ; }
+ KEEP(SORT(*)(.ctors))
+ KEEP(SORT(*)(.dtors))
+
+ /* From this point on, we don't bother about wether the insns are
+ below or above the 16 bits boundary. */
+ *(.init0) /* Start here after reset. */
+ KEEP (*(.init0))
+ *(.init1)
+ KEEP (*(.init1))
+ *(.init2) /* Clear __zero_reg__, set up stack pointer. */
+ KEEP (*(.init2))
+ *(.init3)
+ KEEP (*(.init3))
+ *(.init4) /* Initialize data and BSS. */
+ KEEP (*(.init4))
+ *(.init5)
+ KEEP (*(.init5))
+ *(.init6) /* C++ constructors. */
+ KEEP (*(.init6))
+ *(.init7)
+ KEEP (*(.init7))
+ *(.init8)
+ KEEP (*(.init8))
+ *(.init9) /* Call main(). */
+ KEEP (*(.init9))
+ *(.text)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.text.*)
+ ${RELOCATING+. = ALIGN(2);}
+ *(.fini9) /* _exit() starts here. */
+ KEEP (*(.fini9))
+ *(.fini8)
+ KEEP (*(.fini8))
+ *(.fini7)
+ KEEP (*(.fini7))
+ *(.fini6) /* C++ destructors. */
+ KEEP (*(.fini6))
+ *(.fini5)
+ KEEP (*(.fini5))
+ *(.fini4)
+ KEEP (*(.fini4))
+ *(.fini3)
+ KEEP (*(.fini3))
+ *(.fini2)
+ KEEP (*(.fini2))
+ *(.fini1)
+ KEEP (*(.fini1))
+ *(.fini0) /* Infinite loop after program termination. */
+ KEEP (*(.fini0))
+ ${RELOCATING+ _etext = . ; }
+ } ${RELOCATING+ > text}
+
+ .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+ {
+ ${RELOCATING+ PROVIDE (__data_start = .) ; }
+ *(.data)
+ *(.data*)
+ *(.rodata) /* We need to include .rodata here if gcc is used */
+ *(.rodata*) /* with -fdata-sections. */
+ *(.gnu.linkonce.d*)
+ ${RELOCATING+. = ALIGN(2);}
+ ${RELOCATING+ _edata = . ; }
+ ${RELOCATING+ PROVIDE (__data_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ .bss ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))}
+ {
+ ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+ } ${RELOCATING+ > data}
+
+ ${RELOCATING+ __data_load_start = LOADADDR(.data); }
+ ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); }
+
+ /* Global data not cleared after reset. */
+ .noinit ${RELOCATING-0}:
+ {
+ ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+ *(.noinit*)
+ ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+ ${RELOCATING+ _end = . ; }
+ ${RELOCATING+ PROVIDE (__heap_start = .) ; }
+ } ${RELOCATING+ > data}
+
+ .lock ${RELOCATING-0}:
+ {
+ KEEP(*(.lock*))
+ } ${RELOCATING+ > lock}
+
+ .signature ${RELOCATING-0}:
+ {
+ KEEP(*(.signature*))
+ } ${RELOCATING+ > signature}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+}
+EOF
+

View file

@ -0,0 +1,36 @@
diff -Naurp binutils/size.c binutils/size.c
--- binutils/size.c 2011-03-24 12:38:45.000000000 -0500
+++ binutils/size.c 2011-03-24 12:39:25.000000000 -0500
@@ -255,6 +255,7 @@ avr_device_t avr[] =
{"atmega16hvb", AVR16K, AVR1K, AVR512},
{"atmega16hvbrevb",AVR16K, AVR1K, AVR512},
{"atmega16m1", AVR16K, AVR1K, AVR512},
+ {"attiny1634", AVR16K, AVR1K, AVR256},
{"atmega16u2", AVR16K, AVR512, AVR512},
{"atmega16u4", AVR16K, 1280UL, AVR512},
{"attiny167", AVR16K, AVR512, AVR512},
diff -Naurp gas/config/tc-avr.c gas/config/tc-avr.c
--- gas/config/tc-avr.c 2011-03-24 12:38:45.000000000 -0500
+++ gas/config/tc-avr.c 2011-03-24 12:39:25.000000000 -0500
@@ -142,6 +142,7 @@ static struct mcu_type_s mcu_types[] =
{"atmega8u2", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega16u2", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega32u2", AVR_ISA_AVR35, bfd_mach_avr35},
+ {"attiny1634", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega48", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48a", AVR_ISA_AVR4, bfd_mach_avr4},
diff -Naurp gas/doc/c-avr.texi gas/doc/c-avr.texi
--- gas/doc/c-avr.texi 2011-03-24 12:38:45.000000000 -0500
+++ gas/doc/c-avr.texi 2011-03-24 12:39:25.000000000 -0500
@@ -55,8 +55,8 @@ Instruction set avr31 is for the classic
memory space (MCU types: atmega103, at43usb320).
Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP
-instructions (MCU types: attiny167, at90usb82, at90usb162, atmega8u2,
-atmega16u2, atmega32u2).
+instructions (MCU types: attiny167, attiny1634, at90usb82, at90usb162,
+atmega8u2, atmega16u2, atmega32u2).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
memory space (MCU types: atmega48, atmega48a, atmega48p,atmega8, atmega88,

View file

@ -0,0 +1,39 @@
diff -Naurp ./binutils/size.c ./binutils/size.c
--- ./binutils/size.c 2011-05-03 11:50:59.000000000 -0500
+++ ./binutils/size.c 2011-05-03 13:07:20.000000000 -0500
@@ -287,6 +287,7 @@ avr_device_t avr[] =
{"at90s4434", AVR4K, 352UL, AVR256},
{"atmega48", AVR4K, AVR512, AVR256},
{"atmega48a", AVR4K, AVR512, AVR256},
+ {"atmega48pa", AVR4K, AVR512, AVR256},
{"atmega48p", AVR4K, AVR512, AVR256},
{"attiny4313", AVR4K, AVR256, AVR256},
{"attiny43u", AVR4K, AVR256, AVR64},
diff -Naurp ./gas/config/tc-avr.c ./gas/config/tc-avr.c
--- ./gas/config/tc-avr.c 2011-05-03 11:50:59.000000000 -0500
+++ ./gas/config/tc-avr.c 2011-05-03 13:01:39.000000000 -0500
@@ -145,6 +145,7 @@ static struct mcu_type_s mcu_types[] =
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega48", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48a", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega48pa", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48p", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88a", AVR_ISA_AVR4, bfd_mach_avr4},
diff -Naurp ./gas/doc/c-avr.texi ./gas/doc/c-avr.texi
--- ./gas/doc/c-avr.texi 2011-05-03 11:50:59.000000000 -0500
+++ ./gas/doc/c-avr.texi 2011-05-03 13:08:36.000000000 -0500
@@ -59,10 +59,9 @@ instructions (MCU types: attiny167, at90
atmega16u2, atmega32u2).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega48a, atmega48p,atmega8, atmega88,
-atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva,
-at90pwm1,at90pwm2, at90pwm2b, at90pwm3, at90pwm3b,
-at90pwm81).
+memory space (MCU types: atmega48, atmega48a, atmega48pa, atmega48p,atmega8,
+atmega88, atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva,
+at90pwm1,at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
memory space (MCU types: at90pwm161, atmega16, atmega16a, atmega161, atmega162,

View file

@ -0,0 +1,9 @@
/patch-aa/1.7/Fri Jul 30 07:07:13 2010//
/patch-as-dwarf/1.1/Thu Mar 4 13:38:29 2010//
/patch-as-dwarf-avrstudio/1.1/Thu Mar 4 13:38:29 2010//
/patch-avr-size/1.1/Thu Mar 4 13:38:29 2010//
/patch-coff-avr/1.8/Fri Jul 30 07:07:14 2010//
/patch-newdevices/1.16/Fri Jul 30 07:07:14 2010//
/patch-newsections/1.3/Fri Jul 30 07:07:14 2010//
/patch-xmega/1.4/Fri Jul 30 07:07:14 2010//
D

View file

@ -0,0 +1 @@
ports/devel/avr-binutils/files

View file

@ -0,0 +1 @@
:pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs/

View file

@ -0,0 +1,15 @@
PR:
Submitted by:
Reviewed by:
Approved by:
Obtained from:
MFC after:
CVS: ----------------------------------------------------------------------
CVS: PR: Fill this in if a GNATS PR is affected by the change.
CVS: Submitted by: Fill this in if someone else sent in the change.
CVS: Reviewed by: Fill this in if someone else reviewed your modification.
CVS: Approved by: Fill this in if you needed approval for this commit.
CVS: Obtained from: Fill this in if the change is from third party software.
CVS: MFC after: N [day[s]|week[s]|month[s]]
CVS: Fill in to get MFC notification later. (days assumed unless specified)

View file

@ -0,0 +1,50 @@
--- etc/Makefile.in~ 2009-07-31 00:44:48.000000000 +0200
+++ etc/Makefile.in 2010-03-03 17:13:29.000000000 +0100
@@ -64,7 +64,8 @@
HTMLFILES = standards.html configure.html
all: info
-install: install-info
+#install: install-info
+install:
uninstall:
--- libiberty/Makefile.in~ 2009-08-23 21:03:58.000000000 +0200
+++ libiberty/Makefile.in 2010-03-03 17:14:00.000000000 +0100
@@ -321,7 +321,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:
# This is tricky. Even though CC in the Makefile contains
# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
--- bfd/Makefile.in~ 2009-10-16 13:47:48.000000000 +0200
+++ bfd/Makefile.in 2010-03-03 17:19:17.000000000 +0100
@@ -1673,8 +1673,9 @@
for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(bfdincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) install-recursive
+#install: $(BUILT_SOURCES)
+# $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install:
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
--- opcodes/Makefile.in~ 2009-09-07 14:08:03.000000000 +0200
+++ opcodes/Makefile.in 2010-03-03 17:19:43.000000000 +0100
@@ -1051,7 +1051,8 @@
for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(bfdincludedir)"; 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

View file

@ -0,0 +1,10 @@
diff -ru binutils-2.19.1.orig/gas/config/tc-avr.h binutils-2.19.1/gas/config/tc-avr.h
--- gas/config/tc-avr.h Tue Jul 3 14:01:04 2007
+++ gas/config/tc-avr.h Thu Apr 16 20:46:54 2009
@@ -147,3 +147,6 @@
/* This target is buggy, and sets fix size too large. */
#define TC_FX_SIZE_SLACK(FIX) 2
+
+/* keep DWARF2_ADDR_SIZE in consistency with C compiler produced information */
+#define DWARF2_ADDR_SIZE(bfd) 4

View file

@ -0,0 +1,27 @@
--- gas/dwarf2dbg.c.orig 2009-09-14 13:43:26.000000000 +0200
+++ gas/dwarf2dbg.c 2010-03-04 11:13:52.000000000 +0100
@@ -112,8 +112,11 @@
Note: If you want to change this, you'll have to update the
"standard_opcode_lengths" table that is emitted below in
out_debug_line(). */
+#ifndef TC_AVR
#define DWARF2_LINE_OPCODE_BASE 13
-
+#else
+#define DWARF2_LINE_OPCODE_BASE 10
+#endif
#ifndef DWARF2_LINE_BASE
/* Minimum line offset in a special line info. opcode. This value
was chosen to give a reasonable range of values. */
@@ -1439,9 +1442,11 @@
out_byte (0); /* DW_LNS_set_basic_block */
out_byte (0); /* DW_LNS_const_add_pc */
out_byte (1); /* DW_LNS_fixed_advance_pc */
+#ifndef TC_AVR
out_byte (0); /* DW_LNS_set_prologue_end */
out_byte (0); /* DW_LNS_set_epilogue_begin */
out_byte (1); /* DW_LNS_set_isa */
+#endif
out_file_list ();

View file

@ -0,0 +1,513 @@
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
@@ -36,10 +36,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
@@ -48,9 +69,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;
@@ -64,6 +84,238 @@ 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 AVR20K 20480UL
+#define AVR24K 24576UL
+#define AVR32K 32768UL
+#define AVR36K 36864UL
+#define AVR40K 40960UL
+#define AVR64K 65536UL
+#define AVR68K 69632UL
+#define AVR128K 131072UL
+#define AVR136K 139264UL
+#define AVR200K 204800UL
+#define AVR256K 262144UL
+#define AVR264K 270336UL
+
+typedef struct
+{
+ char *name;
+ long flash;
+ long ram;
+ long eeprom;
+} avr_device_t;
+
+avr_device_t avr[] =
+{
+ {"atxmega256a3", AVR264K, AVR16K, AVR4K},
+ {"atxmega256a3b", AVR264K, AVR16K, AVR4K},
+ {"atxmega256d3", AVR264K, AVR16K, AVR4K},
+
+ {"atmega2560", AVR256K, AVR8K, AVR4K},
+ {"atmega2561", AVR256K, AVR8K, AVR4K},
+
+ {"atxmega192a3", AVR200K, AVR16K, AVR2K},
+ {"atxmega192d3", AVR200K, AVR16K, AVR2K},
+
+ {"atxmega128a1", AVR136K, AVR8K, AVR2K},
+ {"atxmega128a3", AVR136K, AVR8K, AVR2K},
+ {"atxmega128d3", AVR136K, AVR8K, AVR2K},
+
+ {"at43usb320", AVR128K, 608UL, 0UL},
+ {"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},
+ {"atmega128rfa1", AVR128K, AVR16K, AVR4K},
+ {"atmega103", AVR128K, 4000UL, AVR4K},
+
+ {"atxmega64a1", AVR68K, AVR4K, AVR2K},
+ {"atxmega64a3", AVR68K, AVR4K, AVR2K},
+ {"atxmega64d3", AVR68K, AVR4K, AVR2K},
+
+ {"at90can64", AVR64K, AVR4K, AVR2K},
+ {"at90scr100", AVR64K, AVR4K, AVR2K},
+ {"at90usb646", AVR64K, AVR4K, AVR2K},
+ {"at90usb647", AVR64K, AVR4K, AVR2K},
+ {"atmega64", AVR64K, AVR4K, AVR2K},
+ {"atmega640", AVR64K, AVR8K, AVR4K},
+ {"atmega644", AVR64K, AVR4K, AVR2K},
+ {"atmega644a", AVR64K, AVR4K, AVR2K},
+ {"atmega644p", AVR64K, AVR4K, AVR2K},
+ {"atmega644pa", AVR64K, AVR4K, AVR2K},
+ {"atmega645", AVR64K, AVR4K, AVR2K},
+ {"atmega645a", AVR64K, AVR4K, AVR2K},
+ {"atmega645p", AVR64K, AVR4K, AVR2K},
+ {"atmega6450", AVR64K, AVR4K, AVR2K},
+ {"atmega6450a", AVR64K, AVR4K, AVR2K},
+ {"atmega6450p", AVR64K, AVR4K, AVR2K},
+ {"atmega649", AVR64K, AVR4K, AVR2K},
+ {"atmega649a", AVR64K, AVR4K, AVR2K},
+ {"atmega649p", AVR64K, AVR4K, AVR2K},
+ {"atmega6490", AVR64K, AVR4K, AVR2K},
+ {"atmega6490a", AVR64K, AVR4K, AVR2K},
+ {"atmega6490p", AVR64K, AVR4K, AVR2K},
+ {"atmega64c1", AVR64K, AVR4K, AVR2K},
+ {"atmega64hve", AVR64K, AVR4K, AVR1K},
+ {"atmega64m1", AVR64K, AVR4K, AVR2K},
+
+ {"atmega406", AVR40K, AVR2K, AVR512},
+
+ {"atxmega32a4", AVR36K, AVR4K, AVR1K},
+ {"atxmega32d4", AVR36K, AVR4K, AVR1K},
+
+ {"at90can32", AVR32K, AVR2K, AVR1K},
+ {"at94k", AVR32K, AVR4K, 0UL},
+ {"atmega32", AVR32K, AVR2K, AVR1K},
+ {"atmega323", AVR32K, AVR2K, AVR1K},
+ {"atmega324a", AVR32K, AVR2K, AVR1K},
+ {"atmega324p", AVR32K, AVR2K, AVR1K},
+ {"atmega324pa", AVR32K, AVR2K, AVR1K},
+ {"atmega325", AVR32K, AVR2K, AVR1K},
+ {"atmega325p", AVR32K, AVR2K, AVR1K},
+ {"atmega3250", AVR32K, AVR2K, AVR1K},
+ {"atmega3250p", AVR32K, AVR2K, AVR1K},
+ {"atmega328", AVR32K, AVR2K, AVR1K},
+ {"atmega328p", AVR32K, AVR2K, AVR1K},
+ {"atmega329", AVR32K, AVR2K, AVR1K},
+ {"atmega329p", AVR32K, AVR2K, AVR1K},
+ {"atmega329pa", AVR32K, AVR2K, AVR1K},
+ {"atmega3290", AVR32K, AVR2K, AVR1K},
+ {"atmega3290p", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32c1", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32m1", AVR32K, AVR2K, AVR1K},
+ {"atmega32u2", AVR32K, AVR1K, AVR1K},
+ {"atmega32u4", AVR32K, 2560UL, AVR1K},
+ {"atmega32u6", AVR32K, 2560UL, AVR1K},
+
+ {"at43usb355", AVR24K, 1120UL, 0UL},
+
+ {"atxmega16a4", AVR20K, AVR2K, AVR1K},
+ {"atxmega16d4", AVR20K, AVR2K, AVR1K},
+
+ {"at76c711", AVR16K, AVR2K, 0UL},
+ {"at90pwm216", AVR16K, AVR1K, AVR512},
+ {"at90pwm316", AVR16K, AVR1K, AVR512},
+ {"at90usb162", AVR16K, AVR512, AVR512},
+ {"atmega16", AVR16K, AVR1K, AVR512},
+ {"atmega16a", AVR16K, AVR1K, AVR512},
+ {"atmega161", AVR16K, AVR1K, AVR512},
+ {"atmega162", AVR16K, AVR1K, AVR512},
+ {"atmega163", AVR16K, AVR1K, AVR512},
+ {"atmega164", AVR16K, AVR1K, AVR512},
+ {"atmega164a", AVR16K, AVR1K, AVR512},
+ {"atmega164p", AVR16K, AVR1K, AVR512},
+ {"atmega165a", AVR16K, AVR1K, AVR512},
+ {"atmega165", AVR16K, AVR1K, AVR512},
+ {"atmega165p", AVR16K, AVR1K, AVR512},
+ {"atmega168", AVR16K, AVR1K, AVR512},
+ {"atmega168a", AVR16K, AVR1K, AVR512},
+ {"atmega168p", AVR16K, AVR1K, AVR512},
+ {"atmega169", AVR16K, AVR1K, AVR512},
+ {"atmega169a", AVR16K, AVR1K, AVR512},
+ {"atmega169p", AVR16K, AVR1K, AVR512},
+ {"atmega169pa", AVR16K, AVR1K, AVR512},
+ {"atmega16hva", AVR16K, 768UL, AVR256},
+ {"atmega16hva2", AVR16K, AVR1K, AVR256},
+ {"atmega16hvb", AVR16K, AVR1K, AVR512},
+ {"atmega16m1", AVR16K, AVR1K, AVR512},
+ {"atmega16u2", AVR16K, AVR512, AVR512},
+ {"atmega16u4", AVR16K, 1280UL, AVR512},
+ {"attiny167", AVR16K, AVR512, AVR512},
+
+ {"at90c8534", AVR8K, 352UL, AVR512},
+ {"at90pwm1", AVR8K, AVR512, AVR512},
+ {"at90pwm2", AVR8K, AVR512, AVR512},
+ {"at90pwm2b", AVR8K, AVR512, AVR512},
+ {"at90pwm3", AVR8K, AVR512, AVR512},
+ {"at90pwm3b", AVR8K, AVR512, AVR512},
+ {"at90pwm81", AVR8K, AVR256, AVR512},
+ {"at90s8515", AVR8K, AVR512, AVR512},
+ {"at90s8535", AVR8K, AVR512, AVR512},
+ {"at90usb82", AVR8K, AVR512, AVR512},
+ {"ata6289", AVR8K, AVR512, 320UL},
+ {"atmega8", AVR8K, AVR1K, AVR512},
+ {"atmega8515", AVR8K, AVR512, AVR512},
+ {"atmega8535", AVR8K, AVR512, AVR512},
+ {"atmega88", AVR8K, AVR1K, AVR512},
+ {"atmega88a", AVR8K, AVR1K, AVR512},
+ {"atmega88p", AVR8K, AVR1K, AVR512},
+ {"atmega88pa", AVR8K, AVR1K, AVR512},
+ {"atmega8hva", AVR8K, 768UL, AVR256},
+ {"atmega8u2", AVR8K, AVR512, AVR512},
+ {"attiny84", AVR8K, AVR512, AVR512},
+ {"attiny85", AVR8K, AVR512, AVR512},
+ {"attiny861", AVR8K, AVR512, AVR512},
+ {"attiny861a", AVR8K, AVR512, AVR512},
+ {"attiny87", AVR8K, AVR512, AVR512},
+ {"attiny88", AVR8K, AVR512, AVR64},
+
+ {"at90s4414", AVR4K, 352UL, AVR256},
+ {"at90s4433", AVR4K, AVR128, AVR256},
+ {"at90s4434", AVR4K, 352UL, AVR256},
+ {"atmega48", AVR4K, AVR512, AVR256},
+ {"atmega48a", AVR4K, AVR512, AVR256},
+ {"atmega48p", AVR4K, AVR512, AVR256},
+ {"attiny4313", AVR4K, AVR256, AVR256},
+ {"attiny43u", AVR4K, AVR256, AVR64},
+ {"attiny44", AVR4K, AVR256, AVR256},
+ {"attiny44a", AVR4K, AVR256, AVR256},
+ {"attiny45", AVR4K, AVR256, AVR256},
+ {"attiny461", AVR4K, AVR256, AVR256},
+ {"attiny461a", AVR4K, AVR256, AVR256},
+ {"attiny48", AVR4K, AVR256, AVR64},
+
+ {"at86rf401", AVR2K, 224UL, AVR128},
+ {"at90s2313", AVR2K, AVR128, AVR128},
+ {"at90s2323", AVR2K, AVR128, AVR128},
+ {"at90s2333", AVR2K, 224UL, AVR128},
+ {"at90s2343", AVR2K, AVR128, AVR128},
+ {"attiny20", AVR2K, AVR128, 0UL},
+ {"attiny22", AVR2K, 224UL, AVR128},
+ {"attiny2313", AVR2K, AVR128, AVR128},
+ {"attiny2313a", AVR2K, AVR128, AVR128},
+ {"attiny24", AVR2K, AVR128, AVR128},
+ {"attiny24a", AVR2K, AVR128, AVR128},
+ {"attiny25", AVR2K, AVR128, AVR128},
+ {"attiny26", AVR2K, AVR128, AVR128},
+ {"attiny261", AVR2K, AVR128, AVR128},
+ {"attiny261a", AVR2K, AVR128, AVR128},
+ {"attiny28", AVR2K, 0UL, 0UL},
+ {"attiny40", AVR2K, AVR256, 0UL},
+
+ {"at90s1200", AVR1K, 0UL, AVR64},
+ {"attiny9", AVR1K, 32UL, 0UL},
+ {"attiny10", AVR1K, 32UL, 0UL},
+ {"attiny11", AVR1K, 0UL, AVR64},
+ {"attiny12", AVR1K, 0UL, AVR64},
+ {"attiny13", AVR1K, AVR64, AVR64},
+ {"attiny13a", AVR1K, AVR64, AVR64},
+ {"attiny15", AVR1K, 0UL, AVR64},
+
+ {"attiny4", AVR512, 32UL, 0UL},
+ {"attiny5", AVR512, 32UL, 0UL},
+};
+
+static char *avrmcu = NULL;
+
+
static char *target = NULL;
/* Forward declarations. */
@@ -79,7 +329,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\
@@ -88,11 +329,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)
@@ -103,6 +351,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[] =
{
@@ -110,6 +360,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},
@@ -141,7 +391,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)
{
@@ -150,11 +401,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);
@@ -162,6 +416,10 @@ main (int argc, char **argv)
}
break;
+ case OPTION_MCU:
+ avrmcu = optarg;
+ break;
+
case OPTION_TARGET:
target = optarg;
break;
@@ -190,11 +449,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;
@@ -240,7 +501,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;
@@ -599,13 +861,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

View file

@ -0,0 +1,135 @@
diff -ruw ggas/config/tc-avr.c gas/config/tc-avr.c
--- ggas/config/tc-avr.c 2009-09-09 13:43:29.000000000 +0530
+++ gas/config/tc-avr.c 2010-02-12 20:42:30.742688700 +0530
@@ -133,9 +133,12 @@
{"atmega32u2", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega48", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega48a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48p", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88p", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88pa", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_AVR4, bfd_mach_avr4},
@@ -150,40 +153,63 @@
{"at90pwm3b", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm81", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega16", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega163", AVR_ISA_M161, bfd_mach_avr5},
+ {"atmega164a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega164p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega168a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169pa",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16c1", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega323", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega324p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega328", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega328p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega329pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega406", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega64", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega640", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega644a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega645", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645a", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega649", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6450", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450p",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6490", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega64hve",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hva2",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"at90can32" , AVR_ISA_AVR5, bfd_mach_avr5},
diff -ruw ggas/doc/c-avr.texi gas/doc/c-avr.texi
--- ggas/doc/c-avr.texi 2009-09-02 12:54:21.000000000 +0530
+++ gas/doc/c-avr.texi 2010-02-12 21:31:02.132717100 +0530
@@ -43,9 +43,10 @@
Instruction set avr25 is for the classic AVR core with up to 8K program memory
space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
-attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
-attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461, attiny861,
-attiny861a, attiny87, attiny43u, attiny48, attiny88, at86rf401, ata6289).
+attiny2313a, attiny24, attiny24a, attiny4313, attiny43u, attiny44, attiny44a,
+attiny84, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
+attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
+at86rf401, ata6289).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: at43usb355, at76c711).
@@ -58,20 +59,25 @@
atmega16u2, atmega32u2).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega48p,atmega8, atmega88, atmega88p,
-atmega8515, atmega8535, atmega8hva, atmega4hvd, atmega8hvd, at90pwm1,
-at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, atmega8m1, atmega8c1).
+memory space (MCU types: atmega48, atmega48a, atmega48p,atmega8, atmega88,
+atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva,
+atmega4hvd, atmega8hvd, at90pwm1,at90pwm2, at90pwm2b, at90pwm3, at90pwm3b,
+at90pwm81, atmega8m1, atmega8c1).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega161, atmega162, atmega163, atmega164p,
-atmega165, atmega165p, atmega168, atmega168p, atmega169, atmega169p, atmega16c1,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega3250, atmega3250p,
-atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, atmega406, atmega64,
-atmega640, atmega644, atmega644p, atmega644pa, atmega645, atmega6450, atmega649,
-atmega6490, atmega16hva, atmega16hvb, atmega32hvb, at90can32, at90can64,
-at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1,
-atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
-at90scr100).
+memory space (MCU types: atmega16, atmega16a, atmega161, atmega162, atmega163,
+atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
+atmega168a, atmega168p, atmega169, atmega169p, atmega169pa, atmega16c1,
+atmega32, atmega323, atmega324a, atmega324p, atmega324pa, atmega325,
+atmega325p, atmega3250, atmega3250p, atmega328, atmega328p, atmega329,
+atmega329p, atmega329pa, atmega3290, atmega3290p, atmega406, atmega64,
+atmega640, atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
+atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649,
+atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p, atmega64hve,
+atmega16hva, atmega16hva2, atmega16hvb, atmega32hvb, at90can32, at90can64,
+at90pwm216, at90pwm316, atmega16u4, atmega32c1, atmega64c1, atmega64m1,
+atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4, atmega32u6,
+at90usb646, at90usb647, at94k, at90scr100).
Instruction set avr51 is for the enhanced AVR core with exactly 128K program
memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,

View file

@ -0,0 +1,38 @@
diff -ruw ld/scripttempl/avr.sc ld/scripttempl/avr.sc
--- ld/scripttempl/avr.sc 2009-10-09 18:42:35.000000000 +0530
+++ ld/scripttempl/avr.sc 2010-02-12 20:09:24.070812400 +0530
@@ -7,6 +7,9 @@
text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
+ fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
+ lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
+ signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
}
SECTIONS
@@ -196,6 +199,24 @@
${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) }

View file

@ -0,0 +1,663 @@
diff -Nur ../binutils-2.20.orig/bfd/archures.c ./bfd/archures.c
--- ../binutils-2.20.orig/bfd/archures.c 2009-09-10 13:47:11.000000000 +0200
+++ ./bfd/archures.c 2010-03-04 11:34:08.000000000 +0100
@@ -368,6 +368,13 @@
.#define bfd_mach_avr5 5
.#define bfd_mach_avr51 51
.#define bfd_mach_avr6 6
+.#define bfd_mach_avrxmega1 101
+.#define bfd_mach_avrxmega2 102
+.#define bfd_mach_avrxmega3 103
+.#define bfd_mach_avrxmega4 104
+.#define bfd_mach_avrxmega5 105
+.#define bfd_mach_avrxmega6 106
+.#define bfd_mach_avrxmega7 107
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
diff -Nur ../binutils-2.20.orig/bfd/bfd-in2.h ./bfd/bfd-in2.h
--- ../binutils-2.20.orig/bfd/bfd-in2.h 2009-09-10 13:47:11.000000000 +0200
+++ ./bfd/bfd-in2.h 2010-03-04 11:34:08.000000000 +0100
@@ -2035,6 +2035,13 @@
#define bfd_mach_avr5 5
#define bfd_mach_avr51 51
#define bfd_mach_avr6 6
+#define bfd_mach_avrxmega1 101
+#define bfd_mach_avrxmega2 102
+#define bfd_mach_avrxmega3 103
+#define bfd_mach_avrxmega4 104
+#define bfd_mach_avrxmega5 105
+#define bfd_mach_avrxmega6 106
+#define bfd_mach_avrxmega7 107
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
diff -Nur ../binutils-2.20.orig/bfd/cpu-avr.c ./bfd/cpu-avr.c
--- ../binutils-2.20.orig/bfd/cpu-avr.c 2009-09-02 09:18:36.000000000 +0200
+++ ./bfd/cpu-avr.c 2010-03-04 11:34:08.000000000 +0100
@@ -133,7 +133,29 @@
N (22, bfd_mach_avr51, "avr:51", FALSE, & arch_info_struct[9]),
/* 3-Byte PC. */
- N (22, bfd_mach_avr6, "avr:6", FALSE, NULL)
+ N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[10]),
+
+ /* Xmega 1 */
+ N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[11]),
+
+ /* Xmega 2 */
+ N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[12]),
+
+ /* Xmega 3 */
+ N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[13]),
+
+ /* Xmega 4 */
+ N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[14]),
+
+ /* Xmega 5 */
+ N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[15]),
+
+ /* Xmega 6 */
+ N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[16]),
+
+ /* Xmega 7 */
+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
+
};
const bfd_arch_info_type bfd_avr_arch =
diff -Nur ../binutils-2.20.orig/bfd/elf32-avr.c ./bfd/elf32-avr.c
--- ../binutils-2.20.orig/bfd/elf32-avr.c 2009-09-02 09:18:36.000000000 +0200
+++ ./bfd/elf32-avr.c 2010-03-04 11:34:08.000000000 +0100
@@ -1328,6 +1328,34 @@
case bfd_mach_avr6:
val = E_AVR_MACH_AVR6;
break;
+
+ case bfd_mach_avrxmega1:
+ val = E_AVR_MACH_XMEGA1;
+ break;
+
+ case bfd_mach_avrxmega2:
+ val = E_AVR_MACH_XMEGA2;
+ break;
+
+ case bfd_mach_avrxmega3:
+ val = E_AVR_MACH_XMEGA3;
+ break;
+
+ case bfd_mach_avrxmega4:
+ val = E_AVR_MACH_XMEGA4;
+ break;
+
+ case bfd_mach_avrxmega5:
+ val = E_AVR_MACH_XMEGA5;
+ break;
+
+ case bfd_mach_avrxmega6:
+ val = E_AVR_MACH_XMEGA6;
+ break;
+
+ case bfd_mach_avrxmega7:
+ val = E_AVR_MACH_XMEGA7;
+ break;
}
elf_elfheader (abfd)->e_machine = EM_AVR;
@@ -1390,6 +1418,34 @@
case E_AVR_MACH_AVR6:
e_set = bfd_mach_avr6;
break;
+
+ case E_AVR_MACH_XMEGA1:
+ e_set = bfd_mach_avrxmega1;
+ break;
+
+ case E_AVR_MACH_XMEGA2:
+ e_set = bfd_mach_avrxmega2;
+ break;
+
+ case E_AVR_MACH_XMEGA3:
+ e_set = bfd_mach_avrxmega3;
+ break;
+
+ case E_AVR_MACH_XMEGA4:
+ e_set = bfd_mach_avrxmega4;
+ break;
+
+ case E_AVR_MACH_XMEGA5:
+ e_set = bfd_mach_avrxmega5;
+ break;
+
+ case E_AVR_MACH_XMEGA6:
+ e_set = bfd_mach_avrxmega6;
+ break;
+
+ case E_AVR_MACH_XMEGA7:
+ e_set = bfd_mach_avrxmega7;
+ break;
}
}
return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
diff -Nur ../binutils-2.20.orig/gas/config/tc-avr.c ./gas/config/tc-avr.c
--- ../binutils-2.20.orig/gas/config/tc-avr.c 2010-03-04 11:19:26.000000000 +0100
+++ ./gas/config/tc-avr.c 2010-03-04 11:34:09.000000000 +0100
@@ -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 @@
{"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},
@@ -241,6 +249,21 @@
{"m3001b", AVR_ISA_AVR51, bfd_mach_avr51},
{"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6},
{"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega16d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32a4", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
+ {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{NULL, 0, 0}
};
@@ -418,6 +441,11 @@
" avr5 - enhanced AVR core with up to 64K program memory\n"
" avr51 - enhanced AVR core with up to 128K program memory\n"
" avr6 - enhanced AVR core with up to 256K program memory\n"
+ " avrxmega3 - XMEGA, > 8K, <= 64K FLASH, > 64K RAM\n"
+ " avrxmega4 - XMEGA, > 64K, <= 128K FLASH, <= 64K RAM\n"
+ " avrxmega5 - XMEGA, > 64K, <= 128K FLASH, > 64K RAM\n"
+ " avrxmega6 - XMEGA, > 128K, <= 256K FLASH, <= 64K RAM\n"
+ " avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
" or immediate microcontroller name.\n"));
fprintf (stream,
_(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -845,7 +873,12 @@
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+". */
@@ -962,6 +995,16 @@
}
break;
+ case 'E':
+ {
+ unsigned int x;
+
+ x = avr_get_constant (str, 15);
+ str = input_line_pointer;
+ op_mask |= (x << 4);
+ }
+ break;
+
case '?':
break;
diff -Nur ../binutils-2.20.orig/gas/doc/c-avr.texi ./gas/doc/c-avr.texi
--- ../binutils-2.20.orig/gas/doc/c-avr.texi 2010-03-04 11:19:26.000000000 +0100
+++ ./gas/doc/c-avr.texi 2010-03-04 11:34:09.000000000 +0100
@@ -86,6 +86,27 @@
Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
atmega2560, atmega2561).
+Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
+memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
+atxmega32d4).
+
+Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
+memory space and greater than 64K data space (MCU types: atxmega32a4).
+
+Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
+memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
+
+Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
+memory space and greater than 64K data space (MCU types: atxmega64a1).
+
+Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
+memory space and less than 64K data space (MCU types: atxmega128a3,
+atxmega128d3, atxmega192a3, atxmega192d3, atxmega256a3, atxmega256a3b,
+atxmega192d3).
+
+Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
+memory space and greater than 64K data space (MCU types: atxmega128a1).
+
@cindex @code{-mall-opcodes} command line option, AVR
@item -mall-opcodes
Accept all AVR opcodes, even if not supported by @code{-mmcu}.
diff -Nur ../binutils-2.20.orig/include/elf/avr.h ./include/elf/avr.h
--- ../binutils-2.20.orig/include/elf/avr.h 2008-08-09 07:35:13.000000000 +0200
+++ ./include/elf/avr.h 2010-03-04 11:34:09.000000000 +0100
@@ -40,6 +40,13 @@
#define E_AVR_MACH_AVR5 5
#define E_AVR_MACH_AVR51 51
#define E_AVR_MACH_AVR6 6
+#define E_AVR_MACH_XMEGA1 101
+#define E_AVR_MACH_XMEGA2 102
+#define E_AVR_MACH_XMEGA3 103
+#define E_AVR_MACH_XMEGA4 104
+#define E_AVR_MACH_XMEGA5 105
+#define E_AVR_MACH_XMEGA6 106
+#define E_AVR_MACH_XMEGA7 107
/* Relocations. */
START_RELOC_NUMBERS (elf_avr_reloc_type)
diff -Nur ../binutils-2.20.orig/include/opcode/avr.h ./include/opcode/avr.h
--- ../binutils-2.20.orig/include/opcode/avr.h 2008-08-09 07:35:13.000000000 +0200
+++ ./include/opcode/avr.h 2010-03-04 11:34:09.000000000 +0100
@@ -30,6 +30,8 @@
#define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */
#define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */
#define AVR_ISA_MOVW 0x1000 /* device has MOVW */
+#define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */
+#define AVR_ISA_DES 0x4000 /* device has DES */
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
@@ -48,6 +50,8 @@
#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK)
#define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
+#define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND)
+#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
#define AVR_ISA_AVR1 AVR_ISA_TINY1
#define AVR_ISA_AVR2 AVR_ISA_2xxx
@@ -108,6 +112,7 @@
L - signed pc relative offset from -2048 to 2047
h - absolute code address (call, jmp)
S - immediate value from 0 to 7 (S = s << 4)
+ E - immediate value from 0 to 15, shifted left by 4 (des)
? - use this opcode entry if no parameters, else use next opcode entry
Order is important - some binary opcodes have more than one name,
@@ -168,7 +173,8 @@
AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588)
AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598)
AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
-AVR_INSN (spm, "", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "?", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "z", "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
@@ -282,3 +288,6 @@
AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519)
AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419)
+/* DES instruction for encryption and decryption */
+AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B)
+
diff -Nur ../binutils-2.20.orig/ld/Makefile.am ./ld/Makefile.am
--- ../binutils-2.20.orig/ld/Makefile.am 2009-09-01 22:56:51.000000000 +0200
+++ ./ld/Makefile.am 2010-03-04 11:34:09.000000000 +0100
@@ -148,6 +148,13 @@
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -727,6 +734,34 @@
$(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr6 "$(tdir_avr2)"
+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
diff -Nur ../binutils-2.20.orig/ld/Makefile.in ./ld/Makefile.in
--- ../binutils-2.20.orig/ld/Makefile.in 2009-09-07 14:10:24.000000000 +0200
+++ ./ld/Makefile.in 2010-03-04 11:34:09.000000000 +0100
@@ -434,6 +434,13 @@
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -2068,6 +2075,34 @@
$(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr6 "$(tdir_avr2)"
+eavrxmega1.c: $(srcdir)/emulparams/avrxmega1.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega1 "$(tdir_avr2)"
+eavrxmega2.c: $(srcdir)/emulparams/avrxmega2.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega2 "$(tdir_avr2)"
+eavrxmega3.c: $(srcdir)/emulparams/avrxmega3.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega3 "$(tdir_avr2)"
+eavrxmega4.c: $(srcdir)/emulparams/avrxmega4.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega4 "$(tdir_avr2)"
+eavrxmega5.c: $(srcdir)/emulparams/avrxmega5.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega5 "$(tdir_avr2)"
+eavrxmega6.c: $(srcdir)/emulparams/avrxmega6.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega6 "$(tdir_avr2)"
+eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \
+ $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avrxmega7 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
diff -Nur ../binutils-2.20.orig/ld/configure.tgt ./ld/configure.tgt
--- ../binutils-2.20.orig/ld/configure.tgt 2009-08-06 19:38:03.000000000 +0200
+++ ./ld/configure.tgt 2010-03-04 11:34:09.000000000 +0100
@@ -110,7 +110,7 @@
xscale-*-elf) targ_emul=armelf
;;
avr-*-*) targ_emul=avr2
- targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6"
+ targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7"
;;
bfin-*-elf) targ_emul=elf32bfin;
targ_extra_emuls="elf32bfinfd"
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega1.sh ./ld/emulparams/avrxmega1.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega1.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega1.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:101
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega2.sh ./ld/emulparams/avrxmega2.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega2.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega2.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:102
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega3.sh ./ld/emulparams/avrxmega3.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega3.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega3.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:103
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega4.sh ./ld/emulparams/avrxmega4.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega4.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega4.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:104
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega5.sh ./ld/emulparams/avrxmega5.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega5.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega5.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:105
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega6.sh ./ld/emulparams/avrxmega6.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega6.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega6.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:106
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emulparams/avrxmega7.sh ./ld/emulparams/avrxmega7.sh
--- ../binutils-2.20.orig/ld/emulparams/avrxmega7.sh 1970-01-01 01:00:00.000000000 +0100
+++ ./ld/emulparams/avrxmega7.sh 2010-03-04 11:34:09.000000000 +0100
@@ -0,0 +1,12 @@
+ARCH=avr:107
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_ORIGIN=0x802000
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff -Nur ../binutils-2.20.orig/ld/emultempl/avrelf.em ./ld/emultempl/avrelf.em
--- ../binutils-2.20.orig/ld/emultempl/avrelf.em 2009-09-02 09:25:35.000000000 +0200
+++ ./ld/emultempl/avrelf.em 2010-03-04 11:34:09.000000000 +0100
@@ -71,8 +71,10 @@
gld${EMULATION_NAME}_before_allocation ();
- /* We only need stubs for the avr6 family. */
- if (strcmp ("${EMULATION_NAME}","avr6"))
+ /* We only need stubs for avr6, avrxmega6, and avrxmega7. */
+ if (strcmp ("${EMULATION_NAME}","avr6")
+ && strcmp ("${EMULATION_NAME}","avrxmega6")
+ && strcmp ("${EMULATION_NAME}","avrxmega7") )
avr_no_stubs = TRUE;
avr_elf_set_global_bfd_parameters ();
diff -Nur ../binutils-2.20.orig/opcodes/avr-dis.c ./opcodes/avr-dis.c
--- ../binutils-2.20.orig/opcodes/avr-dis.c 2008-11-06 13:03:24.000000000 +0100
+++ ./opcodes/avr-dis.c 2010-03-04 11:34:09.000000000 +0100
@@ -50,7 +50,7 @@
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 @@
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 @@
sprintf (comment, "%d", x);
}
break;
+
+ case 'E':
+ sprintf (buf, "%d", (insn >> 4) & 15);
+ break;
case '?':
*buf = '\0';
@@ -331,7 +345,8 @@
if (opcode->name)
{
- char *op = opcode->constraints;
+ char *constraints = opcode->constraints;
+ char *opcode_str = opcode->opcode;
insn2 = 0;
ok = 1;
@@ -342,14 +357,14 @@
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);
}
}

341
binutils-debian/changelog Normal file
View file

@ -0,0 +1,341 @@
binutils-avr (2.20.1-2) unstable; urgency=low
* Include our own copy of the binutils 2.20.1 source since binutils-
source now provides version 2.21 and version 2.20.1 is the latest with
upstream avr support (closes: #618657).
* Added -Wno-error=unused-but-set-variable and -Wno-error=unused-but-
set-parameter flags.
* Replaced the patch-set with the patch-set provided by Atmel at
http://distribute.atmel.no/tools/opensource/avr-gcc/binutils-2.20.1/
30-binutils-2.20.1-avr-size.patch
31-binutils-2.20.1-avr-coff.patch
32-binutils-2.20.1-new-sections.patch
34-binutils-2.20.1-as-dwarf.patch
35-binutils-2.20.1-dwarf2-AVRStudio-workaround.patch
36-binutils-2.20.1-assembler-options.patch
50-binutils-2.20.1-xmega.patch
51-binutils-2.20.1-new-devices.patch
52-binutils-2.20.1-avrtiny10.patch
53-binutils-2.20.1-xmega128a1u-64a1u.patch
54-binutils-2.20.1-atxmega16x1-32x1.patch
55-binutils-2.20.1-atxmega128b1.patch
56-binutils-2.20.1-atxmega256a3bu.patch
57-binutils-2.20.1-at90pwm161.patch
58-binutils-2.20.1-atmega16hvb-32hvb.patch
59-binutils-2.20.1-atmega32_5_50_90_pa.patch
60-binutils-2.20.1-bug13789.patch
62-binutils-2.20.1-attiny1634.patch
64-binutils-2.20.1-atmega48pa.patch
-- Hakan Ardo <hakan@debian.org> Sat, 09 Jul 2011 14:01:29 +0200
binutils-avr (2.20.1-1) unstable; urgency=low
* New upstream relese
* Removed build-depends on dbs (closes: #576048)
* Updated the patch-set to use patches from
http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-binutils/:
patch-avr-size
patch-coff-avr
patch-newsections
patch-as-dwarf
patch-as-dwarf-avrstudio
patch-xmega
patch-newdevices
-- Hakan Ardo <hakan@debian.org> Fri, 30 Jul 2010 09:20:02 +0200
binutils-avr (2.20-3) unstable; urgency=low
* Dale Whitfield <dale@4drealtime.co.za> collected a new set of
patches from Eric Weddington (closes: #482356):
30-binutils-2.20-avr-size.patch
31-binutils-2.20-avr-coff.patch
32-binutils-2.20-new-sections.patch
34-binutils-2.20-as-dwarf.patch
35-binutils-2.20-dwarf2-AVRStudio-workaround.patch
50-binutils-2.20-xmega.patch
51-binutils-2.20-new-devices.patch
-- Hakan Ardo <hakan@debian.org> Sat, 20 Feb 2010 09:59:17 +0100
binutils-avr (2.20-2) unstable; urgency=low
* Removed /usr/share/info since these docs are provided in binutils-
doc and gnu-standards (closes: #553541, #553700)
-- Hakan Ardo <hakan@debian.org> Wed, 04 Nov 2009 18:53:17 +0100
binutils-avr (2.20-1) unstable; urgency=low
* New upstream release (closes: #518742, #362270)
* Applied newsections (rev 1.2) and xmega (rev 1.3) patches from
http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-binutils/
-- Hakan Ardo <hakan@debian.org> Sat, 31 Oct 2009 10:37:05 +0100
binutils-avr (2.19-1) unstable; urgency=low
* New upstream release (closes: #518742)
* Applied 3 of the patches from revision 63 of svn repository
https://winavr.svn.sourceforge.net/svnroot/winavr/trunk/patches/binutils/2.19:
30-binutils-2.19-avr-size.patch
50-binutils-2.19-xmega.patch
51-binutils-2.19-xmega2.patch
-- Hakan Ardo <hakan@debian.org> Sun, 04 Oct 2009 09:52:54 +0200
binutils-avr (2.18-4) unstable; urgency=low
* Revered to an unpatched 2.18 release
* Applied WinAVR-20080610 from patches/binutils/2.18 in cvs server
anonymous@winavr.cvs.sourceforge.net:/cvsroot/winavr with tag
WinAVR-20080610:
00-binutils-2.18-version-WinAVR.patch
30-binutils-2.18-avr-size.patch
31-binutils-2.18-avr-coff.patch
32-binutils-2.18-new-sections.patch
33-binutils-2.18-data-origin.patch
40-binutils-2.18-bug-5523.patch
41-binutils-2.18-objdump-mixed.patch
50-0-binutils-2.18-at90pwmx16.patch
50-1-binutils-2.18-attiny43u.patch
50-2-binutils-2.18-attiny48.patch
50-3-binutils-2.18-at90pwm2b3b.patch
50-4-binutils-2.18-remove-devices.patch
50-5-binutils-2.18-atmega48p-88p-168p-328p.patch
50-6-binutils-2.18-attiny88.patch
50-7-binutils-2.18-atmega1284p.patch
50-9-binutils-2.18-avr35.patch
51-binutils-2.18-at86rf401.patch
52-binutils-2.18-xmega.patch
53-binutils-2.18-atmega32m1.patch
54-binutils-2.18-atmega32c1.patch
55-binutils-2.18-atmega32u4.patch
56-binutils-2.18-attiny167.patch
60-binutils-2.18-bug-2626.patch
70-binutils-2.18-bug-6016.patch
* Moved /usr/avr to /usr/lib/avr
-- Hakan Ardo <hakan@debian.org> Wed, 02 Jul 2008 10:52:07 +0200
binutils-avr (2.18-3) unstable; urgency=low
* Upgraded newdevices patch to rev 1.13
* Applied newsections patch rev 1.1 from
http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/ports/devel/avr-
binutils/files/patch-newsections
-- Hakan Ardo <hakan@debian.org> Fri, 08 Feb 2008 09:45:51 +0100
binutils-avr (2.18-2) unstable; urgency=low
* Filename of source tar-ball nolonger hardcoded (closes: #460362)
-- Hakan Ardo <hakan@debian.org> Tue, 05 Feb 2008 20:35:29 +0100
binutils-avr (2.18-1) unstable; urgency=low
* New upstream release (closes: #454687)
* Now uses src from binutils-source (closes: #413215)
* Updated newdevices patch to rev 1.12
-- Hakan Ardo <hakan@debian.org> Sat, 15 Dec 2007 10:45:05 +0100
binutils-avr (2.17-2) unstable; urgency=low
* Updated newdevices patch to rev 1.11
-- Hakan Ardo <hakan@debian.org> Tue, 14 Aug 2007 17:36:23 +0200
binutils-avr (2.17) unstable; urgency=low
* New upstream release
* Applied binutils-patch-newdevices.diff from FreeBSD
(http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/ports/devel/avr-
binutils/files/)
-- Hakan Ardo <hakan@debian.org> Sun, 22 Apr 2007 10:51:18 +0200
binutils-avr (2.16.1-1) unstable; urgency=low
* New upstream release
-- Hakan Ardo <hakan@debian.org> Sat, 4 Feb 2006 16:20:51 +0100
binutils-avr (2.15-3) unstable; urgency=low
* Added patch from Theodore A. Roth that adds support for atmega48,
atmega88, atmega168, attiny13, attiny2313 and at90can128.
* Added patch from Tom Parker <palfrey@tevp.net> that adds --allow-
dollars switch to as which allows dollars in function names
(closes: #247346).
-- Hakan Ardo <hakan@debian.org> Sun, 27 Feb 2005 11:43:00 +0100
binutils-avr (2.15-1) unstable; urgency=low
* Upstream release
-- Hakan Ardo <hakan@debian.org> Wed, 11 Aug 2004 20:18:26 +0200
binutils-avr (2.14-1) unstable; urgency=low
* Upstream upgrade
* Readded Build-Depends on toolchain-source (closes: #199023)
-- Hakan Ardo <hakan@debian.org> Mon, 29 Mar 2004 14:15:56 +0200
binutils-avr (2.13.90.1.030512) unstable; urgency=low
* Now contains the src tar ball
* Uses packaged dbs
* Updated to 030512 snapshot
* No longer Build-Depends on toolchain-source (closes: #187683)
-- Hakan Ardo <hakan@debian.org> Wed, 25 Jun 2003 20:58:07 +0200
binutils-avr (2.13.90.0.18-2) unstable; urgency=low
* Recompiled with toolchain-source 3.2-7
-- Hakan Ardo <hakan@debian.org> Tue, 11 Mar 2003 15:50:57 +0100
binutils-avr (2.13.90.0.18-1) unstable; urgency=low
* New upstream release (2.13.90.0.18)
-- Hakan Ardo <hakan@debian.org> Wed, 26 Feb 2003 12:23:09 +0100
binutils-avr (2.13.90.0.10-1) unstable; urgency=low
* New upstream release (2.13.90.0.10)
* Added patching support
-- Hakan Ardo <hakan@debian.org> Thu, 7 Nov 2002 22:42:16 +0100
binutils-avr (2.13.90.0.4-1) unstable; urgency=low
* New upstream release (2.13.90.0.4)
* Relaxed dependency on native pkg and added README.debian describing
the case
-- Hakan Ardo <hakan@debian.org> Wed, 16 Oct 2002 13:36:55 +0200
binutils-avr (2.13-1) unstable; urgency=low
* New upstream release (2.13)
-- Hakan Ardo <hakan@debian.org> Sun, 18 Aug 2002 16:01:53 +0200
binutils-avr (2.12.90.0.7-4) unstable; urgency=low
* Recompiled with toolchain-source 3.1.1-1
-- Hakan Ardo <hakan@debian.org> Fri, 2 Aug 2002 16:06:26 +0200
binutils-avr (2.12.90.0.7-3) unstable; urgency=low
* Recompiled with toolchain-source 3.1-3
-- Hakan Ardo <hakan@debian.org> Wed, 10 Jul 2002 13:28:07 +0200
binutils-avr (2.12.90.0.7-2) unstable; urgency=low
* Recompiled with toolchain-source 3.1-2
-- Hakan Ardo <hakan@debian.org> Sat, 6 Jul 2002 00:12:28 +0200
binutils-avr (2.12.90.0.7-1) unstable; urgency=low
* New upstream release (2.12.90.0.7)
-- Hakan Ardo <hakan@debian.org> Fri, 31 May 2002 13:44:36 +0200
binutils-avr (2.12.90.0.1-4) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-5
-- Hakan Ardo <hakan@debian.org> Thu, 2 May 2002 15:46:41 +0200
binutils-avr (2.12.90.0.1-3) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-4
-- Hakan Ardo <hakan@debian.org> Mon, 8 Apr 2002 11:24:53 +0200
binutils-avr (2.12.90.0.1-2) unstable; urgency=low
* /usr/include/dis-asm.h removed from cross packages
* Recompiled with toolchain-source 3.0.4-3
-- Hakan Ardo <hakan@debian.org> Sat, 30 Mar 2002 12:16:20 +0100
binutils-avr (2.12.90.0.1-1) unstable; urgency=low
* New upstream release (2.12.90.0.1)
-- Hakan Ardo <hakan@debian.org> Sat, 30 Mar 2002 11:31:19 +0100
binutils-avr (2.11.92.0.12.3-4) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-1
-- Hakan Ardo <hakan@debian.org> Mon, 11 Mar 2002 15:27:18 +0100
binutils-avr (2.11.92.0.12.3-3) unstable; urgency=low
* Added Build-Depends: bzip2 (closes: #129652)
* Renamed avr-linux to avr as we dont run linux on target
* Recompiled with toolchain-source 3.0.3-3
-- Hakan Ardo <hakan@debian.org> Sat, 9 Feb 2002 15:42:19 +0100
binutils-avr (2.11.92.0.12.3-2) unstable; urgency=low
* Now uses tar tjf (Bug #128550)
* No longer includes conflicting files with binutils, but depends on
it (Bug #128550)
* Recompiled with toolchain-source 3.0.3-2
-- Hakan Ardo <hakan@debian.org> Thu, 10 Jan 2002 23:34:54 +0100
binutils-avr (2.11.92.0.12.3-1) unstable; urgency=low
* Updated to upstream version 2.11.92.0.12.3
* Binutils version numer nolonger hardcoded in rules
-- Hakan Ardo <hakan@debian.org> Mon, 7 Jan 2002 15:12:33 +0100
binutils-avr (2.11.90.0.7-5) unstable; urgency=low
* Changed Amtel into Atmel (Bug #114521)
-- Hakan Ardo <hakan@debian.org> Sun, 11 Nov 2001 12:48:06 +0100
binutils-avr (2.11.90.0.7-4) unstable; urgency=low
* Updated build-depend on toolchain-source (Bug #109205)
-- Hakan Ardo <hakan@debian.org> Sun, 19 Aug 2001 22:15:51 +0200
binutils-avr (2.11.90.0.7-3) unstable; urgency=low
* No longer uses apt-get but build-depends on toolchain-source (Bug
#106148)
-- Hakan Ardo <hakan@debian.org> Thu, 26 Jul 2001 11:13:44 +0200
binutils-avr (2.11.90.0.7-2) unstable; urgency=low
* Initial Release as a source pakcage of it's own. Previos
releases was as part of the binutils package.
-- Hakan Ardo <hakan@debian.org> Mon, 9 Jul 2001 22:21:33 +0200
Local variables:
mode: debian-changelog
End:

1
binutils-debian/compat Normal file
View file

@ -0,0 +1 @@
5

18
binutils-debian/control Normal file
View file

@ -0,0 +1,18 @@
Source: binutils-avr
Section: devel
Priority: extra
Maintainer: Hakan Ardo <hakan@debian.org>
Standards-Version: 3.0.1.1
Build-Depends: autoconf (>= 2.13), bison, flex, gettext, texinfo, binutils (>= 2.9.5.0.12), gcc (>= 2.95.2), debhelper (>= 5), tar (>= 1.13.18), bzip2, findutils(>=4.2.31)
Package: binutils-avr
Section: devel
Architecture: any
Priority: extra
Depends: ${shlibs:Depends}
Suggests: binutils (>= ${Source-Version})
Description: Binary utilities supporting Atmel's AVR targets
The programs in this package are used to manipulate binary and object
files that may have been created for Atmel's AVR architecture. This package
is primarily for AVR developers and cross-compilers and is not needed
by normal users or developers.

11
binutils-debian/copyright Normal file
View file

@ -0,0 +1,11 @@
This is a debian pakcage of the GNU assembler, linker, and binary
utilities compiled for cross develoopment for the avr processor.
It is created from a cvs snapshot downloaded from:
ftp://ftp.funet.fi/pub/gnu/prep/binutils/
Copyright: GNU General Public License
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

93
binutils-debian/dbs-build.mk Executable file
View file

@ -0,0 +1,93 @@
#!/usr/bin/make -f
# Separate tarball/patch build system by Adam Heath <doogie@debian.org>
# Modified by Ben Collins <bcollins@debian.org>
#
# Usage in debian/rules - see dbs(7) man page for the full description
#
SOURCE_DIR = build-tree
STAMP_DIR = stampdir
## PATCH_DIR = debian/patches # set this in debian/vars
## SRC_TAR_DIR = .
# include debian/vars if it exists
# this allows to override the above variables
ifneq (,$(wildcard debian/vars))
include debian/vars
debian_vars = debian/vars
else
debian_vars =
endif
SHELL = /bin/bash -e
DBS_SCRIPT_DIR = /usr/share/dbs
DBS_SPLIT = $(DBS_SCRIPT_DIR)/dbs_split
DBS_FILE2CAT = $(DBS_SCRIPT_DIR)/internal/file2cat
DBS_LIB = $(DBS_SCRIPT_DIR)/internal/lib
DBS_VARSBUILD = $(DBS_SCRIPT_DIR)/internal/vars.build
unexport CDPATH ENV
patched = $(STAMP_DIR)/patchapply
unpacked = $(STAMP_DIR)/source.unpack
created = $(STAMP_DIR)/source.created
sh_vars = $(STAMP_DIR)/vars.sh
DBS_LIB += "SOURCE_DIR=\"$(SOURCE_DIR)\""
DBS_LIB += "STAMP_DIR=\"$(STAMP_DIR)\""
DBS_LIB += "VARS_FILE=\"$(sh_vars)\""
DBS_LIB += "STRIP_LEVEL=0"
ifdef TAR_DIR
BUILD_TREE = $(SOURCE_DIR)/$(TAR_DIR)
DBS_LIB += "TAR_DIR=\"$(TAR_DIR)\""
else
BUILD_TREE = $(SOURCE_DIR)
endif
# for backward compatibility (used by pgp4pine)
ifeq (,$(SCRIPT_DIR))
SCRIPT_DIR = $(DBS_SCRIPT_DIR)/internal/
$(STAMP_DIR)/created: $(created)
touch "$@"
endif
dh_mak_deps = $(shell DH_COMPAT=$(DH_COMPAT) perl $(DBS_SPLIT) makedeps)
dh_gen_deps = $(shell DH_COMPAT=$(DH_COMPAT) perl $(DBS_SPLIT) gendeps)
$(dh_mak_deps): $(dh_gen_deps)
perl $(DBS_SPLIT)
setup: $(dh_mak_deps)
dh_testdir
@-up-scripts
$(MAKE) -f debian/rules $(unpacked) $(patched)
$(patched)/: $(created) $(sh_vars) $(unpacked)
$(SHELL) $(DBS_LIB) patch_apply
touch "$@"
unpacked: $(unpacked)
$(unpacked): $(created) $(sh_vars)
$(SHELL) $(DBS_LIB) source_unpack
touch "$@"
make_patch:
mv $(SOURCE_DIR) $(SOURCE_DIR).new
rm -rf $(STAMP_DIR)
$(MAKE) -f debian/rules $(unpacked) $(patched)
mv $(SOURCE_DIR) $(SOURCE_DIR).old
mv $(SOURCE_DIR).new $(SOURCE_DIR)
(cd $(SOURCE_DIR) && diff -Nru ../$(SOURCE_DIR).old ./ || test $$? -eq 1 && exit 0) > new.diff
rm -rf $(SOURCE_DIR).old
@echo; ls -l new.diff
$(created):
test -d $(STAMP_DIR) || mkdir $(STAMP_DIR)
touch "$@"
$(sh_vars): $(debian_vars) $(created)
ifneq (,$(debian_vars))
$(SHELL) $(DBS_VARSBUILD) "$(debian_vars)" shell > "$@"
endif
touch "$@"

6
binutils-debian/dirs Normal file
View file

@ -0,0 +1,6 @@
usr/bin
usr/lib

179
binutils-debian/gasp.1 Normal file
View file

@ -0,0 +1,179 @@
.\" gasp man page by Christopher C. Chimelis, chris@debian.org
.\" for binutils 2.9.5.0.12 17 Sep 1999
.TH gasp 1 "September 1999" Debian "GNU Development Tools"
.SH NAME
gasp \- a preprocessor for assembly programs
.SH SYNOPSIS
.hy 0
.na
.TP
.B gasp
.RB "[\|" \-a | \-\-alternate "\|]"
.RB "[\|" "\-c\ "\c
.I CHAR\c
.RB " | " "\-\-commentchar\ "\c
.I CHAR\c
\&\|]
.RB "[\|" \-d | \-\-debug "\|]"
.RB "[\|" \-h | \-\-help "\|]"
.RB "[\|" \-M | \-\-mri "\|]"
.RB "[\|" "\-o\ "\c
.I OUTFILE\c
.RB " | " "\-\-output\ "\c
.I OUTFILE\c
\&\|]
.RB "[\|" \-p | \-\-print "\|]"
.RB "[\|" \-s | \-\-copysource "\|]"
.RB "[\|" \-u | \-\-unreasonable "\|]"
.RB "[\|" \-v | \-\-version "\|]"
.I INFILE \c
\&.\|.\.
.ad b
.hy 1
.SH DESCRIPTION
\c
The primary purpose of the GNU assembler is to assemble the output of
other programs--notably compilers. When you have to hand-code
specialized routines in assembly, that means the GNU assembler is an
unfriendly processor: it has no directives for macros, conditionals, or
many other conveniences that you might expect.
In some cases you can simply use the C preprocessor, or a generalized
preprocessor like M4; but this can be awkward, since none of these
things are designed with assembly in mind.
.B gasp \c
fills this need. It is expressly designed to provide the
facilities you need with hand-coded assembly code. Implementing it as a
preprocessor, rather than part of the assembler, allows the maximum
flexibility: you can use it with hand-coded assembly, without paying a
penalty of added complexity in the assembler you use for compiler
output.
.PP
.IR "INFILE" .\|.\|.
are the files to be preprocessed.
.SH OPTIONS
The simplest way to use GASP is to run it as a filter and assemble
its output. In Unix and its ilk, you can do this, for example:
$ gasp prog.asm | as -o prog.o
Naturally, there are also a few command-line options to allow you to
request variations on this basic theme. Here is the full set of
possibilities for the GASP command line.
.TP
.B \-a
.TP
.B \-\-alternate
Use alternative macro syntax. *Note Alternate macro syntax:
Alternate, for a discussion of how this syntax differs from the
default GASP syntax.
.TP
.BI "\-c " CHAR
.TP
.BI "\-\-commentchar " CHAR
Use CHAR as the comment character. The default comment character
is `!'. For example, to use a semicolon as the comment character,
specify `-c ';'' on the GASP command line. Since assembler
command characters often have special significance to command
shells, it is a good idea to quote or escape CHAR when you specify
a comment character.
For the sake of simplicity, all examples in this manual use the
default comment character `!'.
.TP
.B \-d
.TP
.B \-\-debug
Show debugging statistics. In this version of GASP, this option
produces statistics about the string buffers that GASP allocates
internally. For each defined buffersize S, GASP shows the number
of strings N that it allocated, with a line like this:
strings size S : N
GASP displays these statistics on the standard error stream, when
done preprocessing.
.TP
.B \-h
.TP
.B \-\-help
Display a summary of the GASP command line options.
.TP
.B \-M
.TP
.B \-\-mri
Use MRI compatibility mode. Using this option causes GASP to
accept the syntax and pseudo-ops used by the Microtec Research
`ASM68K' assembler.
.TP
.BI "\-o " OUTFILE
.TP
.BI "\-\-output " OUTFILE
`-o OUTFILE'
`--output OUTFILE'
Write the output in a file called OUTFILE. If you do not use the
`-o' option, GASP writes its output on the standard output stream.
.TP
.B \-p
.TP
.B \-\-print
Print line numbers. GASP obeys this option _only_ if you also
specify `-s' to copy source lines to its output. With `-s -p',
GASP displays the line number of each source line copied
(immediately after the comment character at the beginning of the
line).
.TP
.B \-s
.TP
.B \-\-copysource
Copy the source lines to the output file. Use this option to see
the effect of each preprocessor line on the GASP output. GASP
places a comment character (`!' by default) at the beginning of
each source line it copies, so that you can use this option and
still assemble the result.
.TP
.B \-u
.TP
.B \-\-unreasonable
Bypass "unreasonable expansion" limit. Since you can define GASP
macros inside other macro definitions, the preprocessor normally
includes a sanity check. If your program requires more than 1,000
nested expansions, GASP normally exits with an error message. Use
this option to turn off this check, allowing unlimited nested
expansions.
.TP
.B \-v
.TP
.B \-\-version
Display the GASP version number.
.TP
.IB INFILE \ .\.\.
The input file names. You must specify at least one input file;
if you specify more, GASP preprocesses them all, concatenating the
output in the order you list the INFILE arguments.
Mark the end of each input file with the preprocessor command
`.END'.
.SH SEE ALSO
.RB "`\|" gasp "\|'"
entry in
.B info\c
\&;
.I
The GNU Binary Utilities\c
\&, Roland H. Pesch (October 1991);
.BR gasp "(" 1 ")."

View file

@ -0,0 +1,97 @@
--- binutils-2.18/gas/config/tc-avr.c~ Mon Aug 6 21:59:55 2007
+++ binutils-2.18/gas/config/tc-avr.c Sat Oct 27 16:30:54 2007
@@ -97,22 +97,28 @@
{"attiny25", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny48", AVR_ISA_TINY2, bfd_mach_avr2},
{"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega48p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega83", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8535 */
{"atmega85", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8 */
{"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega88p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm1", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm2", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm2b", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm3", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm3b", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega16", AVR_ISA_M323, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_M323, bfd_mach_avr5},
@@ -121,6 +127,7 @@
{"atmega165", AVR_ISA_M323, bfd_mach_avr5},
{"atmega165p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega168", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega168p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32", AVR_ISA_M323, bfd_mach_avr5},
@@ -128,6 +135,7 @@
{"atmega324p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega328p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega3250", AVR_ISA_M323, bfd_mach_avr5},
@@ -150,6 +158,8 @@
{"at90can32" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can64" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
+ {"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
+ {"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb82", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb162", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
--- binutils-2.18/gas/doc/c-avr.texi~ Mon Aug 6 22:00:08 2007
+++ binutils-2.18/gas/doc/c-avr.texi Sat Oct 27 16:30:52 2007
@@ -41,24 +41,26 @@
attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
-attiny45, attiny85).
+attiny45, attiny85, attiny43u, attiny48).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
at76c711).
-Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
-atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm3).
+Instruction set avr4 is for the enhanced AVR core with up to 8K
+program memory space (MCU types: atmega48, atmega48p, atmega8,
+atmega83, atmega85, atmega88, atmega88p, atmega8515, atmega8535,
+atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b).
-Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega161, atmega162, atmega163,
-atmega164p, atmega165, atmega165p, atmega168, atmega169, atmega169p,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega329,
-atmega329p, atmega3250, atmega3250p, atmega3290, atmega3290p, atmega406,
-atmega64, atmega640, atmega644, atmega644p, atmega128, atmega1280,
-atmega1281, atmega645, atmega649, atmega6450, atmega6490, atmega16hva,
-at90can32, at90can64, at90can128, at90usb82, at90usb162, at90usb646,
+Instruction set avr5 is for the enhanced AVR core with up to 128K
+program memory space (MCU types: atmega16, atmega161, atmega162,
+atmega163, atmega164p, atmega165, atmega165p, atmega168, atmega168p,
+atmega169, atmega169p, atmega32, atmega323, atmega324p, atmega325,
+atmega325p, atmega328p, atmega329, atmega329p, atmega3250,
+atmega3250p, atmega3290, atmega3290p, atmega406, atmega64, atmega640,
+atmega644, atmega644p, atmega128, atmega1280, atmega1281, atmega645,
+atmega649, atmega6450, atmega6490, atmega16hva, at90can32, at90can64,
+at90can128, at90pwm216, at90pwm316, at90usb82, at90usb162, at90usb646,
at90usb647, at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program

View file

@ -0,0 +1,22 @@
WinAVR specific only
Need configure options like GCC.
--------------------------------------------------------------------------------
diff -Nur ../binutils-2.18.orig/bfd/Makefile.am ./bfd/Makefile.am
--- bfd/Makefile.in Tue Oct 23 21:44:07 2007
+++ bfd/Makefile.in Tue Oct 23 22:41:01 2007
@@ -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) (WinAVR 20080610)\"" ;\
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} (WinAVR 20080610)\"" ;\
bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
fi ;\
sed -e "s,@bfd_version@,$$bfd_version," \

View file

@ -0,0 +1,431 @@
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,156 @@ 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},
+
+ {"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},
+
+ {"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},
+
+ {"atmega406", AVR40K, AVR512, AVR2K},
+
+ {"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},
+
+ {"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},
+
+ {"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 +240,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 +250,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 +261,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 +269,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 +301,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 +310,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 +326,10 @@ main (int argc, char **argv)
}
break;
+ case OPTION_MCU:
+ avrmcu = optarg;
+ break;
+
case OPTION_TARGET:
target = optarg;
break;
@@ -189,11 +358,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 +411,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 +772,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

View file

@ -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) }

View file

@ -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

View file

@ -0,0 +1,30 @@
Committed
Binutils 2.19.
Backport patch to fix Binutils bug #5523.
--------------------------------------------------------------------------------
Index: gas/config/tc-avr.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-avr.c,v
retrieving revision 1.48
diff -c -3 -p -r1.48 tc-avr.c
*** gas/config/tc-avr.c 16 Nov 2007 17:39:22 -0000 1.48
--- gas/config/tc-avr.c 7 Jan 2008 16:43:30 -0000
*************** avr_ldi_expression (expressionS *exp)
*** 618,624 ****
break;
default:
! as_warn (_("expression dangerous with linker stubs"));
}
}
return reloc_to_return;
--- 618,626 ----
break;
default:
! /* PR 5523: Do not generate a warning here,
! legitimate code can trigger this case. */
! break;
}
}
return reloc_to_return;

View file

@ -0,0 +1,19 @@
Not committed.
Needs bug report filed
--------------------------------------------------------------------------------
diff -Nbaur binutils-2.18.50/binutils/objdump.c binutils-2.18.50-mod/binutils/objdump.c
--- binutils/objdump.c Thu Feb 7 16:04:47 2008
+++ binutils/objdump.c Thu Feb 7 16:02:11 2008
@@ -964,7 +964,12 @@
#endif
const char *map;
struct stat st;
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN32__
+ int fd = open (fn, O_RDONLY | O_BINARY);
+#else
int fd = open (fn, O_RDONLY);
+#endif
if (fd < 0)
return NULL;

View file

@ -0,0 +1,26 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-09-12 15:26:14.000000000 -0600
+++ gas/config/tc-avr.c 2007-09-12 15:27:35.046875000 -0600
@@ -150,6 +150,8 @@ static struct mcu_type_s mcu_types[] =
{"at90can32" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can64" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
+ {"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
+ {"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb82", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb162", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2007-10-04 20:00:29.638750000 -0600
+++ gas/doc/c-avr.texi 2007-10-04 20:01:49.107500000 -0600
@@ -58,7 +58,8 @@ atmega32, atmega323, atmega324p, atmega3
atmega329p, atmega3250, atmega3250p, atmega3290, atmega3290p, atmega406,
atmega64, atmega640, atmega644, atmega644p, atmega128, atmega1280,
atmega1281, atmega645, atmega649, atmega6450, atmega6490, atmega16hva,
-at90can32, at90can64, at90can128, at90usb82, at90usb162, at90usb646,
+at90can32, at90can64, at90can128, at90pwm216, at90pwm316,
+at90usb82, at90usb162, at90usb646,
at90usb647, at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program

View file

@ -0,0 +1,24 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-09-26 09:40:21.793625000 -0600
+++ gas/config/tc-avr.c 2007-09-26 09:41:19.887375000 -0600
@@ -98,6 +98,7 @@ static struct mcu_type_s mcu_types[] =
{"attiny25", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
{"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
--- gas/doc/c-avr.texi.old 2007-10-04 20:54:00.531750000 -0600
+++ gas/doc/c-avr.texi 2007-10-04 20:54:55.406750000 -0600
@@ -41,7 +41,7 @@ Instruction set avr2 (default) is for th
attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
-attiny45, attiny85).
+attiny45, attiny85, attiny43u).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,

View file

@ -0,0 +1,24 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/doc/c-avr.texi.old 2007-10-05 13:09:07.663000000 -0600
+++ gas/doc/c-avr.texi 2007-10-05 13:09:36.350500000 -0600
@@ -41,7 +41,7 @@ Instruction set avr2 (default) is for th
attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
-attiny45, attiny85, attiny43u).
+attiny45, attiny85, attiny43u, attiny48).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
--- gas/config/tc-avr.c.old 2007-10-05 13:12:31.959875000 -0600
+++ gas/config/tc-avr.c 2007-10-05 13:13:11.506750000 -0600
@@ -99,6 +99,7 @@ static struct mcu_type_s mcu_types[] =
{"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny48", AVR_ISA_TINY2, bfd_mach_avr2},
{"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},

View file

@ -0,0 +1,27 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-10-09 09:04:20.265625000 -0600
+++ gas/config/tc-avr.c 2007-10-09 09:05:46.312500000 -0600
@@ -115,7 +115,9 @@ static struct mcu_type_s mcu_types[] =
{"atmega8hva", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm1", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm2", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm2b", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm3", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm3b", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega16", AVR_ISA_M323, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_M323, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2007-10-09 09:09:03.468750000 -0600
+++ gas/doc/c-avr.texi 2007-10-09 09:09:27.859375000 -0600
@@ -49,7 +49,8 @@ at76c711).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
-atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm3).
+atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b,
+at90pwm3, at90pwm3b).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
memory space (MCU types: atmega16, atmega161, atmega162, atmega163,

View file

@ -0,0 +1,65 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-10-18 15:59:10.764125000 -0600
+++ gas/config/tc-avr.c 2007-10-19 13:25:41.451886700 -0600
@@ -68,7 +68,6 @@ static struct mcu_type_s mcu_types[] =
{"avr5", AVR_ISA_ALL, bfd_mach_avr5},
{"avr6", AVR_ISA_ALL, bfd_mach_avr6},
{"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
- {"attiny10", AVR_ISA_TINY1, bfd_mach_avr1}, /* XXX -> tn11 */
{"attiny11", AVR_ISA_TINY1, bfd_mach_avr1},
{"attiny12", AVR_ISA_TINY1, bfd_mach_avr1},
{"attiny15", AVR_ISA_TINY1, bfd_mach_avr1},
@@ -99,15 +98,12 @@ static struct mcu_type_s mcu_types[] =
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny48", AVR_ISA_TINY2, bfd_mach_avr2},
- {"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
- {"atmega83", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8535 */
- {"atmega85", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8 */
{"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
@@ -332,8 +328,8 @@ md_show_usage (FILE *stream)
" [avr-name] can be:\n"
" avr1 - AT90S1200, ATtiny1x, ATtiny28\n"
" avr2 - AT90S2xxx, AT90S4xxx, AT90S8xxx, ATtiny22\n"
- " avr3 - ATmega103, ATmega603\n"
- " avr4 - ATmega83, ATmega85\n"
+ " avr3 - ATmega103\n"
+ " avr4 - ATmega8, ATmega88\n"
" avr5 - ATmega161, ATmega163, ATmega32, AT94K\n"
" or immediate microcontroller name.\n"));
fprintf (stream,
--- gas/doc/c-avr.texi.old 2007-10-18 16:04:29.936000000 -0600
+++ gas/doc/c-avr.texi 2007-10-18 16:05:48.748500000 -0600
@@ -33,7 +33,7 @@
Specify ATMEL AVR instruction set or MCU type.
Instruction set avr1 is for the minimal AVR core, not supported by the C
-compiler, only for assembler programs (MCU types: at90s1200, attiny10,
+compiler, only for assembler programs (MCU types: at90s1200,
attiny11, attiny12, attiny15, attiny28).
Instruction set avr2 (default) is for the classic AVR core with up to
@@ -44,11 +44,11 @@ attiny261, attiny461, attiny861, attiny2
attiny45, attiny85, attiny43u, attiny48).
Instruction set avr3 is for the classic AVR core with up to 128K program
-memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
+memory space (MCU types: atmega103, at43usb320, at43usb355,
at76c711).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
+memory space (MCU types: atmega48, atmega8, atmega88,
atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b,
at90pwm3, at90pwm3b).

View file

@ -0,0 +1,74 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
Index: gas/config/tc-avr.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-avr.c,v
retrieving revision 1.44
diff -u -r1.44 tc-avr.c
--- gas/config/tc-avr.c 31 Oct 2007 18:11:28 -0000 1.44
+++ gas/config/tc-avr.c 1 Nov 2007 07:24:12 -0000
@@ -103,8 +103,10 @@
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega48p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega88p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_PWMx, bfd_mach_avr4},
@@ -121,6 +123,7 @@
{"atmega165", AVR_ISA_M323, bfd_mach_avr5},
{"atmega165p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega168", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega168p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32", AVR_ISA_M323, bfd_mach_avr5},
@@ -128,6 +131,7 @@
{"atmega324p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega328p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega3250", AVR_ISA_M323, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2007-11-02 10:30:57.213499800 -0600
+++ gas/doc/c-avr.texi 2007-11-02 10:34:24.557249800 -0600
@@ -44,24 +44,23 @@ attiny261, attiny461, attiny861, attiny2
attiny45, attiny85, attiny43u, attiny48).
Instruction set avr3 is for the classic AVR core with up to 128K program
-memory space (MCU types: atmega103, at43usb320, at43usb355,
-at76c711).
+memory space (MCU types: atmega103, at43usb320, at43usb355, at76c711).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega8, atmega88,
+memory space (MCU types: atmega48, atmega48p atmega8, atmega88, atmega88p,
atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b,
at90pwm3, at90pwm3b).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
memory space (MCU types: atmega16, atmega161, atmega162, atmega163,
-atmega164p, atmega165, atmega165p, atmega168, atmega169, atmega169p,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega329,
-atmega329p, atmega3250, atmega3250p, atmega3290, atmega3290p, atmega406,
-atmega64, atmega640, atmega644, atmega644p, atmega128, atmega1280,
-atmega1281, atmega645, atmega649, atmega6450, atmega6490, atmega16hva,
-at90can32, at90can64, at90can128, at90pwm216, at90pwm316,
-at90usb82, at90usb162, at90usb646,
-at90usb647, at90usb1286, at90usb1287, at94k).
+atmega164p, atmega165, atmega165p, atmega168, atmega168p, atmega169,
+atmega169p, atmega32, atmega323, atmega324p, atmega325, atmega325p,
+atmega328p, atmega329, atmega329p, atmega3250, atmega3250p, atmega3290,
+atmega3290p, atmega406, atmega64, atmega640, atmega644, atmega644p,
+atmega128, atmega1280, atmega1281, atmega645, atmega649, atmega6450,
+atmega6490, atmega16hva, at90can32, at90can64, at90can128, at90pwm216,
+at90pwm316, at90usb82, at90usb162, at90usb646, at90usb647, at90usb1286,
+at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).

View file

@ -0,0 +1,24 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-11-07 00:00:58.640625000 -0700
+++ gas/config/tc-avr.c 2007-11-07 00:01:48.500000000 -0700
@@ -100,6 +100,7 @@ static struct mcu_type_s mcu_types[] =
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny48", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny88", AVR_ISA_TINY2, bfd_mach_avr2},
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
--- gas/doc/c-avr.texi.old 2007-11-07 00:01:14.781250000 -0700
+++ gas/doc/c-avr.texi 2007-11-07 00:02:18.812500000 -0700
@@ -41,7 +41,7 @@ Instruction set avr2 (default) is for th
attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
-attiny45, attiny85, attiny43u, attiny48).
+attiny45, attiny85, attiny43u, attiny48, attiny88).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, at43usb320, at43usb355, at76c711).

View file

@ -0,0 +1,30 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2007-11-12 21:10:06.653875000 -0700
+++ gas/config/tc-avr.c 2007-11-12 21:26:42.778875000 -0700
@@ -147,6 +147,7 @@ static struct mcu_type_s mcu_types[] =
{"atmega128", AVR_ISA_M128, bfd_mach_avr5},
{"atmega1280", AVR_ISA_M128, bfd_mach_avr5},
{"atmega1281", AVR_ISA_M128, bfd_mach_avr5},
+ {"atmega1284p",AVR_ISA_M128, bfd_mach_avr5},
{"atmega645", AVR_ISA_M323, bfd_mach_avr5},
{"atmega649", AVR_ISA_M323, bfd_mach_avr5},
{"atmega6450", AVR_ISA_M323, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2007-11-12 21:10:37.138250000 -0700
+++ gas/doc/c-avr.texi 2007-11-12 21:28:45.013250000 -0700
@@ -57,10 +57,10 @@ atmega164p, atmega165, atmega165p, atmeg
atmega169p, atmega32, atmega323, atmega324p, atmega325, atmega325p,
atmega328p, atmega329, atmega329p, atmega3250, atmega3250p, atmega3290,
atmega3290p, atmega406, atmega64, atmega640, atmega644, atmega644p,
-atmega128, atmega1280, atmega1281, atmega645, atmega649, atmega6450,
-atmega6490, atmega16hva, at90can32, at90can64, at90can128, at90pwm216,
-at90pwm316, at90usb82, at90usb162, at90usb646, at90usb647, at90usb1286,
-at90usb1287, at94k).
+atmega128, atmega1280, atmega1281, atmega1284p, atmega645, atmega649,
+atmega6450, atmega6490, atmega16hva, at90can32, at90can64, at90can128,
+at90pwm216, at90pwm316, at90usb82, at90usb162, at90usb646, at90usb647,
+at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).

View file

@ -0,0 +1,83 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
Index: gas/config/tc-avr.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-avr.c,v
retrieving revision 1.48
diff -u -p -r1.48 tc-avr.c
--- gas/config/tc-avr.c 16 Nov 2007 17:39:22 -0000 1.48
+++ gas/config/tc-avr.c 3 Jan 2008 20:56:39 -0000
@@ -63,7 +63,7 @@ static struct mcu_type_s mcu_types[] =
{
{"avr1", AVR_ISA_TINY1, bfd_mach_avr1},
{"avr2", AVR_ISA_TINY2, bfd_mach_avr2},
- {"avr3", AVR_ISA_M103, bfd_mach_avr3},
+ {"avr3", AVR_ISA_AVR3, bfd_mach_avr3},
{"avr4", AVR_ISA_M8, bfd_mach_avr4},
{"avr5", AVR_ISA_ALL, bfd_mach_avr5},
{"avr6", AVR_ISA_ALL, bfd_mach_avr6},
@@ -103,6 +103,8 @@ static struct mcu_type_s mcu_types[] =
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
+ {"at90usb82", AVR_ISA_USB162, bfd_mach_avr3},
+ {"at90usb162", AVR_ISA_USB162, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega48p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
@@ -159,8 +161,6 @@ static struct mcu_type_s mcu_types[] =
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
{"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
{"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
- {"at90usb82", AVR_ISA_M323, bfd_mach_avr5},
- {"at90usb162", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
Index: gas/doc/c-avr.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-avr.texi,v
retrieving revision 1.12
diff -u -p -r1.12 c-avr.texi
--- gas/doc/c-avr.texi 16 Nov 2007 17:39:22 -0000 1.12
+++ gas/doc/c-avr.texi 3 Jan 2008 20:56:39 -0000
@@ -44,7 +44,8 @@ attiny261, attiny461, attiny861, attiny2
attiny45, attiny85, attiny43u, attiny48, attiny88).
Instruction set avr3 is for the classic AVR core with up to 128K program
-memory space (MCU types: atmega103, at43usb320, at43usb355, at76c711).
+memory space (MCU types: atmega103, at43usb320, at43usb355, at76c711,
+at90usb82, at90usb162).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
memory space (MCU types: atmega48, atmega48p,atmega8, atmega88, atmega88p,
@@ -59,8 +60,8 @@ atmega328p, atmega329, atmega329p, atmeg
atmega3290p, atmega32hvb, atmega406, atmega64, atmega640, atmega644, atmega644p,
atmega128, atmega1280, atmega1281, atmega1284p, atmega645, atmega649,
atmega6450, atmega6490, atmega16hva, at90can32, at90can64, at90can128,
-at90pwm216, at90pwm316, at90usb82, at90usb162, at90usb646, at90usb647,
-at90usb1286, at90usb1287, at94k).
+at90pwm216, at90pwm316, at90usb646, at90usb647, at90usb1286, at90usb1287,
+at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).
Index: include/opcode/avr.h
===================================================================
RCS file: /cvs/src/src/include/opcode/avr.h,v
retrieving revision 1.9
diff -u -p -r1.9 avr.h
--- include/opcode/avr.h 7 Apr 2006 15:18:08 -0000 1.9
+++ include/opcode/avr.h 3 Jan 2008 20:56:40 -0000
@@ -40,6 +40,10 @@
AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA)
#define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM)
+#define AVR_ISA_USB162 (AVR_ISA_M603 | AVR_ISA_MOVW | \
+ AVR_ISA_LPMX | AVR_ISA_SPM)
+#define AVR_ISA_AVR3 (AVR_ISA_M603 | AVR_ISA_MOVW | \
+ AVR_ISA_LPMX | AVR_ISA_SPM | AVR_ISA_ELPM)
#define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \
AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)

View file

@ -0,0 +1,24 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- include/opcode/avr.h.old 2008-01-14 21:50:24.960032000 -0700
+++ include/opcode/avr.h 2008-01-14 21:51:16.435550300 -0700
@@ -34,6 +34,7 @@
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
#define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK)
#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
+#define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \
AVR_ISA_SPM | AVR_ISA_BRK)
#define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \
--- gas/config/tc-avr.c.old 2008-01-14 21:46:45.595033500 -0700
+++ gas/config/tc-avr.c 2008-01-14 21:51:38.911750800 -0700
@@ -84,7 +84,7 @@ static struct mcu_type_s mcu_types[] =
{"at90s8515", AVR_ISA_2xxx, bfd_mach_avr2},
{"at90s8535", AVR_ISA_2xxx, bfd_mach_avr2},
{"at90c8534", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at86rf401", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at86rf401", AVR_ISA_RF401, bfd_mach_avr2},
{"attiny13", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny2313", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny261", AVR_ISA_TINY2, bfd_mach_avr2},

View file

@ -0,0 +1,555 @@
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-04-09 14:03:00.411627300 -0600
+++ gas/config/tc-avr.c 2008-04-09 16:35:42.382096600 -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[] = ";";
@@ -64,9 +65,19 @@ static struct mcu_type_s mcu_types[] =
{"avr1", AVR_ISA_TINY1, bfd_mach_avr1},
{"avr2", AVR_ISA_TINY2, bfd_mach_avr2},
{"avr3", AVR_ISA_AVR3, bfd_mach_avr3},
+ {"avr31", AVR_ISA_M103, bfd_mach_avr3},
+ {"avr35", AVR_ISA_USB162, bfd_mach_avr3},
{"avr4", AVR_ISA_M8, bfd_mach_avr4},
- {"avr5", AVR_ISA_ALL, bfd_mach_avr5},
+ {"avr5", AVR_ISA_M323, bfd_mach_avr5},
+ {"avr51", AVR_ISA_M128, bfd_mach_avr5},
{"avr6", AVR_ISA_ALL, 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_TINY1, bfd_mach_avr1},
{"attiny12", AVR_ISA_TINY1, bfd_mach_avr1},
@@ -169,8 +180,10 @@ static struct mcu_type_s mcu_types[] =
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
{"at90usb1287",AVR_ISA_M128, bfd_mach_avr5},
{"at94k", AVR_ISA_94K, bfd_mach_avr5},
- {"atmega2560", AVR_ISA_ALL, bfd_mach_avr6},
- {"atmega2561", AVR_ISA_ALL, bfd_mach_avr6},
+ {"atmega2560", AVR_ISA_M256, bfd_mach_avr6},
+ {"atmega2561", AVR_ISA_M256, bfd_mach_avr6},
+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
{NULL, 0, 0}
};
@@ -804,7 +817,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+". */
@@ -921,6 +939,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). *}
Index: bfd/cpu-avr.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-avr.c,v
retrieving revision 1.12
diff -a -u -p -r1.12 cpu-avr.c
--- bfd/cpu-avr.c 3 Jul 2007 14:26:40 -0000 1.12
+++ bfd/cpu-avr.c 14 Feb 2008 18:01:43 -0000
@@ -86,7 +86,29 @@ static const bfd_arch_info_type arch_inf
N (22, bfd_mach_avr5, "avr:5", FALSE, & arch_info_struct[5]),
/* ATmega256x. */
- N (22, bfd_mach_avr6, "avr:6", FALSE, NULL)
+ N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[6]),
+
+ /* Xmega 1 */
+ N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[7]),
+
+ /* Xmega 2 */
+ N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[8]),
+
+ /* Xmega 3 */
+ N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[9]),
+
+ /* Xmega 4 */
+ N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[10]),
+
+ /* Xmega 5 */
+ N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[11]),
+
+ /* Xmega 6 */
+ N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[12]),
+
+ /* Xmega 7 */
+ N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
+
};
const bfd_arch_info_type bfd_avr_arch =
Index: include/elf/avr.h
===================================================================
RCS file: /cvs/src/src/include/elf/avr.h,v
retrieving revision 1.8
diff -a -u -p -r1.8 avr.h
--- include/elf/avr.h 24 May 2006 07:36:11 -0000 1.8
+++ include/elf/avr.h 14 Feb 2008 18:01:44 -0000
@@ -35,7 +35,14 @@
#define E_AVR_MACH_AVR3 3
#define E_AVR_MACH_AVR4 4
#define E_AVR_MACH_AVR5 5
-#define E_AVR_MACH_AVR6 6
+#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)"
Index: ld/configure.tgt
===================================================================
RCS file: /cvs/src/src/ld/configure.tgt,v
retrieving revision 1.217
diff -a -u -p -r1.217 configure.tgt
--- ld/configure.tgt 1 Feb 2008 17:58:48 -0000 1.217
+++ ld/configure.tgt 14 Feb 2008 18:01:45 -0000
@@ -107,7 +107,7 @@ xscale-*-coff) targ_emul=armcoff ;;
xscale-*-elf) targ_emul=armelf
;;
avr-*-*) targ_emul=avr2
- targ_extra_emuls="avr1 avr3 avr4 avr5 avr6"
+ targ_extra_emuls="avr1 avr3 avr4 avr5 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,15 @@ 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 the avr6 and avrxmega* family. */
+ if (strcmp ("${EMULATION_NAME}","avr6")
+ && strcmp ("${EMULATION_NAME}","avrxmega1")
+ && strcmp ("${EMULATION_NAME}","avrxmega2")
+ && strcmp ("${EMULATION_NAME}","avrxmega3")
+ && strcmp ("${EMULATION_NAME}","avrxmega4")
+ && strcmp ("${EMULATION_NAME}","avrxmega5")
+ && 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

View file

@ -0,0 +1,26 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2008-03-02 12:38:55.671875000 -0700
+++ gas/config/tc-avr.c 2008-03-02 12:44:35.562500000 -0700
@@ -172,6 +172,7 @@ static struct mcu_type_s mcu_types[] =
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
{"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
{"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega32m1", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2008-03-02 12:38:55.359375000 -0700
+++ gas/doc/c-avr.texi 2008-03-02 12:45:04.546875000 -0700
@@ -60,8 +60,8 @@ atmega328p, atmega329, atmega329p, atmeg
atmega3290p, atmega32hvb, atmega406, atmega64, atmega640, atmega644, atmega644p,
atmega128, atmega1280, atmega1281, atmega1284p, atmega645, atmega649,
atmega6450, atmega6490, atmega16hva, at90can32, at90can64, at90can128,
-at90pwm216, at90pwm316, at90usb646, at90usb647, at90usb1286, at90usb1287,
-at94k).
+at90pwm216, at90pwm316, atmega32m1, at90usb646, at90usb647, at90usb1286,
+at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).

View file

@ -0,0 +1,26 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2008-03-02 12:56:28.484375000 -0700
+++ gas/config/tc-avr.c 2008-03-11 11:42:21.656250000 -0600
@@ -172,6 +172,7 @@ static struct mcu_type_s mcu_types[] =
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
{"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
{"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega32c1", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32m1", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2008-03-02 12:56:28.390625000 -0700
+++ gas/doc/c-avr.texi 2008-03-11 11:43:41.468750000 -0600
@@ -60,8 +60,8 @@ atmega328p, atmega329, atmega329p, atmeg
atmega3290p, atmega32hvb, atmega406, atmega64, atmega640, atmega644, atmega644p,
atmega128, atmega1280, atmega1281, atmega1284p, atmega645, atmega649,
atmega6450, atmega6490, atmega16hva, at90can32, at90can64, at90can128,
-at90pwm216, at90pwm316, atmega32m1, at90usb646, at90usb647, at90usb1286,
-at90usb1287, at94k).
+at90pwm216, at90pwm316, atmega32c1, atmega32m1, at90usb646, at90usb647,
+at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).

View file

@ -0,0 +1,26 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- gas/config/tc-avr.c.old 2008-03-16 12:57:20.846157400 -0600
+++ gas/config/tc-avr.c 2008-03-22 07:46:46.581060000 -0600
@@ -174,6 +174,7 @@ static struct mcu_type_s mcu_types[] =
{"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32c1", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32m1", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega32u4", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
--- gas/doc/c-avr.texi.old 2008-03-16 12:57:20.799240400 -0600
+++ gas/doc/c-avr.texi 2008-03-22 07:47:42.435982500 -0600
@@ -60,8 +60,8 @@ atmega328p, atmega329, atmega329p, atmeg
atmega3290p, atmega32hvb, atmega406, atmega64, atmega640, atmega644, atmega644p,
atmega128, atmega1280, atmega1281, atmega1284p, atmega645, atmega649,
atmega6450, atmega6490, atmega16hva, at90can32, at90can64, at90can128,
-at90pwm216, at90pwm316, atmega32c1, atmega32m1, at90usb646, at90usb647,
-at90usb1286, at90usb1287, at94k).
+at90pwm216, at90pwm316, atmega32c1, atmega32m1, atmega32u4, at90usb646,
+at90usb647, at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
memory space (MCU types: atmega2560, atmega2561).

View file

@ -0,0 +1,34 @@
Committed
Binutils 2.19
--------------------------------------------------------------------------------
--- include/opcode/avr.h.old 2008-03-25 12:12:41.884348400 -0600
+++ include/opcode/avr.h 2008-03-25 12:16:48.575795000 -0600
@@ -41,6 +41,7 @@
#define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \
AVR_ISA_SPM | AVR_ISA_BRK)
+#define AVR_ISA_TINY3 (AVR_ISA_TINY2 | AVR_ISA_MEGA)
#define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \
AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA)
--- gas/config/tc-avr.c.old 2008-03-25 12:12:41.884348400 -0600
+++ gas/config/tc-avr.c 2008-03-25 12:17:31.683886600 -0600
@@ -116,6 +116,7 @@ static struct mcu_type_s mcu_types[] =
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
{"at90usb82", AVR_ISA_USB162, bfd_mach_avr3},
{"at90usb162", AVR_ISA_USB162, bfd_mach_avr3},
+ {"attiny167", AVR_ISA_TINY3, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega48p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
--- gas/doc/c-avr.texi.old 2008-03-25 12:12:41.853088000 -0600
+++ gas/doc/c-avr.texi 2008-03-25 12:17:45.297790800 -0600
@@ -45,7 +45,7 @@ attiny45, attiny85, attiny43u, attiny48,
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, at43usb320, at43usb355, at76c711,
-at90usb82, at90usb162).
+at90usb82, at90usb162, attiny167).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
memory space (MCU types: atmega48, atmega48p atmega8, atmega88, atmega88p,

View file

@ -0,0 +1,67 @@
Committed, Bug fixed
Binutils 2.19
This patch must come after 51-binutils-2.18-at86rf401.patch, which has
already been committed to binutils CVS.
--------------------------------------------------------------------------------
===================================================================
RCS file: /cvs/include/opcode/avr.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- include/opcode/avr.h 2008/01/23 17:36:23 1.11
+++ include/opcode/avr.h 2008/02/14 13:04:29 1.12
@@ -1,6 +1,6 @@
/* Opcode table for the Atmel AVR micro controllers.
- Copyright 2000, 2001, 2004, 2006 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2004, 2006, 2008 Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
This program is free software; you can redistribute it and/or modify
@@ -34,6 +34,8 @@
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
#define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK)
#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
+/* For the attiny26 which is missing LPM Rd,Z+. */
+#define AVR_ISA_2xxe (AVR_ISA_2xxx | AVR_ISA_LPMX)
#define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \
AVR_ISA_SPM | AVR_ISA_BRK)
===================================================================
RCS file: /cvs/gas/config/tc-avr.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- gas/config/tc-avr.c 2008/01/23 17:36:23 1.50
+++ gas/config/tc-avr.c 2008/02/14 13:04:29 1.51
@@ -1,6 +1,6 @@
/* tc-avr.c -- Assembler code for the ATMEL AVR
- Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
+ Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
@@ -77,7 +77,7 @@
{"at90s2333", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 4433 */
{"at90s2343", AVR_ISA_2xxx, bfd_mach_avr2},
{"attiny22", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 2343 */
- {"attiny26", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"attiny26", AVR_ISA_2xxe, bfd_mach_avr2},
{"at90s4433", AVR_ISA_2xxx, bfd_mach_avr2},
{"at90s4414", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8515 */
{"at90s4434", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8535 */
@@ -765,6 +765,12 @@
++str;
op_mask |= 1;
}
+
+ /* attiny26 can do "lpm" and "lpm r,Z" but not "lpm r,Z+". */
+ if (!avr_opt.all_opcodes
+ && (op_mask & 0x0001)
+ && !(avr_mcu->isa & AVR_ISA_MOVW))
+ as_bad (_("postincrement not supported"));
break;
case 'b':

View file

@ -0,0 +1,24 @@
Index: bfd/elf32-avr.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-avr.c,v
retrieving revision 1.34
diff -c -3 -p -r1.34 elf32-avr.c
*** bfd/elf32-avr.c 12 Mar 2008 08:36:58 -0000 1.34
--- bfd/elf32-avr.c 30 May 2008 15:36:27 -0000
*************** elf32_avr_relax_section (bfd *abfd,
*** 2034,2040 ****
/* Check for local symbols. */
isym = (Elf_Internal_Sym *) symtab_hdr->contents;
isymend = isym + symtab_hdr->sh_info;
! for (; isym < isymend; isym++)
{
if (isym->st_value == section_offset_of_ret_insn
&& isym->st_shndx == sec_shndx)
--- 2034,2040 ----
/* Check for local symbols. */
isym = (Elf_Internal_Sym *) symtab_hdr->contents;
isymend = isym + symtab_hdr->sh_info;
! for (; isym != NULL && isym < isymend; isym++)
{
if (isym->st_value == section_offset_of_ret_insn
&& isym->st_shndx == sec_shndx)

View file

@ -0,0 +1,513 @@
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
@@ -36,10 +36,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
@@ -48,9 +69,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;
@@ -64,6 +84,238 @@ 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 AVR20K 20480UL
+#define AVR24K 24576UL
+#define AVR32K 32768UL
+#define AVR36K 36864UL
+#define AVR40K 40960UL
+#define AVR64K 65536UL
+#define AVR68K 69632UL
+#define AVR128K 131072UL
+#define AVR136K 139264UL
+#define AVR200K 204800UL
+#define AVR256K 262144UL
+#define AVR264K 270336UL
+
+typedef struct
+{
+ char *name;
+ long flash;
+ long ram;
+ long eeprom;
+} avr_device_t;
+
+avr_device_t avr[] =
+{
+ {"atxmega256a3", AVR264K, AVR16K, AVR4K},
+ {"atxmega256a3b", AVR264K, AVR16K, AVR4K},
+ {"atxmega256d3", AVR264K, AVR16K, AVR4K},
+
+ {"atmega2560", AVR256K, AVR8K, AVR4K},
+ {"atmega2561", AVR256K, AVR8K, AVR4K},
+
+ {"atxmega192a3", AVR200K, AVR16K, AVR2K},
+ {"atxmega192d3", AVR200K, AVR16K, AVR2K},
+
+ {"atxmega128a1", AVR136K, AVR8K, AVR2K},
+ {"atxmega128a3", AVR136K, AVR8K, AVR2K},
+ {"atxmega128d3", AVR136K, AVR8K, AVR2K},
+
+ {"at43usb320", AVR128K, 608UL, 0UL},
+ {"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},
+ {"atmega128rfa1", AVR128K, AVR16K, AVR4K},
+ {"atmega103", AVR128K, 4000UL, AVR4K},
+
+ {"atxmega64a1", AVR68K, AVR4K, AVR2K},
+ {"atxmega64a3", AVR68K, AVR4K, AVR2K},
+ {"atxmega64d3", AVR68K, AVR4K, AVR2K},
+
+ {"at90can64", AVR64K, AVR4K, AVR2K},
+ {"at90scr100", AVR64K, AVR4K, AVR2K},
+ {"at90usb646", AVR64K, AVR4K, AVR2K},
+ {"at90usb647", AVR64K, AVR4K, AVR2K},
+ {"atmega64", AVR64K, AVR4K, AVR2K},
+ {"atmega640", AVR64K, AVR8K, AVR4K},
+ {"atmega644", AVR64K, AVR4K, AVR2K},
+ {"atmega644a", AVR64K, AVR4K, AVR2K},
+ {"atmega644p", AVR64K, AVR4K, AVR2K},
+ {"atmega644pa", AVR64K, AVR4K, AVR2K},
+ {"atmega645", AVR64K, AVR4K, AVR2K},
+ {"atmega645a", AVR64K, AVR4K, AVR2K},
+ {"atmega645p", AVR64K, AVR4K, AVR2K},
+ {"atmega6450", AVR64K, AVR4K, AVR2K},
+ {"atmega6450a", AVR64K, AVR4K, AVR2K},
+ {"atmega6450p", AVR64K, AVR4K, AVR2K},
+ {"atmega649", AVR64K, AVR4K, AVR2K},
+ {"atmega649a", AVR64K, AVR4K, AVR2K},
+ {"atmega649p", AVR64K, AVR4K, AVR2K},
+ {"atmega6490", AVR64K, AVR4K, AVR2K},
+ {"atmega6490a", AVR64K, AVR4K, AVR2K},
+ {"atmega6490p", AVR64K, AVR4K, AVR2K},
+ {"atmega64c1", AVR64K, AVR4K, AVR2K},
+ {"atmega64hve", AVR64K, AVR4K, AVR1K},
+ {"atmega64m1", AVR64K, AVR4K, AVR2K},
+
+ {"atmega406", AVR40K, AVR2K, AVR512},
+
+ {"atxmega32a4", AVR36K, AVR4K, AVR1K},
+ {"atxmega32d4", AVR36K, AVR4K, AVR1K},
+
+ {"at90can32", AVR32K, AVR2K, AVR1K},
+ {"at94k", AVR32K, AVR4K, 0UL},
+ {"atmega32", AVR32K, AVR2K, AVR1K},
+ {"atmega323", AVR32K, AVR2K, AVR1K},
+ {"atmega324a", AVR32K, AVR2K, AVR1K},
+ {"atmega324p", AVR32K, AVR2K, AVR1K},
+ {"atmega324pa", AVR32K, AVR2K, AVR1K},
+ {"atmega325", AVR32K, AVR2K, AVR1K},
+ {"atmega325p", AVR32K, AVR2K, AVR1K},
+ {"atmega3250", AVR32K, AVR2K, AVR1K},
+ {"atmega3250p", AVR32K, AVR2K, AVR1K},
+ {"atmega328", AVR32K, AVR2K, AVR1K},
+ {"atmega328p", AVR32K, AVR2K, AVR1K},
+ {"atmega329", AVR32K, AVR2K, AVR1K},
+ {"atmega329p", AVR32K, AVR2K, AVR1K},
+ {"atmega329pa", AVR32K, AVR2K, AVR1K},
+ {"atmega3290", AVR32K, AVR2K, AVR1K},
+ {"atmega3290p", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32c1", AVR32K, AVR2K, AVR1K},
+ {"atmega32hvb", AVR32K, AVR2K, AVR1K},
+ {"atmega32m1", AVR32K, AVR2K, AVR1K},
+ {"atmega32u2", AVR32K, AVR1K, AVR1K},
+ {"atmega32u4", AVR32K, 2560UL, AVR1K},
+ {"atmega32u6", AVR32K, 2560UL, AVR1K},
+
+ {"at43usb355", AVR24K, 1120UL, 0UL},
+
+ {"atxmega16a4", AVR20K, AVR2K, AVR1K},
+ {"atxmega16d4", AVR20K, AVR2K, AVR1K},
+
+ {"at76c711", AVR16K, AVR2K, 0UL},
+ {"at90pwm216", AVR16K, AVR1K, AVR512},
+ {"at90pwm316", AVR16K, AVR1K, AVR512},
+ {"at90usb162", AVR16K, AVR512, AVR512},
+ {"atmega16", AVR16K, AVR1K, AVR512},
+ {"atmega16a", AVR16K, AVR1K, AVR512},
+ {"atmega161", AVR16K, AVR1K, AVR512},
+ {"atmega162", AVR16K, AVR1K, AVR512},
+ {"atmega163", AVR16K, AVR1K, AVR512},
+ {"atmega164", AVR16K, AVR1K, AVR512},
+ {"atmega164a", AVR16K, AVR1K, AVR512},
+ {"atmega164p", AVR16K, AVR1K, AVR512},
+ {"atmega165a", AVR16K, AVR1K, AVR512},
+ {"atmega165", AVR16K, AVR1K, AVR512},
+ {"atmega165p", AVR16K, AVR1K, AVR512},
+ {"atmega168", AVR16K, AVR1K, AVR512},
+ {"atmega168a", AVR16K, AVR1K, AVR512},
+ {"atmega168p", AVR16K, AVR1K, AVR512},
+ {"atmega169", AVR16K, AVR1K, AVR512},
+ {"atmega169a", AVR16K, AVR1K, AVR512},
+ {"atmega169p", AVR16K, AVR1K, AVR512},
+ {"atmega169pa", AVR16K, AVR1K, AVR512},
+ {"atmega16hva", AVR16K, 768UL, AVR256},
+ {"atmega16hva2", AVR16K, AVR1K, AVR256},
+ {"atmega16hvb", AVR16K, AVR1K, AVR512},
+ {"atmega16m1", AVR16K, AVR1K, AVR512},
+ {"atmega16u2", AVR16K, AVR512, AVR512},
+ {"atmega16u4", AVR16K, 1280UL, AVR512},
+ {"attiny167", AVR16K, AVR512, AVR512},
+
+ {"at90c8534", AVR8K, 352UL, AVR512},
+ {"at90pwm1", AVR8K, AVR512, AVR512},
+ {"at90pwm2", AVR8K, AVR512, AVR512},
+ {"at90pwm2b", AVR8K, AVR512, AVR512},
+ {"at90pwm3", AVR8K, AVR512, AVR512},
+ {"at90pwm3b", AVR8K, AVR512, AVR512},
+ {"at90pwm81", AVR8K, AVR256, AVR512},
+ {"at90s8515", AVR8K, AVR512, AVR512},
+ {"at90s8535", AVR8K, AVR512, AVR512},
+ {"at90usb82", AVR8K, AVR512, AVR512},
+ {"ata6289", AVR8K, AVR512, 320UL},
+ {"atmega8", AVR8K, AVR1K, AVR512},
+ {"atmega8515", AVR8K, AVR512, AVR512},
+ {"atmega8535", AVR8K, AVR512, AVR512},
+ {"atmega88", AVR8K, AVR1K, AVR512},
+ {"atmega88a", AVR8K, AVR1K, AVR512},
+ {"atmega88p", AVR8K, AVR1K, AVR512},
+ {"atmega88pa", AVR8K, AVR1K, AVR512},
+ {"atmega8hva", AVR8K, 768UL, AVR256},
+ {"atmega8u2", AVR8K, AVR512, AVR512},
+ {"attiny84", AVR8K, AVR512, AVR512},
+ {"attiny85", AVR8K, AVR512, AVR512},
+ {"attiny861", AVR8K, AVR512, AVR512},
+ {"attiny861a", AVR8K, AVR512, AVR512},
+ {"attiny87", AVR8K, AVR512, AVR512},
+ {"attiny88", AVR8K, AVR512, AVR64},
+
+ {"at90s4414", AVR4K, 352UL, AVR256},
+ {"at90s4433", AVR4K, AVR128, AVR256},
+ {"at90s4434", AVR4K, 352UL, AVR256},
+ {"atmega48", AVR4K, AVR512, AVR256},
+ {"atmega48a", AVR4K, AVR512, AVR256},
+ {"atmega48p", AVR4K, AVR512, AVR256},
+ {"attiny4313", AVR4K, AVR256, AVR256},
+ {"attiny43u", AVR4K, AVR256, AVR64},
+ {"attiny44", AVR4K, AVR256, AVR256},
+ {"attiny44a", AVR4K, AVR256, AVR256},
+ {"attiny45", AVR4K, AVR256, AVR256},
+ {"attiny461", AVR4K, AVR256, AVR256},
+ {"attiny461a", AVR4K, AVR256, AVR256},
+ {"attiny48", AVR4K, AVR256, AVR64},
+
+ {"at86rf401", AVR2K, 224UL, AVR128},
+ {"at90s2313", AVR2K, AVR128, AVR128},
+ {"at90s2323", AVR2K, AVR128, AVR128},
+ {"at90s2333", AVR2K, 224UL, AVR128},
+ {"at90s2343", AVR2K, AVR128, AVR128},
+ {"attiny20", AVR2K, AVR128, 0UL},
+ {"attiny22", AVR2K, 224UL, AVR128},
+ {"attiny2313", AVR2K, AVR128, AVR128},
+ {"attiny2313a", AVR2K, AVR128, AVR128},
+ {"attiny24", AVR2K, AVR128, AVR128},
+ {"attiny24a", AVR2K, AVR128, AVR128},
+ {"attiny25", AVR2K, AVR128, AVR128},
+ {"attiny26", AVR2K, AVR128, AVR128},
+ {"attiny261", AVR2K, AVR128, AVR128},
+ {"attiny261a", AVR2K, AVR128, AVR128},
+ {"attiny28", AVR2K, 0UL, 0UL},
+ {"attiny40", AVR2K, AVR256, 0UL},
+
+ {"at90s1200", AVR1K, 0UL, AVR64},
+ {"attiny9", AVR1K, 32UL, 0UL},
+ {"attiny10", AVR1K, 32UL, 0UL},
+ {"attiny11", AVR1K, 0UL, AVR64},
+ {"attiny12", AVR1K, 0UL, AVR64},
+ {"attiny13", AVR1K, AVR64, AVR64},
+ {"attiny13a", AVR1K, AVR64, AVR64},
+ {"attiny15", AVR1K, 0UL, AVR64},
+
+ {"attiny4", AVR512, 32UL, 0UL},
+ {"attiny5", AVR512, 32UL, 0UL},
+};
+
+static char *avrmcu = NULL;
+
+
static char *target = NULL;
/* Forward declarations. */
@@ -79,7 +329,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\
@@ -88,11 +329,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)
@@ -103,6 +351,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[] =
{
@@ -110,6 +360,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},
@@ -141,7 +391,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)
{
@@ -150,11 +401,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);
@@ -162,6 +416,10 @@ main (int argc, char **argv)
}
break;
+ case OPTION_MCU:
+ avrmcu = optarg;
+ break;
+
case OPTION_TARGET:
target = optarg;
break;
@@ -190,11 +449,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;
@@ -240,7 +501,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;
@@ -599,13 +861,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

View file

@ -0,0 +1,38 @@
diff -ruw ld/scripttempl/avr.sc ld/scripttempl/avr.sc
--- ld/scripttempl/avr.sc 2009-10-09 18:42:35.000000000 +0530
+++ ld/scripttempl/avr.sc 2010-02-12 20:09:24.070812400 +0530
@@ -7,6 +7,9 @@
text (rx) : ORIGIN = 0, LENGTH = $TEXT_LENGTH
data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
+ fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
+ lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
+ signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
}
SECTIONS
@@ -196,6 +199,24 @@
${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) }

View file

@ -0,0 +1,31 @@
diff -ru binutils-2.19.1.orig/gas/config/tc-avr.c binutils-2.19.1/gas/config/tc-avr.c
--- gas/config/tc-avr.c Fri Aug 29 19:58:02 2008
+++ gas/config/tc-avr.c Thu Apr 16 20:44:54 2009
@@ -24,6 +24,7 @@
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
+#include "dwarf2dbg.h"
struct avr_opcodes_s
{
@@ -1336,6 +1337,7 @@
if (!avr_opt.all_opcodes && (opcode->isa & avr_mcu->isa) != opcode->isa)
as_bad (_("illegal opcode %s for mcu %s"), opcode->name, avr_mcu->name);
+ dwarf2_emit_insn (0);
/* We used to set input_line_pointer to the result of get_operands,
but that is wrong. Our caller assumes we don't change it. */
{
diff -ru binutils-2.19.1.orig/gas/config/tc-avr.h binutils-2.19.1/gas/config/tc-avr.h
--- gas/config/tc-avr.h Tue Jul 3 14:01:04 2007
+++ gas/config/tc-avr.h Thu Apr 16 20:46:54 2009
@@ -147,3 +147,6 @@
/* This target is buggy, and sets fix size too large. */
#define TC_FX_SIZE_SLACK(FIX) 2
+
+/* keep DWARF2_ADDR_SIZE in consistency with C compiler produced information */
+#define DWARF2_ADDR_SIZE(bfd) 4

View file

@ -0,0 +1,28 @@
diff -ru binutils-2.19.1.orig/gas/dwarf2dbg.c binutils-2.19.1/gas/dwarf2dbg.c
--- gas/dwarf2dbg.c Tue Aug 5 11:13:48 2008
+++ gas/dwarf2dbg.c Thu Apr 16 20:43:27 2009
@@ -99,8 +99,11 @@
Note: If you want to change this, you'll have to update the
"standard_opcode_lengths" table that is emitted below in
out_debug_line(). */
+#ifndef TC_AVR
#define DWARF2_LINE_OPCODE_BASE 13
-
+#else
+#define DWARF2_LINE_OPCODE_BASE 10
+#endif
#ifndef DWARF2_LINE_BASE
/* Minimum line offset in a special line info. opcode. This value
was chosen to give a reasonable range of values. */
@@ -1384,9 +1387,11 @@
out_byte (0); /* DW_LNS_set_basic_block */
out_byte (0); /* DW_LNS_const_add_pc */
out_byte (1); /* DW_LNS_fixed_advance_pc */
+#ifndef TC_AVR
out_byte (0); /* DW_LNS_set_prologue_end */
out_byte (0); /* DW_LNS_set_epilogue_begin */
out_byte (1); /* DW_LNS_set_isa */
+#endif
out_file_list ();

View file

@ -0,0 +1,666 @@
avrxmega1
avrxmega2
avrxmega3
avrxmega4
avrxmega5
avrxmega6
avrxmega7
atxmega16a4
atxmega16d4
atxmega32d4
atxmega32a4
atxmega64a3
atxmega64d3
atxmega64a1
atxmega128a3
atxmega128d3
atxmega192a3
atxmega192d3
atxmega256a3
atxmega256a3b
atxmega256d3
atxmega128a1
===========================================================
--- bfd/archures.c.old 2009-11-30 15:18:16.328125000 -0700
+++ bfd/archures.c 2009-11-30 15:23:13.062500000 -0700
@@ -357,6 +357,13 @@ DESCRIPTION
.#define bfd_mach_avr5 5
.#define bfd_mach_avr51 51
.#define bfd_mach_avr6 6
+.#define bfd_mach_avrxmega1 101
+.#define bfd_mach_avrxmega2 102
+.#define bfd_mach_avrxmega3 103
+.#define bfd_mach_avrxmega4 104
+.#define bfd_mach_avrxmega5 105
+.#define bfd_mach_avrxmega6 106
+.#define bfd_mach_avrxmega7 107
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
--- bfd/bfd-in2.h.old 2009-11-30 15:18:23.968750000 -0700
+++ bfd/bfd-in2.h 2009-11-30 15:23:34.406250000 -0700
@@ -1979,6 +1979,13 @@ enum bfd_architecture
#define bfd_mach_avr5 5
#define bfd_mach_avr51 51
#define bfd_mach_avr6 6
+#define bfd_mach_avrxmega1 101
+#define bfd_mach_avrxmega2 102
+#define bfd_mach_avrxmega3 103
+#define bfd_mach_avrxmega4 104
+#define bfd_mach_avrxmega5 105
+#define bfd_mach_avrxmega6 106
+#define bfd_mach_avrxmega7 107
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
--- bfd/cpu-avr.c.old 2009-11-30 15:18:34.531250000 -0700
+++ bfd/cpu-avr.c 2009-11-30 15:23:13.062500000 -0700
@@ -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 =
--- bfd/elf32-avr.c.old 2009-11-30 15:18:55.906250000 -0700
+++ bfd/elf32-avr.c 2009-11-30 15:23:13.109375000 -0700
@@ -1328,6 +1328,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;
@@ -1390,6 +1418,34 @@ elf32_avr_object_p (bfd *abfd)
case E_AVR_MACH_AVR6:
e_set = bfd_mach_avr6;
break;
+
+ case E_AVR_MACH_XMEGA1:
+ e_set = bfd_mach_avrxmega1;
+ break;
+
+ case E_AVR_MACH_XMEGA2:
+ e_set = bfd_mach_avrxmega2;
+ break;
+
+ case E_AVR_MACH_XMEGA3:
+ e_set = bfd_mach_avrxmega3;
+ break;
+
+ case E_AVR_MACH_XMEGA4:
+ e_set = bfd_mach_avrxmega4;
+ break;
+
+ case E_AVR_MACH_XMEGA5:
+ e_set = bfd_mach_avrxmega5;
+ break;
+
+ case E_AVR_MACH_XMEGA6:
+ e_set = bfd_mach_avrxmega6;
+ break;
+
+ case E_AVR_MACH_XMEGA7:
+ e_set = bfd_mach_avrxmega7;
+ break;
}
}
return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
--- gas/config/tc-avr.c.old 2009-11-30 15:19:11.593750000 -0700
+++ gas/config/tc-avr.c 2009-11-30 15:24:14.812500000 -0700
@@ -28,20 +28,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[] = ";";
@@ -80,6 +81,13 @@ static struct mcu_type_s mcu_types[] =
{"avr5", AVR_ISA_AVR51, bfd_mach_avr5},
{"avr51", AVR_ISA_AVR51, bfd_mach_avr51},
{"avr6", AVR_ISA_AVR6, bfd_mach_avr6},
+ {"avrxmega1", AVR_ISA_XMEGA, bfd_mach_avrxmega1},
+ {"avrxmega2", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"avrxmega3", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
+ {"avrxmega4", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"avrxmega5", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"avrxmega6", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"avrxmega7", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
{"attiny11", AVR_ISA_AVR1, bfd_mach_avr1},
{"attiny12", AVR_ISA_AVR1, bfd_mach_avr1},
@@ -186,6 +194,21 @@ 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},
+ {"atxmega16a4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega16d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32d4", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
+ {"atxmega32a4", AVR_ISA_XMEGA, bfd_mach_avrxmega3},
+ {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64d3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
+ {"atxmega64a1", AVR_ISA_XMEGA, bfd_mach_avrxmega5},
+ {"atxmega128a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega192d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256a3b",AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega256d3", AVR_ISA_XMEGA, bfd_mach_avrxmega6},
+ {"atxmega128a1", AVR_ISA_XMEGA, bfd_mach_avrxmega7},
{NULL, 0, 0}
};
@@ -363,6 +386,11 @@ md_show_usage (FILE *stream)
" avr5 - enhanced AVR core with up to 64K program memory\n"
" avr51 - enhanced AVR core with up to 128K program memory\n"
" avr6 - enhanced AVR core with up to 256K program memory\n"
+ " avrxmega3 - XMEGA, > 8K, <= 64K FLASH, > 64K RAM\n"
+ " avrxmega4 - XMEGA, > 64K, <= 128K FLASH, <= 64K RAM\n"
+ " avrxmega5 - XMEGA, > 64K, <= 128K FLASH, > 64K RAM\n"
+ " avrxmega6 - XMEGA, > 128K, <= 256K FLASH, <= 64K RAM\n"
+ " avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
" or immediate microcontroller name.\n"));
fprintf (stream,
_(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -790,7 +818,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+". */
@@ -907,6 +940,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;
--- gas/doc/c-avr.texi.old 2009-11-30 15:19:31.656250000 -0700
+++ gas/doc/c-avr.texi 2009-11-30 15:24:14.812500000 -0700
@@ -76,6 +76,27 @@ at90can128, at90usb1286, at90usb1287).
Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
atmega2560, atmega2561).
+Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
+memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
+atxmega32d4).
+
+Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
+memory space and greater than 64K data space (MCU types: atxmega32a4).
+
+Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
+memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
+
+Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
+memory space and greater than 64K data space (MCU types: atxmega64a1).
+
+Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
+memory space and less than 64K data space (MCU types: atxmega128a3,
+atxmega128d3, atxmega192a3, atxmega192d3, atxmega256a3, atxmega256a3b,
+atxmega192d3).
+
+Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
+memory space and greater than 64K data space (MCU types: atxmega128a1).
+
@cindex @code{-mall-opcodes} command line option, AVR
@item -mall-opcodes
Accept all AVR opcodes, even if not supported by @code{-mmcu}.
--- include/elf/avr.h.old 2009-11-30 15:19:50.421875000 -0700
+++ include/elf/avr.h 2009-11-30 15:23:13.062500000 -0700
@@ -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)
--- include/opcode/avr.h.old 2009-11-30 15:20:00.968750000 -0700
+++ include/opcode/avr.h 2009-11-30 15:23:13.046875000 -0700
@@ -30,6 +30,8 @@
#define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */
#define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */
#define AVR_ISA_MOVW 0x1000 /* device has MOVW */
+#define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */
+#define AVR_ISA_DES 0x4000 /* device has DES */
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
@@ -48,6 +50,8 @@
#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
#define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK)
#define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
+#define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND)
+#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
#define AVR_ISA_AVR1 AVR_ISA_TINY1
#define AVR_ISA_AVR2 AVR_ISA_2xxx
@@ -108,6 +112,7 @@
L - signed pc relative offset from -2048 to 2047
h - absolute code address (call, jmp)
S - immediate value from 0 to 7 (S = s << 4)
+ E - immediate value from 0 to 15, shifted left by 4 (des)
? - use this opcode entry if no parameters, else use next opcode entry
Order is important - some binary opcodes have more than one name,
@@ -168,7 +173,8 @@ AVR_INSN (reti, "", "1001010100011000
AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588)
AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598)
AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
-AVR_INSN (spm, "", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "?", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
+AVR_INSN (spm, "z", "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
@@ -282,3 +288,6 @@ AVR_INSN (st, "e,r", "100!001rrrrree-+
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)
+
--- ld/Makefile.am.old 2009-11-30 15:20:22.359375000 -0700
+++ ld/Makefile.am 2009-11-30 15:23:13.062500000 -0700
@@ -142,6 +142,13 @@ ALL_EMULATIONS = \
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -646,6 +653,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/Makefile.in.old 2009-11-30 15:20:37.187500000 -0700
+++ ld/Makefile.in 2009-11-30 15:23:13.078125000 -0700
@@ -393,6 +393,13 @@ ALL_EMULATIONS = \
eavr5.o \
eavr51.o \
eavr6.o \
+ eavrxmega1.o \
+ eavrxmega2.o \
+ eavrxmega3.o \
+ eavrxmega4.o \
+ eavrxmega5.o \
+ eavrxmega6.o \
+ eavrxmega7.o \
ecoff_i860.o \
ecoff_sparc.o \
eelf32_spu.o \
@@ -1476,6 +1483,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.old 2009-11-30 15:20:51.609375000 -0700
+++ ld/configure.tgt 2009-11-30 15:23:13.078125000 -0700
@@ -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"
--- ld/emultempl/avrelf.em.old 2009-11-30 15:21:18.406250000 -0700
+++ ld/emultempl/avrelf.em 2009-11-30 15:23:13.078125000 -0700
@@ -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 ();
--- opcodes/avr-dis.c.old 2009-11-30 15:21:35.187500000 -0700
+++ opcodes/avr-dis.c 2009-11-30 15:23:13.046875000 -0700
@@ -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);
}
}
--- /dev/null 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega1.sh 2009-11-30 15:23:13.093750000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega2.sh 2009-11-30 15:23:13.093750000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega3.sh 2009-11-30 15:23:13.093750000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega4.sh 2009-11-30 15:23:13.093750000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega5.sh 2009-11-30 15:23:13.093750000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega6.sh 2009-11-30 15:23:13.109375000 -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 2006-11-30 17:00:00.000000000 -0700
+++ ld/emulparams/avrxmega7.sh 2009-11-30 15:23:13.109375000 -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

View file

@ -0,0 +1,136 @@
Only in binutils-2.20.patch51: binutils-2.20
diff -ruw ggas/config/tc-avr.c gas/config/tc-avr.c
--- ggas/config/tc-avr.c 2009-09-09 13:43:29.000000000 +0530
+++ gas/config/tc-avr.c 2010-02-12 20:42:30.742688700 +0530
@@ -133,9 +133,12 @@
{"atmega32u2", AVR_ISA_AVR35, bfd_mach_avr35},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega48", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega48a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega48p", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88a", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega88p", AVR_ISA_AVR4, bfd_mach_avr4},
+ {"atmega88pa", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_AVR4, bfd_mach_avr4},
@@ -150,40 +153,63 @@
{"at90pwm3b", AVR_ISA_AVR4, bfd_mach_avr4},
{"at90pwm81", AVR_ISA_AVR4, bfd_mach_avr4},
{"atmega16", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega163", AVR_ISA_M161, bfd_mach_avr5},
+ {"atmega164a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega164p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega165p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega168a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega168p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega169p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega169pa",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16c1", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega323", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega324p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega324pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega325p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3250p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega328", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega328p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega329p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega329pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega3290p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega406", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega64", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega640", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega644a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega644pa",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega645", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645a", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega645p", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega649", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649p", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega649a", AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6450", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6450p",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega6490", AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490a",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega6490p",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega64hve",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5},
+ {"atmega16hva2",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5},
{"at90can32" , AVR_ISA_AVR5, bfd_mach_avr5},
diff -ruw ggas/doc/c-avr.texi gas/doc/c-avr.texi
--- ggas/doc/c-avr.texi 2009-09-02 12:54:21.000000000 +0530
+++ gas/doc/c-avr.texi 2010-02-12 21:31:02.132717100 +0530
@@ -43,9 +43,10 @@
Instruction set avr25 is for the classic AVR core with up to 8K program memory
space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
-attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
-attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461, attiny861,
-attiny861a, attiny87, attiny43u, attiny48, attiny88, at86rf401, ata6289).
+attiny2313a, attiny24, attiny24a, attiny4313, attiny43u, attiny44, attiny44a,
+attiny84, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
+attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
+at86rf401, ata6289).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: at43usb355, at76c711).
@@ -58,20 +59,25 @@
atmega16u2, atmega32u2).
Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega48p,atmega8, atmega88, atmega88p,
-atmega8515, atmega8535, atmega8hva, atmega4hvd, atmega8hvd, at90pwm1,
-at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, atmega8m1, atmega8c1).
+memory space (MCU types: atmega48, atmega48a, atmega48p,atmega8, atmega88,
+atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva,
+atmega4hvd, atmega8hvd, at90pwm1,at90pwm2, at90pwm2b, at90pwm3, at90pwm3b,
+at90pwm81, atmega8m1, atmega8c1).
Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega161, atmega162, atmega163, atmega164p,
-atmega165, atmega165p, atmega168, atmega168p, atmega169, atmega169p, atmega16c1,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega3250, atmega3250p,
-atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, atmega406, atmega64,
-atmega640, atmega644, atmega644p, atmega644pa, atmega645, atmega6450, atmega649,
-atmega6490, atmega16hva, atmega16hvb, atmega32hvb, at90can32, at90can64,
-at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1,
-atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
-at90scr100).
+memory space (MCU types: atmega16, atmega16a, atmega161, atmega162, atmega163,
+atmega164a, atmega164p, atmega165, atmega165a, atmega165p, atmega168,
+atmega168a, atmega168p, atmega169, atmega169p, atmega169pa, atmega16c1,
+atmega32, atmega323, atmega324a, atmega324p, atmega324pa, atmega325,
+atmega325p, atmega3250, atmega3250p, atmega328, atmega328p, atmega329,
+atmega329p, atmega329pa, atmega3290, atmega3290p, atmega406, atmega64,
+atmega640, atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
+atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649,
+atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p, atmega64hve,
+atmega16hva, atmega16hva2, atmega16hvb, atmega32hvb, at90can32, at90can64,
+at90pwm216, at90pwm316, atmega16u4, atmega32c1, atmega64c1, atmega64m1,
+atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4, atmega32u6,
+at90usb646, at90usb647, at94k, at90scr100).
Instruction set avr51 is for the enhanced AVR core with exactly 128K program
memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,

View file

@ -0,0 +1,91 @@
diff -rc binutils-2.17.orig/gas/as.c binutils-2.17/gas/as.c
*** binutils-2.17.orig/gas/as.c 2006-02-09 01:07:41.000000000 +0100
--- binutils-2.17/gas/as.c 2007-04-22 10:48:17.000000000 +0200
***************
*** 347,352 ****
--- 347,355 ----
--listing-cont-lines set the maximum number of continuation lines used\n\
for the output data column of the listing\n"));
fprintf (stream, _("\
+ --allow-dollars always allow dollars in function names\n"));
+
+ fprintf (stream, _("\
@FILE read options from FILE\n"));
md_show_usage (stream);
***************
*** 428,434 ****
OPTION_AL,
OPTION_HASH_TABLE_SIZE,
OPTION_REDUCE_MEMORY_OVERHEADS,
! OPTION_WARN_FATAL
/* When you add options here, check that they do
not collide with OPTION_MD_BASE. See as.h. */
};
--- 431,438 ----
OPTION_AL,
OPTION_HASH_TABLE_SIZE,
OPTION_REDUCE_MEMORY_OVERHEADS,
! OPTION_WARN_FATAL,
! OPTION_ALLOW_DOLLARS
/* When you add options here, check that they do
not collide with OPTION_MD_BASE. See as.h. */
};
***************
*** 454,459 ****
--- 458,464 ----
,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
#endif
,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
+ ,{"allow-dollars", no_argument, NULL, OPTION_ALLOW_DOLLARS}
,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF2}
/* GCC uses --gdwarf-2 but GAS uses to use --gdwarf2,
so we keep it here for backwards compatibility. */
***************
*** 763,768 ****
--- 768,777 ----
flag_execstack = 1;
flag_noexecstack = 0;
break;
+
+ case OPTION_ALLOW_DOLLARS:
+ flag_allow_dollars = 1;
+ break;
case OPTION_NOEXECSTACK:
flag_noexecstack = 1;
Only in binutils-2.17/gas: as.c~
Only in binutils-2.17/gas: as.c.rej
diff -rc binutils-2.17.orig/gas/as.h binutils-2.17/gas/as.h
*** binutils-2.17.orig/gas/as.h 2006-02-09 12:54:15.000000000 +0100
--- binutils-2.17/gas/as.h 2007-04-22 10:41:00.000000000 +0200
***************
*** 392,397 ****
--- 392,400 ----
/* True if we are assembling in MRI mode. */
COMMON int flag_mri;
+ /* True if dollars should always be allowed in function names */
+ COMMON int flag_allow_dollars;
+
/* Should the data section be made read-only and appended to the text
section? */
COMMON unsigned char flag_readonly_data_in_text; /* -R */
diff -rc binutils-2.17.orig/gas/read.c binutils-2.17/gas/read.c
*** binutils-2.17.orig/gas/read.c 2005-11-17 08:29:28.000000000 +0100
--- binutils-2.17/gas/read.c 2007-04-22 10:41:00.000000000 +0200
***************
*** 241,246 ****
--- 241,252 ----
if (flag_mri)
lex_type['?'] = 3;
+
+ if (flag_allow_dollars) /* always allow dollars */
+ {
+ lex_type['$'] = 3;
+ is_end_of_line['$'] = 0;
+ }
}
#ifndef TC_ADDRESS_BYTES

View file

@ -0,0 +1,138 @@
--- binutils/gas/config/tc-avr.c.orig Mon Aug 6 21:59:55 2007
+++ binutils/gas/config/tc-avr.c Wed Dec 19 12:08:45 2007
@@ -63,7 +63,7 @@
{
{"avr1", AVR_ISA_TINY1, bfd_mach_avr1},
{"avr2", AVR_ISA_TINY2, bfd_mach_avr2},
- {"avr3", AVR_ISA_M103, bfd_mach_avr3},
+ {"avr3", AVR_ISA_USB162, bfd_mach_avr3},
{"avr4", AVR_ISA_M8, bfd_mach_avr4},
{"avr5", AVR_ISA_ALL, bfd_mach_avr5},
{"avr6", AVR_ISA_ALL, bfd_mach_avr6},
@@ -97,22 +97,31 @@
{"attiny25", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
{"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny43u", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny48", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny88", AVR_ISA_TINY2, bfd_mach_avr2},
{"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
{"atmega103", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
{"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
{"at76c711", AVR_ISA_M603, bfd_mach_avr3},
+ {"at90usb82", AVR_ISA_USB162, bfd_mach_avr3},
+ {"at90usb162", AVR_ISA_USB162, bfd_mach_avr3},
{"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega48p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8", AVR_ISA_M8, bfd_mach_avr4},
{"atmega83", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8535 */
{"atmega85", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8 */
{"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega88p", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
{"atmega8hva", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm1", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm2", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm2b", AVR_ISA_PWMx, bfd_mach_avr4},
{"at90pwm3", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm3b", AVR_ISA_PWMx, bfd_mach_avr4},
{"atmega16", AVR_ISA_M323, bfd_mach_avr5},
{"atmega161", AVR_ISA_M161, bfd_mach_avr5},
{"atmega162", AVR_ISA_M323, bfd_mach_avr5},
@@ -121,6 +130,7 @@
{"atmega165", AVR_ISA_M323, bfd_mach_avr5},
{"atmega165p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega168", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega168p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169", AVR_ISA_M323, bfd_mach_avr5},
{"atmega169p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega32", AVR_ISA_M323, bfd_mach_avr5},
@@ -128,12 +138,14 @@
{"atmega324p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325", AVR_ISA_M323, bfd_mach_avr5},
{"atmega325p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega328p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329", AVR_ISA_M323, bfd_mach_avr5},
{"atmega329p", AVR_ISA_M323, bfd_mach_avr5},
{"atmega3250", AVR_ISA_M323, bfd_mach_avr5},
{"atmega3250p",AVR_ISA_M323, bfd_mach_avr5},
{"atmega3290", AVR_ISA_M323, bfd_mach_avr5},
{"atmega3290p",AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega32hvb",AVR_ISA_M323, bfd_mach_avr5},
{"atmega406", AVR_ISA_M323, bfd_mach_avr5},
{"atmega64", AVR_ISA_M323, bfd_mach_avr5},
{"atmega640", AVR_ISA_M323, bfd_mach_avr5},
@@ -142,6 +154,7 @@
{"atmega128", AVR_ISA_M128, bfd_mach_avr5},
{"atmega1280", AVR_ISA_M128, bfd_mach_avr5},
{"atmega1281", AVR_ISA_M128, bfd_mach_avr5},
+ {"atmega1284p",AVR_ISA_M128, bfd_mach_avr5},
{"atmega645", AVR_ISA_M323, bfd_mach_avr5},
{"atmega649", AVR_ISA_M323, bfd_mach_avr5},
{"atmega6450", AVR_ISA_M323, bfd_mach_avr5},
@@ -150,8 +163,8 @@
{"at90can32" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can64" , AVR_ISA_M323, bfd_mach_avr5},
{"at90can128", AVR_ISA_M128, bfd_mach_avr5},
- {"at90usb82", AVR_ISA_M323, bfd_mach_avr5},
- {"at90usb162", AVR_ISA_M323, bfd_mach_avr5},
+ {"at90pwm216", AVR_ISA_M323, bfd_mach_avr5},
+ {"at90pwm316", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
--- binutils/gas/doc/c-avr.texi.orig Mon Aug 6 22:00:08 2007
+++ binutils/gas/doc/c-avr.texi Wed Dec 19 12:07:54 2007
@@ -41,24 +41,26 @@
attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
-attiny45, attiny85).
+attiny45, attiny85, attiny43u, attiny48, attiny88).
Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
-at76c711).
+at76c711, at90usb82, at90usb162).
-Instruction set avr4 is for the enhanced AVR core with up to 8K program
-memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
-atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm3).
+Instruction set avr4 is for the enhanced AVR core with up to 8K
+program memory space (MCU types: atmega48, atmega48p, atmega8,
+atmega83, atmega85, atmega88, atmega88p, atmega8515, atmega8535,
+atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b).
-Instruction set avr5 is for the enhanced AVR core with up to 128K program
-memory space (MCU types: atmega16, atmega161, atmega162, atmega163,
-atmega164p, atmega165, atmega165p, atmega168, atmega169, atmega169p,
-atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega329,
-atmega329p, atmega3250, atmega3250p, atmega3290, atmega3290p, atmega406,
-atmega64, atmega640, atmega644, atmega644p, atmega128, atmega1280,
-atmega1281, atmega645, atmega649, atmega6450, atmega6490, atmega16hva,
-at90can32, at90can64, at90can128, at90usb82, at90usb162, at90usb646,
+Instruction set avr5 is for the enhanced AVR core with up to 128K
+program memory space (MCU types: atmega16, atmega161, atmega162,
+atmega163, atmega164p, atmega165, atmega165p, atmega168, atmega168p,
+atmega169, atmega169p, atmega32, atmega32hvb, atmega323, atmega324p, atmega325,
+atmega325p, atmega328p, atmega329, atmega329p, atmega3250,
+atmega3250p, atmega3290, atmega3290p, atmega406, atmega64, atmega640,
+atmega644, atmega644p, atmega128, atmega1280, atmega1281, atmega1284p, atmega645,
+atmega649, atmega6450, atmega6490, atmega16hva, at90can32, at90can64,
+at90can128, at90pwm216, at90pwm316, at90usb646,
at90usb647, at90usb1286, at90usb1287, at94k).
Instruction set avr6 is for the enhanced AVR core with 256K program
--- binutils/include/opcode/avr.h.orig Fri Apr 7 17:18:08 2006
+++ binutils/include/opcode/avr.h Wed Dec 19 12:10:04 2007
@@ -40,6 +40,8 @@
AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA)
#define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM)
+#define AVR_ISA_USB162 (AVR_ISA_M603 | AVR_ISA_MOVW | \
+ AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \
AVR_ISA_LPMX | AVR_ISA_SPM)
#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)

View file

@ -0,0 +1,43 @@
--- binutils/ld/scripttempl/avr.sc.old 2007-09-14 06:32:02.437500000 -0600
+++ binutils/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) }

19
binutils-debian/patchlist Normal file
View file

@ -0,0 +1,19 @@
atmel_patches/30-binutils-2.20.1-avr-size.patch
atmel_patches/31-binutils-2.20.1-avr-coff.patch
atmel_patches/32-binutils-2.20.1-new-sections.patch
atmel_patches/34-binutils-2.20.1-as-dwarf.patch
atmel_patches/35-binutils-2.20.1-dwarf2-AVRStudio-workaround.patch
atmel_patches/36-binutils-2.20.1-assembler-options.patch
atmel_patches/50-binutils-2.20.1-xmega.patch
atmel_patches/51-binutils-2.20.1-new-devices.patch
atmel_patches/52-binutils-2.20.1-avrtiny10.patch
atmel_patches/53-binutils-2.20.1-xmega128a1u-64a1u.patch
atmel_patches/54-binutils-2.20.1-atxmega16x1-32x1.patch
atmel_patches/55-binutils-2.20.1-atxmega128b1.patch
atmel_patches/56-binutils-2.20.1-atxmega256a3bu.patch
atmel_patches/57-binutils-2.20.1-at90pwm161.patch
atmel_patches/58-binutils-2.20.1-atmega16hvb-32hvb.patch
atmel_patches/59-binutils-2.20.1-atmega32_5_50_90_pa.patch
atmel_patches/60-binutils-2.20.1-bug13789.patch
atmel_patches/62-binutils-2.20.1-attiny1634.patch
atmel_patches/64-binutils-2.20.1-atmega48pa.patch

144
binutils-debian/rules Executable file
View file

@ -0,0 +1,144 @@
#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
PACKAGE=binutils-avr
TARGET=avr
#ifeq (,$(DEB_BUILD_GNU_TYPE))
# include /usr/share/dbs/dpkg-arch.mk
#endif
CONFARGS = --prefix=/usr \
--build=$(DEB_BUILD_GNU_TYPE) \
--host=$(DEB_HOST_GNU_TYPE) \
--target=$(TARGET)\
--disable-static\
--with-gnu-ld\
--with-gnu-as\
--enable-install-libbfd\
--with-dwarf2
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
#TAR_DIR=binutils-*
#TAR_DIR=TAR_DIR=binutils-*
#include /usr/share/dbs/dbs-build.mk
#include debian/dbs-build.mk
BUILD_TREE=src
# the dbs rules
#include /usr/src/toolchain/patches/binutils/dbs-build.mk
#
unpack: unpack-stamp
unpack-stamp:
tar xjf binutils-*.tar.bz2
#tar xjf binutils-2.18.tar.bz2
mv `ls -d binutils* | grep -v tar` src
#mkdir build
touch unpack-stamp
patch-stamp:
cd $(BUILD_TREE) && for p in `cat ../debian/patchlist`; do echo; echo Applying $$p ...; patch -p0 < ../debian/$$p; done
touch patch-stamp
configure: configure-stamp
configure-stamp: unpack-stamp patch-stamp
dh_testdir
# Add here commands to configure the package.
cd $(BUILD_TREE) && env CC="gcc" CFLAGS="-Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter" ./configure $(CONFARGS)
make -C src maybe-configure-bfd
make -C src/bfd/ headers
touch configure-stamp
build: configure-stamp build-stamp
build-stamp:
dh_testdir
# Add here commands to compile the package.
cd $(BUILD_TREE) && $(MAKE)
#/usr/bin/docbook-to-man debian/$(PACKAGE).sgml > $(PACKAGE).1
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp a.out unpack-stamp patch-stamp
# Add here commands to clean up after the build process.
#-$(MAKE) clean
rm -rf $(BUILD_TREE)
#rm binutils-2.18.tar.bz2
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/$(PACKAGE).
cd $(BUILD_TREE) && $(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE)/usr
cp debian/gasp.1 debian/$(PACKAGE)/usr/share/man/man1/avr-gasp.1
# Non standard avr dir to keep FHS happy
mv debian/binutils-avr/usr/avr debian/binutils-avr/usr/lib/
# Files also in main binutils pkg
cd debian/$(PACKAGE)/usr && \
rm -rf lib/libiberty.* lib/libbfd.* lib/libopcodes* \
include/bfd.h include/ansidecl.h include/bfdlink.h \
share/locale include/symcat.h include/dis-asm.h \
info share/info
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
# dh_installdebconf
dh_installdocs -n
# dh_installexamples
# dh_installmenu
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
# dh_installinit
# dh_installcron
dh_installman
# dh_installinfo
dh_undocumented
dh_installchangelogs
dh_link
dh_strip
dh_compress
dh_fixperms
# dh_makeshlibs
dh_installdeb
# dh_perl
dh_shlibdeps
# Update toolchain-source version reference (won't work as it's a source dependency)
#touch debian/substvars
#-grep -v '^toolchain-source-version=' debian/substvars > debian/substvars.tmp
#mv debian/substvars.tmp debian/substvars
#echo >> debian/substvars
#echo -n 'toolchain-source-version=' >> debian/substvars
#dpkg -s toolchain-source | grep Version: | sed -e 's/Version: //' >> debian/substvars
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure

View file

@ -0,0 +1,22 @@
;; Object debian/
;; SEMANTICDB Tags save file
(semanticdb-project-database-file "debian/"
:tables (list
(semanticdb-table "rules"
:major-mode 'makefile-mode
:tags '(("PACKAGE" variable (:default-value ("binutils-avr")) nil [107 128]) ("TARGET" variable (:default-value ("avr")) nil [128 139]) ("/usr/share/dbs/dpkg-arch.mk" include nil nil [172 208]) ("CONFARGS" variable (:default-value ("--prefix=/usr" "--build=$(DEB_BUILD_GNU_TYPE)" "--host=$(DEB_HOST_GNU_TYPE)" "--target=$(TARGET)" "--disable-static" "--with-gnu-ld" "--with-gnu-as" "--enable-install-libbfd" "--with-dwarf2")) nil [215 499]) ("DH_COMPAT" variable (:default-value ("5")) nil [626 638]) ("TAR_DIR" variable (:default-value ("binutils-*")) nil [639 658]) ("debian/dbs-build.mk" include nil nil [695 723]) ("binutils-2.18.tar.bz2" function nil nil [941 1032]) ("configure" function (:arguments ("configure-stamp")) nil [1032 1074]) ("configure-stamp" function (:arguments ("binutils-2.18.tar.bz2" "$(patched)")) nil [1059 1122]) ("build" function (:arguments ("configure-stamp" "build-stamp")) nil [1251 1297]) ("build-stamp" function (:arguments ("binutils-2.18.tar.bz2" "$(patched)")) nil [1286 1345]) ("clean" function nil nil [1504 1578]) ("install" function (:arguments ("build")) nil [1723 1793]) ("binary-indep" function (:arguments ("build" "install")) nil [2346 2410]) ("binary-arch" function (:arguments ("build" "install")) nil [2454 2527]) ("binary" function (:arguments ("binary-indep" "binary-arch")) nil [3315 3354]))
:file "rules"
:pointmax 3418
:unmatched-syntax 'nil
)
(semanticdb-table "dbs-build.mk"
:major-mode 'makefile-mode
:tags '(("SOURCE_DIR" variable (:default-value ("build-tree")) nil [216 240]) ("STAMP_DIR" variable (:default-value ("stampdir")) nil [240 261]) ("debian/vars" include nil nil [453 473]) ("debian_vars" variable (:default-value ("debian/vars")) nil [475 501]) ("debian_vars" variable nil nil [510 524]) ("SHELL" variable (:default-value ("/bin/bash" "-e")) nil [533 555]) ("DBS_SCRIPT_DIR" variable (:default-value ("/usr/share/dbs")) nil [555 587]) ("DBS_SPLIT" variable (:default-value ("$(DBS_SCRIPT_DIR)/dbs_split")) nil [587 627]) ("DBS_FILE2CAT" variable (:default-value ("$(DBS_SCRIPT_DIR)/internal/file2cat")) nil [627 678]) ("DBS_LIB" variable (:default-value ("$(DBS_SCRIPT_DIR)/internal/lib")) nil [678 720]) ("DBS_VARSBUILD" variable (:default-value ("$(DBS_SCRIPT_DIR)/internal/vars.build")) nil [720 774]) ("patched" variable (:default-value ("$(STAMP_DIR)/patchapply")) nil [796 831]) ("unpacked" variable (:default-value ("$(STAMP_DIR)/source.unpack")) nil [831 869]) ("created" variable (:default-value ("$(STAMP_DIR)/source.created")) nil [869 908]) ("sh_vars" variable (:default-value ("$(STAMP_DIR)/vars.sh")) nil [908 940]) ("DBS_LIB" variable (:default-value ("\"SOURCE_DIR=\\\"$(SOURCE_DIR)\\\"\"")) nil [940 983]) ("DBS_LIB" variable (:default-value ("\"STAMP_DIR=\\\"$(STAMP_DIR)\\\"\"")) nil [983 1024]) ("DBS_LIB" variable (:default-value ("\"VARS_FILE=\\\"$(sh_vars)\\\"\"")) nil [1024 1063]) ("DBS_LIB" variable (:default-value ("\"STRIP_LEVEL=1\"")) nil [1063 1091]) ("BUILD_TREE" variable (:default-value ("$(SOURCE_DIR)/$(TAR_DIR)")) nil [1108 1146]) ("DBS_LIB" variable (:default-value ("\"TAR_DIR=\\\"$(TAR_DIR)\\\"\"")) nil [1148 1184]) ("BUILD_TREE" variable (:default-value ("$(SOURCE_DIR)")) nil [1191 1218]) ("SCRIPT_DIR" variable (:default-value ("$(DBS_SCRIPT_DIR)/internal/")) nil [1295 1336]) ("$(STAMP_DIR)" function (:arguments ("$(created)")) nil [1336 1386]) ("dh_mak_deps" variable (:default-value ("$(shell DH_COMPAT=$(DH_COMPAT) perl $(DBS_SPLIT) makedeps)")) nil [1389 1462]) ("dh_gen_deps" variable (:default-value ("$(shell DH_COMPAT=$(DH_COMPAT) perl $(DBS_SPLIT) gendeps)")) nil [1462 1534]) ("$(dh_mak_deps)" function (:arguments ("$(dh_gen_deps)")) nil [1535 1586]) ("setup" function (:arguments ("$(dh_mak_deps)")) nil [1587 1684]) ("$(patched)" function (:arguments ("$(created)" "$(sh_vars)" "$(unpacked)")) nil [1684 1777]) ("unpacked" function (:arguments ("$(unpacked)")) nil [1777 1800]) ("$(unpacked)" function (:arguments ("$(created)" "$(sh_vars)")) nil [1799 1882]) ("make_patch" function nil nil [1882 2217]) ("$(created)" function nil nil [2217 2287]) ("$(sh_vars)" function (:arguments ("$(debian_vars)" "$(created)")) nil [2287 2330]))
:file "dbs-build.mk"
:pointmax 2425
)
)
:file "semantic.cache"
:semantic-tag-version "2.0pre3"
:semanticdb-version "2.0pre3"
)

34
binutils.build.bash Executable file
View file

@ -0,0 +1,34 @@
#!/bin/bash -e
if [[ ! -f binutils-2.20.1a.tar.bz2 ]] ;
then
wget ftp://gcc.gnu.org/pub/binutils/releases/binutils-2.20.1a.tar.bz2
fi
tar xfjv binutils-2.20.1a.tar.bz2
cd binutils-2.20.1
for p in `cat ../binutils-debian/patchlist`; do echo; echo Applying $p ...; patch -p0 < ../binutils-debian/$p; done
cd -
mkdir -p objdir
cd objdir
PREFIX=`pwd`
cd -
mkdir -p binutils-build
cd binutils-build
CONFARGS=" \
--enable-languages=c,c++ \
--prefix=$PREFIX \
--disable-nls \
--with-dwarf2 \
--target=avr"
CFLAGS=-w CXXFLAGS=-w ../binutils-2.20.1/configure $CONFARGS
nice -n 10 make -j 5
make install

10
build.all.bash Executable file
View file

@ -0,0 +1,10 @@
#!/bin/bash -e
rm -rf objdir
./clean.bash
./binutils.build.bash
./gcc.build.bash
./avr-libc.build.bash
rm -rf objdir/{info,man,share}

4
clean.bash Executable file
View file

@ -0,0 +1,4 @@
#!/bin/bash
rm -rf gcc-4.3.2 binutils-2.20.1 avr-libc-1.6.4 *-build

9
gcc-debian/README.debian Normal file
View file

@ -0,0 +1,9 @@
To make it possible to have different versions of gcc packages
installed for diffrent targets the locale and most common documentation have
been removed from the cross packages. If you want these files aswell you'll
have to install the same version of the native package as of this package.
For nesC/TinyOS users, the addition of "OPTFLAGS:= -Wa,--allow-dollars"
to their makefiles will allow the use of dollars in function names (with
nesC >=1.1.3). Note, this will require binutils-avr >= 2.15-2.

178
gcc-debian/avr-gccbug.1 Normal file
View file

@ -0,0 +1,178 @@
.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.\"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "GCCBUG 1"
.TH GCCBUG 1 "2003-06-03" "gcc-3.4" "GNU"
.SH "NAME"
gccbug \- Reporting GCC Bugs
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
gccbug
[ \fB\-\-cc\fR \fImail-address\fR ]
[ \fB\-\-version\fR ] | [ \fB\-\-help\fR ]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBgccbug\fR is a version of \s-1GNU\s0 \s-1GNATS\s0 send-pr configured for \s-1GCC\s0 bug
reporting.
.PP
Invoking \fBgccbug\fR calls the editor named in your environment
variable \fB\s-1VISUAL\s0\fR or \fB\s-1EDITOR\s0\fR on a problem report template.
.PP
Your bug reports play an essential role in making \s-1GCC\s0 reliable. However
since the maintainers are very overloaded, please first make sure that:
.IP "\(bu" 4
The problem is not already known. See
<\fBhttp://gcc.gnu.org/bugs.html#known\fR> for a list of known bugs.
If it isn't known, then you should report the problem.
.Sp
You can browse the bug database for bugs reported at
<\fBhttp://gcc.gnu.org/cgi\-bin/gnatsweb.pl\fR>.
.IP "\(bu" 4
You include the information that makes for fixing the bug. See
<\fBhttp://gcc.gnu.org/bugs.html#report\fR> for bug reporting instructions.
.SH "OPTIONS"
.IX Header "OPTIONS"
.IP "\fB\-\-cc\fR \fImail-address\fR" 4
.IX Item "--cc mail-address"
Specifies the mail-address to which the \s-1PR\s0 should be carbon\-copied.
.IP "\fB\-\-version\fR" 4
.IX Item "--version"
Displays the \fBgccbug\fR version number and a usage summary. No mail
is sent.
.IP "\fB\-\-help\fR" 4
.IX Item "--help"
Displays a usage summary for \fBgccbug\fR. No mail is sent.
.PP
\&\fBgccbug\fR has more (undocumented) options, which may be
unsupported by a future \s-1GCC\s0 bug tracking system.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIgcc\fR\|(1), \fIsend\-pr\fR\|(1), \fIsend\-pr\fR\|(8), the info entries for \fIgcc\fR (node Bugs),
and the online pages at <\fBhttp://gcc.gnu.org/bugs.html\fR>.

326
gcc-debian/changelog Normal file
View file

@ -0,0 +1,326 @@
gcc-avr (1:4.3.2-1) unstable; urgency=low
* Removed patches 40-1-gcc-4.3.0-bug-30243, 41-0-gcc-4.3.0-bug-34932
and 40-9-gcc-4.3.0-bug-35542 as they has been incoporated
upstream in the code provided by gcc-4.3-source 4.3.2-1 (closes:
#501424).
-- Hakan Ardo <hakan@debian.org> Sat, 11 Oct 2008 09:07:49 +0200
gcc-avr (1:4.3.0-4) unstable; urgency=low
* No longer applies 40-8-gcc-4.3.0-bug-35519 and
41-1-gcc-4.3.0-bug-leaf as the src provided
by gcc-4.3-source 4.3.1-6 already has this patch applied (closes:
#490310)
-- Hakan Ardo <hakan@debian.org> Mon, 21 Jul 2008 18:22:33 +0200
gcc-avr (1:4.3.0-3) unstable; urgency=low
* Revered to an unpatched 4.3.0 release
* Applied WinAVR-20080610 from patches/gcc/4.3.0/ in cvs server
anonymous@winavr.cvs.sourceforge.net:/cvsroot/winavr with tag
WinAVR-20080610:
20-gcc-4.3.0-libiberty-Makefile.in.patch
21-gcc-4.3.0-disable-libssp.patch
40-0-gcc-4.3.0-bug-10768.patch
40-1-gcc-4.3.0-bug-30243.patch
40-2-gcc-4.3.0-bug-11259_v3.patch
40-3-gcc-4.3.0-bug-spill3.patch
40-4-gcc-4.3.0-bug-35013.patch
40-6-gcc-4.3.0-libgcc16.patch
40-7-gcc-4.3.0-bug-33009.patch
40-8-gcc-4.3.0-bug-35519.patch
40-9-gcc-4.3.0-bug-35542.patch
41-0-gcc-4.3.0-bug-34932.patch
41-1-gcc-4.3.0-bug-leaf.patch
50-gcc-4.3.0-mega256.patch
51-gcc-4.3.0-xmega-v9.patch
52-gcc-4.3.0-atmega32m1.patch
53-gcc-4.3.0-atmega32c1.patch
54-gcc-4.3.0-atmega32u4.patch
55-gcc-4.3.0-attiny167.patch
56-gcc-4.3.0-remove-atmega32hvb.patch
60-gcc-4.3.0-ada-xgnatugn.patch
61-gcc-4.3.0-osmain.patch
-- Hakan Ardo <hakan@debian.org> Wed, 02 Jul 2008 11:01:26 +0200
gcc-avr (1:4.3.0-2) unstable; urgency=low
* libiberty.a now removed for X86_64 arch aswell (closes: #474674)
-- Hakan Ardo <hakan@debian.org> Mon, 07 Apr 2008 16:36:22 +0200
gcc-avr (1:4.3.0-1) unstable; urgency=low
* New upstream release
-- Hakan Ardo <hakan@debian.org> Fri, 04 Apr 2008 11:37:41 +0200
gcc-avr (1:4.2.3-1) unstable; urgency=low
* Moved /usr/libexec/gcc/ to /usr/lib/gcc/ (closes: #457213)
* Fixed 0b patch to handle dsfg free docs (closes: #464260)
* New upstream release
-- Hakan Ardo <hakan@debian.org> Thu, 07 Feb 2008 15:00:49 +0100
gcc-avr (1:4.2.2-1) unstable; urgency=low
* New upstream release.
-- Hakan Ardo <hakan@debian.org> Sat, 15 Dec 2007 16:39:42 +0100
gcc-avr (1:4.2.1-2) unstable; urgency=low
* Recompiled with new binutils
-- Hakan Ardo <hakan@debian.org> Tue, 14 Aug 2007 18:12:04 +0200
gcc-avr (1:4.2.1-1) unstable; urgency=low
* New upstream release (includes newdevices patch from freeBSD) (closes: #420061)
* Now uses unpack rules from gcc-source package (closes: #421142)
* Applied binary constants patch (closes: #426940)
-- Hakan Ardo <hakan@debian.org> Thu, 9 Aug 2007 09:04:11 +0200
gcc-avr (1:4.1.2-1) unstable; urgency=low
* New upstream release
-- Hakan Ardo <hakan@debian.org> Mon, 30 Apr 2007 10:46:13 +0200
gcc-avr (1:4.1.1-1) unstable; urgency=low
* New upstream release (closes: #415917)
* Now uses gcc-4.1-source (closes: #413214)
-- Hakan Ardo <hakan@debian.org> Sun, 22 Apr 2007 17:17:59 +0200
gcc-avr (1:4.1.0.dfsg.1-1) unstable; urgency=low
[ Frank Küster ]
* Add a makefile snippet to remove files from the tarballs that are
under GFDL and contain invariant sections. Thanks to Matthias Klose
for the list of files
* Let the clean target depend on the repack-gfdl target, and do the
cleaning (closes: #413216)
[ Hakan Ardo ]
* Applied patch from Frank above
* Removed info files now recreated as empty files to allow compilation
as sugested by Matthias Klose
* Removed clean's dependency on repack-gfdl
-- Hakan Ardo <hakan@debian.org> Mon, 19 Mar 2007 18:48:37 +0100
gcc-avr (1:4.1.0-1) unstable; urgency=low
* Upstream release
* Removed debian/rules.old
* Now suggests gcc-4.1 instead (closes: #353267)
-- Hakan Ardo <hakan@debian.org> Mon, 1 May 2006 11:27:41 +0200
gcc-avr (1:4.0.2-1) unstable; urgency=low
* New upstream release
* Added missing avr-gccbug man page (closes: #321221)
* Removed duplicated Suggests fields from control
-- Hakan Ardo <hakan@debian.org> Sat, 4 Feb 2006 17:39:37 +0100
gcc-avr (1:3.4.3-2) unstable; urgency=low
* Rebuilt with new binutils adding support for atmega48, atmega88,
atmega168, attiny13, attiny2313 and at90can128.
-- Hakan Ardo <hakan@debian.org> Sun, 27 Feb 2005 18:26:55 +0100
gcc-avr (1:3.4.3-1) unstable; urgency=low
* New upstream release
* Applied patch from Theodore A. Roth enabling new avr devices,
including at90can128
* No longer released as native package (closes: #270421)
* Added info to README.debian on how to compile nesC/TinyOS
* Removed --with-as=/usr/avr/bin/as from configure, which overrided -B
(closes: #275995)
-- Hakan Ardo <hakan@debian.org> Sun, 26 Dec 2004 15:48:13 +0100
gcc-avr (1:3.4.1-1) unstable; urgency=low
* Upstream update
* All cross libs now striped with avr-strip (closes: #264686)
-- Hakan Ardo <hakan@debian.org> Wed, 11 Aug 2004 20:33:26 +0200
gcc-avr (1:3.4.0-1) unstable; urgency=low
* Upstream release (closes: #241835)
-- Hakan Ardo <hakan@debian.org> Sat, 15 May 2004 17:19:35 +0200
gcc-avr (1:3.3.2-1) unstable; urgency=low
* Upstream update (closes: #160051)
* Readded Build-Depends on toolchain-source (closes: #207189, #207493)
* Updated copyright
-- Hakan Ardo <hakan@debian.org> Mon, 29 Mar 2004 14:58:18 +0200
gcc-avr (1:3.2.90.20030512) unstable; urgency=low
* Updated to 030512 snapshot
* Now contains src tar balls
* Now uses packhed dbs
* Updated build-depend on binutils-avr
-- Hakan Ardo <hakan@debian.org> Wed, 25 Jun 2003 21:04:42 +0200
gcc-avr (1:3.2.3.cvs20030221-3) unstable; urgency=low
* Now builddepends on automake1.4 (closes: #184760)
-- Hakan Ardo <hakan@debian.org> Sun, 16 Mar 2003 11:51:41 +0100
gcc-avr (1:3.2.3.cvs20030221-2) unstable; urgency=low
* libgcc.a was messed up by dh_strip (closes: #183062)
* Recompiled with toolchain-source 3.2-7
-- Hakan Ardo <hakan@debian.org> Tue, 11 Mar 2003 16:07:30 +0100
gcc-avr (1:3.2.3.cvs20030221-1) unstable; urgency=low
* New upstream release (3.2.3.cvs20030221)
-- Hakan Ardo <hakan@debian.org> Wed, 26 Feb 2003 12:24:51 +0100
gcc-avr (1:3.2-3) unstable; urgency=low
* Recompiled with toolchain-source 3.2-3
-- Hakan Ardo <hakan@debian.org> Thu, 7 Nov 2002 22:53:11 +0100
gcc-avr (1:3.2-2) unstable; urgency=low
* Relaxed dependency on native pkg and added README.debian describing
the case (closes: #161060)
* Recompiled with toolchain-source 3.2-2
-- Hakan Ardo <hakan@debian.org> Fri, 18 Oct 2002 09:41:32 +0200
gcc-avr (1:3.2-1) unstable; urgency=low
* New upstream release (3.2)
-- Hakan Ardo <hakan@debian.org> Sun, 18 Aug 2002 16:38:47 +0200
gcc-avr (1:3.1.1-1) unstable; urgency=low
* New upstream release (3.1.1)
-- Hakan Ardo <hakan@debian.org> Fri, 2 Aug 2002 16:15:39 +0200
gcc-avr (1:3.1-3) unstable; urgency=low
* Recompiled with toolchain-source 3.1-3 (closes: #142646)
-- Hakan Ardo <hakan@debian.org> Sat, 6 Jul 2002 17:13:27 +0200
gcc-avr (1:3.1-2) unstable; urgency=low
* Recompiled with toolchain-source 3.1-2 (closes: #148778)
-- Hakan Ardo <hakan@debian.org> Fri, 5 Jul 2002 09:51:20 +0200
gcc-avr (1:3.1-1) unstable; urgency=low
* New upstream release (3.1)
-- Hakan Ardo <hakan@debian.org> Fri, 31 May 2002 13:57:13 +0200
gcc-avr (1:3.0.4-4) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-5 (closes: #143172)
-- Hakan Ardo <hakan@debian.org> Thu, 2 May 2002 15:48:16 +0200
gcc-avr (1:3.0.4-3) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-4
-- Hakan Ardo <hakan@debian.org> Mon, 8 Apr 2002 11:57:54 +0200
gcc-avr (1:3.0.4-2) unstable; urgency=low
* Recompiled with toolchain-source 3.0.4-3
-- Hakan Ardo <hakan@debian.org> Sat, 30 Mar 2002 12:42:19 +0100
gcc-avr (1:3.0.4-1) unstable; urgency=low
* New upstream release (3.0.4)
* Fixed man file removal (closes: #137586)
-- Hakan Ardo <hakan@debian.org> Mon, 11 Mar 2002 15:18:57 +0100
gcc-avr (1:3.0.3-3) unstable; urgency=low
* Removed som duplicated man pages
* Renamed avr-linux to avr as we dont run linux on target
* Recompiled with toolchain-source 3.0.3-3
-- Hakan Ardo <hakan@debian.org> Sat, 9 Feb 2002 15:50:16 +0100
gcc-avr (1:3.0.3-2) unstable; urgency=low
* Now uses tar tjf (Bug #128550)
* Removed som unecessery build constraints
* Recompiled with toolchain-source 3.0.3-2
-- Hakan Ardo <hakan@debian.org> Thu, 10 Jan 2002 23:44:11 +0100
gcc-avr (1:3.0.3-1) unstable; urgency=low
* gcc version no longer hardcoded in rules
* Upstream update to 3.0.3
* Updated Build-Depends on binutils
-- Hakan Ardo <hakan@debian.org> Tue, 8 Jan 2002 17:42:27 +0100
gcc-avr (3.0.ds9-7) unstable; urgency=low
* Removed dependency on graphviz and updated version number of
toolchain-source (Bug #108902)
-- Hakan Ardo <hakan@debian.org> Sun, 19 Aug 2001 22:12:10 +0200
gcc-avr (3.0.ds9-6) unstable; urgency=low
* Dummy release to get pkg back in distribution (Bug #106872)
-- Hakan Ardo <hakan@debian.org> Wed, 8 Aug 2001 18:21:53 +0200
gcc-avr (3.0.ds9-5) unstable; urgency=low
* .deb file no longer in src pkg
* Now build-depends on toolchain-source instaed of using apt-get
(Bug #105847)
-- Hakan Ardo <hakan@debian.org> Thu, 26 Jul 2001 13:09:26 +0200
gcc-avr (3.0.ds9-4) unstable; urgency=low
* Initial Release
-- Hakan Ardo <hakan@debian.org> Mon, 2 Jul 2001 22:45:33 +0200
Local variables:
mode: debian-changelog
End:

19
gcc-debian/control Normal file
View file

@ -0,0 +1,19 @@
Source: gcc-avr
Section: devel
Priority: extra
Maintainer: Hakan Ardo <hakan@debian.org>
Standards-Version: 3.5.3
Build-Depends: m4, autoconf (>= 2.13), libtool, gawk, bzip2, binutils-avr (>= 2.18-4), bison, flex, gettext, texinfo, zlib1g-dev, debhelper (>= 4.2.10), tar (>= 1.13.18), automake1.9, dbs (>=0.43), gcc-4.3-source(>=4.3.2-1), libmpfr-dev
Build-Conflicts: libgcc0, libgcc300
Package: gcc-avr
Architecture: any
Section: devel
Priority: extra
Conflicts: avr-libc(<=1:1.6.2-1)
Depends: ${shlibs:Depends}, binutils-avr (>= 2.18-4)
Provides: c-compiler-avr
Suggests: task-c-devel, gcc-doc (>= 4:4.0.2-1), gcc-4.2, avr-libc(>=1:1.6.2-2)
Description: The GNU C compiler (cross compiler for avr)
This is the GNU C compiler, a fairly portable optimizing compiler which
supports multiple languages. This package includes support for C.

9
gcc-debian/copyright Normal file
View file

@ -0,0 +1,9 @@
This is a debian pakcage of the GNU gcc compiler compiled as an avr
crosscompiler. This package was downloaded from:
ftp://ftp.funet.fi/pub/gnu/prep/gcc/gcc-3.3.2/
Copyright: GNU General Public License
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

0
gcc-debian/dh_dummy Executable file
View file

6
gcc-debian/dirs Normal file
View file

@ -0,0 +1,6 @@
usr/bin
usr/lib

1
gcc-debian/dummy.texi Normal file
View file

@ -0,0 +1 @@
@c This file is empty because the original one has a non DFSG free license (GFDL)

41
gcc-debian/gcc-dummy.texi Normal file
View file

@ -0,0 +1,41 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
@settitle The GNU Compiler Collection (GCC)
@c Create a separate index for command line options.
@defcodeindex op
@c Merge the standard indexes into a single one.
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex tp cp
@paragraphindent 1
@c %**end of header
@copying
The current documentation is licensed under the same terms as the Debian packaging.
@end copying
@ifnottex
@dircategory Programming
@direntry
* @name@: (@name@). The GNU Compiler Collection (@name@).
@end direntry
@sp 1
@end ifnottex
@summarycontents
@contents
@page
@node Top
@top Introduction
@cindex introduction
The official GNU compilers' documentation is released under the terms
of the GNU Free Documentation License with cover texts. This has been
considered non free by the Debian Project. Thus you will find it in the
non-free section of the Debian archive.
@bye

View file

@ -0,0 +1,14 @@
Fix for GCC bug #30243.
Index: gcc/builtins.c
===================================================================
--- gcc/builtins.c (revision 126457)
+++ gcc/builtins.c (working copy)
@@ -5664,7 +5664,7 @@
lo = 0;
}
- if (imode != rmode)
+ if (GET_MODE_SIZE (imode) > GET_MODE_SIZE (rmode))
temp = gen_lowpart (rmode, temp);
temp = expand_binop (rmode, and_optab, temp,
immed_double_const (lo, hi, rmode),

View file

@ -0,0 +1,36 @@
Committed on HEAD (4.4.)
Backported for 4.3.0.
Fixes bug 35519.
Testing if fixed bug 35872.
--------------------------------------------------------------------------------
--- gcc/combine.c 2008/04/04 23:36:19 133919
+++ gcc/combine.c 2008/04/04 23:45:46 133920
@@ -1,6 +1,6 @@
/* Optimize by combining instructions for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
This file is part of GCC.
@@ -976,8 +976,18 @@
assignments later. */
if (regno >= FIRST_PSEUDO_REGISTER
|| asm_noperands (PATTERN (use_insn)) < 0)
- LOG_LINKS (use_insn) =
- alloc_INSN_LIST (insn, LOG_LINKS (use_insn));
+ {
+ /* Don't add duplicate links between instructions. */
+ rtx links;
+ for (links = LOG_LINKS (use_insn); links;
+ links = XEXP (links, 1))
+ if (insn == XEXP (links, 0))
+ break;
+
+ if (!links)
+ LOG_LINKS (use_insn) =
+ alloc_INSN_LIST (insn, LOG_LINKS (use_insn));
+ }
}
next_use[regno] = NULL_RTX;
}

View file

@ -0,0 +1,26 @@
Committed on HEAD/4.4
--------------------------------------------------------------------------------
Index: fwprop.c
===================================================================
--- gcc/fwprop.c (revision 131704)
+++ gcc/fwprop.c (working copy)
@@ -882,7 +882,6 @@
return try_fwprop_subst (use, loc, new, def_insn, set_reg_equal);
}
-
/* Given a use USE of an insn, if it has a single reaching
definition, try to forward propagate it into that insn. */
@@ -921,9 +920,10 @@
else
parent = PATTERN (use_insn);
- if (!loc_mentioned_in_p (DF_REF_LOC (use), parent))
+ if (!reg_mentioned_p (DF_REF_REG (use), parent))
return;
+
def_insn = DF_REF_INSN (def);
if (multiple_sets (def_insn))
return;

View file

@ -0,0 +1,20 @@
Index: avr.md
===================================================================
--- gcc/config/avr/avr.md (revision 132947)
+++ gcc/config/avr/avr.md (working copy)
@@ -585,13 +585,13 @@
adc %B0,__zero_reg__"
[(set_attr "length" "2")
(set_attr "cc" "set_n")])
-
+;disable this as reload has problems with it.
(define_insn "*addhi3_zero_extend2"
[(set (match_operand:HI 0 "register_operand" "=r")
(plus:HI
(zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]
- ""
+ "0"
"add %0,%2
mov %B0,__zero_reg__
adc %B0,__zero_reg__"

View file

@ -0,0 +1,39 @@
Index: gcc/config/avr/avr.c
===================================================================
--- gcc/config/avr/avr.c (revision 134897)
+++ gcc/config/avr/avr.c (working copy)
@@ -471,8 +471,10 @@
int reg, count;
int int_or_sig_p = (interrupt_function_p (current_function_decl)
|| signal_function_p (current_function_decl));
- int leaf_func_p = leaf_function_p ();
+ if (!reload_completed)
+ cfun->machine->is_leaf = leaf_function_p ();
+
if (set)
CLEAR_HARD_REG_SET (*set);
count = 0;
@@ -490,7 +492,7 @@
if (fixed_regs[reg])
continue;
- if ((int_or_sig_p && !leaf_func_p && call_used_regs[reg])
+ if ((int_or_sig_p && !cfun->machine->is_leaf && call_used_regs[reg])
|| (df_regs_ever_live_p (reg)
&& (int_or_sig_p || !call_used_regs[reg])
&& !(frame_pointer_needed
Index: gcc/config/avr/avr.h
===================================================================
--- gcc/config/avr/avr.h (revision 134897)
+++ gcc/config/avr/avr.h (working copy)
@@ -1026,6 +1026,9 @@
This is added to the cfun structure. */
struct machine_function GTY(())
{
+ /* TRUE if the current function is a leaf function. */
+ int is_leaf;
+
/* 'true' - if current function is a naked function. */
int is_naked;

View file

@ -0,0 +1,97 @@
--- gcc/config/avr/avr.c.orig Sat May 12 15:32:41 2001
+++ gcc/config/avr/avr.c Sat Oct 6 01:04:15 2001
@@ -562,7 +562,7 @@
fprintf (file,"\tsei\n");
++prologue_size;
}
- if (interrupt_func_p | signal_func_p)
+ if (interrupt_func_p || signal_func_p)
{
fprintf (file, "\t"
AS1 (push,__zero_reg__) CR_TAB
@@ -574,14 +574,23 @@
}
if (main_p)
{
- fprintf (file, ("\t"
- AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
- AS2 (ldi,r29,hi8(%s - %d)) CR_TAB
- AS2 (out,__SP_H__,r29) CR_TAB
- AS2 (out,__SP_L__,r28) "\n"),
- avr_init_stack, size, avr_init_stack, size);
+ if (!TARGET_TINY_STACK) {
+ fprintf (file, ("\t"
+ AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
+ AS2 (ldi,r29,hi8(%s - %d)) CR_TAB
+ AS2 (out,__SP_H__,r29) CR_TAB
+ AS2 (out,__SP_L__,r28) "\n"),
+ avr_init_stack, size, avr_init_stack, size);
- prologue_size += 4;
+ prologue_size += 4;
+ } else {
+ fprintf (file, ("\t"
+ AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
+ AS2 (out,__SP_L__,r28) "\n"),
+ avr_init_stack, size);
+
+ prologue_size += 2;
+ }
}
else if (minimize && (frame_pointer_needed || live_seq > 6))
{
@@ -613,7 +622,8 @@
{
for (reg = 0; reg < 32; ++reg)
{
- if ((!leaf_func_p
+ if (!fixed_regs[reg] &&
+ ((!leaf_func_p
&& (call_used_regs[reg]
&& (interrupt_func_p || signal_func_p)
&& !(reg == TMP_REGNO || reg == ZERO_REGNO)))
@@ -621,7 +631,7 @@
&& (!call_used_regs[reg]
|| interrupt_func_p || signal_func_p)
&& ! (frame_pointer_needed
- && (reg == REG_Y || reg == (REG_Y+1)))))
+ && (reg == REG_Y || reg == (REG_Y+1))))))
{
fprintf (file, "\t" AS1 (push,%s) "\n", avr_regnames[reg]);
++prologue_size;
@@ -737,7 +747,7 @@
fputs ("\t", file);
epilogue_size += out_adj_frame_ptr (file, -size);
- if (interrupt_func_p | signal_func_p)
+ if (interrupt_func_p || signal_func_p)
{
epilogue_size += out_set_stack_ptr (file, -1, 0);
}
@@ -754,7 +764,8 @@
for (reg = 31; reg >= 0; --reg)
{
- if ((!leaf_func_p
+ if (!fixed_regs[reg] &&
+ ((!leaf_func_p
&& (call_used_regs[reg]
&& (interrupt_func_p || signal_func_p)
&& !(reg == TMP_REGNO || reg == ZERO_REGNO)))
@@ -762,14 +773,14 @@
&& (!call_used_regs[reg]
|| interrupt_func_p || signal_func_p)
&& ! (frame_pointer_needed
- && (reg == REG_Y || reg == (REG_Y+1)))))
+ && (reg == REG_Y || reg == (REG_Y+1))))))
{
fprintf (file, "\t" AS1 (pop,%s) "\n", avr_regnames[reg]);
++epilogue_size;
}
}
- if (interrupt_func_p | signal_func_p)
+ if (interrupt_func_p || signal_func_p)
{
fprintf (file, "\t"
AS1 (pop,__tmp_reg__) CR_TAB

View file

@ -0,0 +1,12 @@
--- libiberty/Makefile.in.orig Mon Sep 26 22:55:10 2005
+++ libiberty/Makefile.in Wed Mar 22 22:13:44 2006
@@ -275,7 +275,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)

View file

@ -0,0 +1,22 @@
--- configure.ac 2007-05-30 07:48:07.000000000 -0600
+++ configure.ac 2007-07-29 08:33:39.642875000 -0600
@@ -504,7 +504,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
;;
avr-*-*)
- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp"
;;
bfin-*-*)
noconfigdirs="$noconfigdirs gdb"
--- configure 2007-06-20 17:07:21.000000000 -0600
+++ configure 2007-07-29 08:32:35.080375000 -0600
@@ -1344,7 +1344,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
;;
avr-*-*)
- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp"
;;
bfin-*-*)
noconfigdirs="$noconfigdirs gdb"

Some files were not shown because too many files have changed in this diff Show more