aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2012-01-02 12:51:57 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2012-01-02 12:51:57 +0000
commit884f56d1e1ee1a31d6ac75c8f3b3989b8118271e (patch)
tree09faf9ffade22c526948920809d1a98fde9264e0 /gcc
parent94fae14bf8aa693c31a8d19febfffd048edb9535 (diff)
downloadgcc-884f56d1e1ee1a31d6ac75c8f3b3989b8118271e.zip
gcc-884f56d1e1ee1a31d6ac75c8f3b3989b8118271e.tar.gz
gcc-884f56d1e1ee1a31d6ac75c8f3b3989b8118271e.tar.bz2
re PR target/51345 ([avr] Devices with 8-bit SP need their own multilib(s))
contrib/ PR target/51345 * gcc_update (files_and_dependencies): Add gcc/config/avr/t-multilib, gcc/config/avr/multilib.h. libgcc/ PR target/51345 * config/avr/lib1funcs.S: Remove FIXME comments. (SPEED_DIV): Depend on __AVR_HAVE_8BIT_SP__. gcc/ PR target/51345 * config.gcc (tm_file target=avr]): Add avr/avr-multilib.h (tmake_file target=avr): Add avr/t-multilib. * config/avr/avr-c.c (avr_cpu_cpp_builtins): Use AVR_HAVE_8BIT_SP to built-in define __AVR_HAVE_8BIT_SP__, __AVR_HAVE_16BIT_SP__. * config/avr/genmultilib.awk: New file. * config/avr/t-multilib: New auto-generated file. * config/avr/multilib.h: New auto-generated file. * config/avr/t-avr (AVR_MCUS): New variable. (genopt.sh): Use it. (s-mlib): Depend on t-multilib. (t-multilib, multilib.h): New dependencies. (s-avr-mlib): New rule to build t-multilib, multilib.h from AVR_MCUS. (MULTILIB_OPTIONS): Remove. (MULTILIB_MATCHES): Remove. (MULTILIB_DIRNAMES): Remove. (MULTILIB_EXCEPTIONS): Remove: * config/avr/genopt.sh: Don't use hard coded file name; pass AVR_MCUS from t-avr instead. From-SVN: r182797
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog23
-rw-r--r--gcc/config.gcc7
-rw-r--r--gcc/config/avr/avr-c.c2
-rw-r--r--gcc/config/avr/avr-mcus.def1
-rw-r--r--gcc/config/avr/genmultilib.awk315
-rwxr-xr-xgcc/config/avr/genopt.sh2
-rw-r--r--gcc/config/avr/multilib.h65
-rw-r--r--gcc/config/avr/t-avr173
-rw-r--r--gcc/config/avr/t-multilib192
9 files changed, 624 insertions, 156 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1921a03..9d3a7df 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,28 @@
2012-01-02 Georg-Johann Lay <avr@gjlay.de>
+ PR target/51345
+ * config.gcc (tm_file target=avr]): Add avr/avr-multilib.h
+ (tmake_file target=avr): Add avr/t-multilib.
+
+ * config/avr/avr-c.c (avr_cpu_cpp_builtins): Use AVR_HAVE_8BIT_SP
+ to built-in define __AVR_HAVE_8BIT_SP__, __AVR_HAVE_16BIT_SP__.
+ * config/avr/genmultilib.awk: New file.
+ * config/avr/t-multilib: New auto-generated file.
+ * config/avr/multilib.h: New auto-generated file.
+ * config/avr/t-avr (AVR_MCUS): New variable.
+ (genopt.sh): Use it.
+ (s-mlib): Depend on t-multilib.
+ (t-multilib, multilib.h): New dependencies.
+ (s-avr-mlib): New rule to build t-multilib, multilib.h from AVR_MCUS.
+ (MULTILIB_OPTIONS): Remove.
+ (MULTILIB_MATCHES): Remove.
+ (MULTILIB_DIRNAMES): Remove.
+ (MULTILIB_EXCEPTIONS): Remove:
+ * config/avr/genopt.sh: Don't use hard coded file name;
+ pass AVR_MCUS from t-avr instead.
+
+2012-01-02 Georg-Johann Lay <avr@gjlay.de>
+
* config/avr/avr.c (avr_out_ashrpsi3): Fix "case 31" to "case 23".
2012-01-02 Georg-Johann Lay <avr@gjlay.de>
diff --git a/gcc/config.gcc b/gcc/config.gcc
index d0f7b28..bc2bf05 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -909,13 +909,14 @@ arm*-wince-pe*)
extra_objs="pe.o"
;;
avr-*-rtems*)
- tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
- tmake_file="avr/t-avr t-rtems avr/t-rtems"
+ tm_file="elfos.h avr/elf.h avr/avr.h avr/multilib.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
+ tmake_file="avr/t-avr avr/t-multilib t-rtems avr/t-rtems"
extra_gcc_objs="driver-avr.o avr-devices.o"
extra_objs="avr-devices.o avr-log.o"
;;
avr-*-*)
- tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h newlib-stdint.h"
+ tm_file="elfos.h avr/elf.h avr/avr.h avr/multilib.h dbxelf.h newlib-stdint.h"
+ tmake_file="avr/t-avr avr/t-multilib"
use_gcc_stdint=wrap
extra_gcc_objs="driver-avr.o avr-devices.o"
extra_objs="avr-devices.o avr-log.o"
diff --git a/gcc/config/avr/avr-c.c b/gcc/config/avr/avr-c.c
index 97a1a5e..a6e43de 100644
--- a/gcc/config/avr/avr-c.c
+++ b/gcc/config/avr/avr-c.c
@@ -113,7 +113,7 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile)
cpp_define (pfile, "__AVR_2_BYTE_PC__");
}
- if (avr_current_device->short_sp)
+ if (AVR_HAVE_8BIT_SP)
cpp_define (pfile, "__AVR_HAVE_8BIT_SP__");
else
cpp_define (pfile, "__AVR_HAVE_16BIT_SP__");
diff --git a/gcc/config/avr/avr-mcus.def b/gcc/config/avr/avr-mcus.def
index 1f7ae88..5573a9c 100644
--- a/gcc/config/avr/avr-mcus.def
+++ b/gcc/config/avr/avr-mcus.def
@@ -21,7 +21,6 @@
/* List of all known AVR MCU types - if updated, it has to be kept
in sync in several places (FIXME: is there a better way?):
- here;
- - t-avr (MULTILIB_MATCHES);
- gas/config/tc-avr.c;
- avr-libc.
diff --git a/gcc/config/avr/genmultilib.awk b/gcc/config/avr/genmultilib.awk
new file mode 100644
index 0000000..7bc3b4a
--- /dev/null
+++ b/gcc/config/avr/genmultilib.awk
@@ -0,0 +1,315 @@
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+##################################################################
+#
+# Transform Core/Device Information from avr-mcus.def to a
+# Representation that is understood by GCC's multilib Machinery.
+#
+# The Script works as a Filter from STDIN to STDOUT.
+#
+# FORMAT = "Makefile": Generate Makefile Snipet that sets some
+# MULTILIB_* Variables as needed.
+#
+# FORMAT = "multilib.h": Generate C Header intended to override
+# (parts of) multilib.h used in gcc.c.
+#
+##################################################################
+
+BEGIN {
+ FS ="[(, \t]+"
+ option[""] = ""
+ tiny_stack[""] = 1
+ comment = 1
+ n_mcu = 0
+ n_cores = 0
+
+ mtiny[0] = ""
+ mtiny[1] = "tiny-stack"
+ option["tiny-stack"] = "mtiny-stack"
+}
+
+##################################################################
+# Add some Comments to the generated Files and copy-paste
+# Copyright Notice from above.
+##################################################################
+
+/^#/ {
+ if (!comment)
+ next
+ else if (comment == 1)
+ {
+ if (FORMAT == "multilib.h")
+ {
+ print "/*"
+ print " Auto-generated C header"
+ print " Generated by : ./gcc/config/avr/genmultilib.awk"
+ print " Generated from : ./gcc/config/avr/avr-mcus.def"
+ print " Used by : ./gcc/gcc.c via tm.h"
+ print " Purpose : Override multilib_raw[] from multilib.h"
+ print "*/"
+ print "/*"
+ }
+
+ if (FORMAT == "Makefile")
+ {
+ print "# Auto-generated Makefile Snip"
+ print "# Generated by : ./gcc/config/avr/genmultilib.awk"
+ print "# Generated from : ./gcc/config/avr/avr-mcus.def"
+ print "# Used by : tmake_file from Makefile and genmultilib"
+ print ""
+ }
+ }
+
+ comment = 2;
+
+ if (FORMAT == "multilib.h")
+ gsub ("#", " ")
+
+ print
+}
+
+/^$/ {
+ if (comment && FORMAT == "multilib.h")
+ print "*/"
+
+ comment = 0
+}
+
+##################################################################
+# Run over all AVR_MCU Lines and gather Information:
+# cores[] : Enumerates the Cores (avr2, avr25, ...)
+# mcu[] : Enumerates the Devices
+# tiny_stack[]: Maps Core/Device to 0 (2-byte SP) or 1 (1-byte SP)
+# option[] : Maps Core/Device to the mmcu= option to get it
+# toCore[] : Maps Device to its Core
+##################################################################
+
+/^AVR_MCU/ {
+ name = $2
+ gsub ("\"", "", name)
+
+ if ($4 == "NULL")
+ {
+ core = name
+
+ # avr1 is supported for Assembler only: It gets no multilib
+ if (core == "avr1")
+ next
+
+ cores[n_cores] = core
+ n_cores++
+ tiny_stack[core] = 0
+ option[core] = "mmcu=" core
+
+ next
+ }
+
+ # avr1 is supported for Assembler only: Its Devices are ignored
+ if (core == "avr1")
+ next
+
+ tiny_stack[name] = $5
+ mcu[n_mcu] = name
+ n_mcu++
+ option[name] = "mmcu=" name
+ toCore[name] = core
+
+ if (tiny_stack[name] == 1)
+ tiny_stack[core] = 1
+}
+
+##################################################################
+#
+# We gathered all the Information, now build/output the following:
+#
+# awk Variable target Variable FORMAT
+# -----------------------------------------------------------
+# m_options <-> MULTILIB_OPTIONS Makefile
+# m_dirnames <-> MULTILIB_DIRNAMES "
+# m_exceptions <-> MULTILIB_EXCEPTIONS "
+# m_matches <-> MULTILIB_MATCHES "
+# m_raw <-> avr_multilib_raw multilib.h
+#
+##################################################################
+
+END {
+ m_options = "\nMULTILIB_OPTIONS = "
+ m_dirnames = "\nMULTILIB_DIRNAMES ="
+ m_exceptions = "\nMULTILIB_EXCEPTIONS ="
+ m_matches = "\nMULTILIB_MATCHES ="
+
+ m_raw = ""
+
+ ##############################################################
+ # Compose MULTILIB_OPTIONS. This represents the Cross-Product
+ # (avr2, avr25, ...) x mtiny-stack
+
+ sep = ""
+ for (c = 0; c < n_cores; c++)
+ {
+ m_options = m_options sep option[cores[c]]
+ sep = "/"
+ }
+
+ # The ... x mtiny-stack
+ m_options = m_options " " option[mtiny[1]]
+
+ ##############################################################
+ # Map Device to its multilib
+
+ # All Mappings that cannot be represented by GCC's genmultilib
+ # Machinery must be handcrafted.
+
+ dot_excludes = ""
+ m_raw_sp8 = ""
+
+ for (t = 0; t < n_mcu; t++)
+ {
+ core = toCore[mcu[t]]
+
+ if (tiny_stack[mcu[t]] == 1)
+ {
+ if (core == "avr2")
+ dir = mtiny[1]
+ else
+ dir = core "/" mtiny[1]
+
+ m_raw_sp8 = m_raw_sp8 " \"" dir " " option[mcu[t]] ";\",\n"
+ dot_excludes = dot_excludes " !" option[mcu[t]]
+
+ line = option[mcu[t]] ":" option[mcu[t]]
+ gsub ("=", "?", line)
+ gsub (":", "=", line)
+
+ m_matches = m_matches " \\\n\t" line
+ }
+
+ # The SP = 16 Devices are vanilla: Do the same as
+ # MULTILIB_MATCHES would yield. Don't list avr2 (default)
+
+ if (core != "avr2")
+ {
+ line = option[core] ":" option[mcu[t]]
+ gsub ("=", "?", line)
+ gsub (":", "=", line)
+
+ m_matches = m_matches " \\\n\t" line
+ }
+ }
+
+ ####################################################################
+ # Compose MULTILIB_DIRNAMES, MULTILIB_EXEPTIONS and avr_multilib_raw
+
+ n_mtiny = 2
+ for (t = 0; t < n_mtiny; t++)
+ for (c = -1; c < n_cores; c++)
+ {
+ if (c == -1)
+ core = ""
+ else
+ core = cores[c]
+
+ # The Directory Name for this multilib
+
+ if (core != "" && mtiny[t] != "")
+ {
+ mdir = core "/" mtiny[t]
+ mopt = option[core] "/" option[mtiny[t]]
+ }
+ else
+ {
+ mdir = core mtiny[t]
+ mopt = option[core] option[mtiny[t]]
+ }
+
+ if (core != "" && tiny_stack[core] == 0 && mtiny[t] != "")
+ {
+ # There's not a single SP = 8 Devices for this Core:
+ # Don't build respective multilib
+ m_exceptions = m_exceptions " \\\n\t" mopt
+ continue
+ }
+
+ if (core != "avr2" || mtiny[t] == "")
+ m_dirnames = m_dirnames " " mdir
+
+ # Remainder deals with avr_multilib_raw Entries.
+ # Each Entry looks like
+ # "multilib-dir option-to-match !option-to-avoid-match;"
+ # for Example:
+ # "avr25/tiny-stack !mmcu=avr2 mmcu=avr25 !mmcu=avr3 ... mtiny-stack;"
+
+ if (mdir == "")
+ mdir = "."
+
+ line = mdir
+
+ for (s = 0; s < n_cores; s++)
+ {
+ if (cores[s] == core)
+ line = line " " option[cores[s]]
+ else
+ line = line " !" option[cores[s]]
+ }
+
+ if (tiny_stack[core] != 0)
+ {
+ if (mtiny[t] == "")
+ line = line " !" option[mtiny[1]]
+ else
+ line = line " " option[mtiny[1]]
+ }
+
+ if (mdir == ".")
+ line = line dot_excludes
+
+ m_raw = m_raw " \"" line ";\",\n"
+ }
+
+ ############################################################
+ # Output that Stuff
+ ############################################################
+
+ if (FORMAT == "Makefile")
+ {
+ # Intended Target: ./gcc/config/avr/t-multilib
+
+ print m_options
+ print m_dirnames
+ print m_exceptions
+ print m_matches
+ }
+
+ if (FORMAT == "multilib.h")
+ {
+ # Intended Target: ./gcc/config/avr/multilib.h
+
+ print "#if defined NULL && !defined AVR_MULTILIB_H"
+ print "#define AVR_MULTILIB_H"
+
+ print "static const char* const avr_multilib_raw[] = {"
+ print m_raw_sp8
+ print m_raw
+ print " NULL\n};"
+
+ print "#undef multilib_raw"
+ print "#define multilib_raw avr_multilib_raw"
+ print "#endif /* AVR_MULTILIB_H */"
+ }
+}
diff --git a/gcc/config/avr/genopt.sh b/gcc/config/avr/genopt.sh
index d2dcfad..6f9b778 100755
--- a/gcc/config/avr/genopt.sh
+++ b/gcc/config/avr/genopt.sh
@@ -56,4 +56,4 @@ awk -F'[(, ]+' 'BEGIN {
print "Enum(avr_mcu) String(" name ") Value(" value ")"
print ""
value++
-}' $1/avr-mcus.def
+}' $1
diff --git a/gcc/config/avr/multilib.h b/gcc/config/avr/multilib.h
new file mode 100644
index 0000000..c434850
--- /dev/null
+++ b/gcc/config/avr/multilib.h
@@ -0,0 +1,65 @@
+/*
+ Auto-generated C header
+ Generated by : ./gcc/config/avr/genmultilib.awk
+ Generated from : ./gcc/config/avr/avr-mcus.def
+ Used by : ./gcc/gcc.c via tm.h
+ Purpose : Override multilib_raw[] from multilib.h
+*/
+/*
+ Copyright (C) 2011 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>.
+*/
+#if defined NULL && !defined AVR_MULTILIB_H
+#define AVR_MULTILIB_H
+static const char* const avr_multilib_raw[] = {
+ "tiny-stack mmcu=at90s2313;",
+ "tiny-stack mmcu=at90s2323;",
+ "tiny-stack mmcu=at90s2333;",
+ "tiny-stack mmcu=at90s2343;",
+ "tiny-stack mmcu=attiny22;",
+ "tiny-stack mmcu=attiny26;",
+ "tiny-stack mmcu=at90s4433;",
+ "avr25/tiny-stack mmcu=attiny13;",
+ "avr25/tiny-stack mmcu=attiny13a;",
+ "avr25/tiny-stack mmcu=attiny2313;",
+ "avr25/tiny-stack mmcu=attiny2313a;",
+ "avr25/tiny-stack mmcu=attiny24;",
+ "avr25/tiny-stack mmcu=attiny24a;",
+ "avr25/tiny-stack mmcu=attiny25;",
+ "avr25/tiny-stack mmcu=attiny261;",
+ "avr25/tiny-stack mmcu=attiny261a;",
+
+ ". !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mtiny-stack !mmcu=at90s2313 !mmcu=at90s2323 !mmcu=at90s2333 !mmcu=at90s2343 !mmcu=attiny22 !mmcu=attiny26 !mmcu=at90s4433 !mmcu=attiny13 !mmcu=attiny13a !mmcu=attiny2313 !mmcu=attiny2313a !mmcu=attiny24 !mmcu=attiny24a !mmcu=attiny25 !mmcu=attiny261 !mmcu=attiny261a;",
+ "avr2 mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mtiny-stack;",
+ "avr25 !mmcu=avr2 mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mtiny-stack;",
+ "avr3 !mmcu=avr2 !mmcu=avr25 mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6;",
+ "avr31 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6;",
+ "avr35 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6;",
+ "avr4 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6;",
+ "avr5 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 mmcu=avr5 !mmcu=avr51 !mmcu=avr6;",
+ "avr51 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 mmcu=avr51 !mmcu=avr6;",
+ "avr6 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 mmcu=avr6;",
+ "tiny-stack !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 mtiny-stack;",
+ "avr2/tiny-stack mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 mtiny-stack;",
+ "avr25/tiny-stack !mmcu=avr2 mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 mtiny-stack;",
+
+ NULL
+};
+#undef multilib_raw
+#define multilib_raw avr_multilib_raw
+#endif /* AVR_MULTILIB_H */
diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr
index ee2dc56..732ca00 100644
--- a/gcc/config/avr/t-avr
+++ b/gcc/config/avr/t-avr
@@ -34,156 +34,29 @@ avr-log.o: $(srcdir)/config/avr/avr-log.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(INPUT_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
-$(srcdir)/config/avr/avr-tables.opt: $(srcdir)/config/avr/genopt.sh \
- $(srcdir)/config/avr/avr-mcus.def
- $(SHELL) $(srcdir)/config/avr/genopt.sh $(srcdir)/config/avr > \
- $(srcdir)/config/avr/avr-tables.opt
+# Files and Variables auto-generated from avr-mcus.def
-MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
-MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
+AVR_MCUS = $(srcdir)/config/avr/avr-mcus.def
-# The many avr2 matches are not listed here - this is the default.
-MULTILIB_MATCHES = \
- mmcu?avr25=mmcu?ata6289 \
- mmcu?avr25=mmcu?attiny13 \
- mmcu?avr25=mmcu?attiny13a \
- mmcu?avr25=mmcu?attiny2313 \
- mmcu?avr25=mmcu?attiny2313a \
- mmcu?avr25=mmcu?attiny4313 \
- mmcu?avr25=mmcu?attiny24 \
- mmcu?avr25=mmcu?attiny24a \
- mmcu?avr25=mmcu?attiny44 \
- mmcu?avr25=mmcu?attiny44a \
- mmcu?avr25=mmcu?attiny84 \
- mmcu?avr25=mmcu?attiny84a \
- mmcu?avr25=mmcu?attiny25 \
- mmcu?avr25=mmcu?attiny45 \
- mmcu?avr25=mmcu?attiny85 \
- mmcu?avr25=mmcu?attiny261 \
- mmcu?avr25=mmcu?attiny261a \
- mmcu?avr25=mmcu?attiny461 \
- mmcu?avr25=mmcu?attiny461a \
- mmcu?avr25=mmcu?attiny861 \
- mmcu?avr25=mmcu?attiny861a \
- mmcu?avr25=mmcu?attiny43u \
- mmcu?avr25=mmcu?attiny87 \
- mmcu?avr25=mmcu?attiny48 \
- mmcu?avr25=mmcu?attiny88 \
- mmcu?avr25=mmcu?at86rf401 \
- mmcu?avr3=mmcu?at43usb355 \
- mmcu?avr3=mmcu?at76c711 \
- mmcu?avr31=mmcu?atmega103 \
- mmcu?avr31=mmcu?at43usb320 \
- mmcu?avr35=mmcu?at90usb82 \
- mmcu?avr35=mmcu?at90usb162 \
- mmcu?avr35=mmcu?atmega8u2 \
- mmcu?avr35=mmcu?atmega16u2 \
- mmcu?avr35=mmcu?atmega32u2 \
- mmcu?avr35=mmcu?attiny167 \
- mmcu?avr4=mmcu?atmega48 \
- mmcu?avr4=mmcu?atmega48a \
- mmcu?avr4=mmcu?atmega48p \
- mmcu?avr4=mmcu?atmega8 \
- mmcu?avr4=mmcu?atmega8515 \
- mmcu?avr4=mmcu?atmega8535 \
- mmcu?avr4=mmcu?atmega88 \
- mmcu?avr4=mmcu?atmega88a \
- mmcu?avr4=mmcu?atmega88p \
- mmcu?avr4=mmcu?atmega88pa \
- mmcu?avr4=mmcu?atmega8hva \
- mmcu?avr4=mmcu?at90pwm1 \
- mmcu?avr4=mmcu?at90pwm2 \
- mmcu?avr4=mmcu?at90pwm2b \
- mmcu?avr4=mmcu?at90pwm3 \
- mmcu?avr4=mmcu?at90pwm3b \
- mmcu?avr4=mmcu?at90pwm81 \
- mmcu?avr5=mmcu?atmega16 \
- mmcu?avr5=mmcu?atmega16a \
- mmcu?avr5=mmcu?atmega161 \
- mmcu?avr5=mmcu?atmega162 \
- mmcu?avr5=mmcu?atmega163 \
- mmcu?avr5=mmcu?atmega164a \
- mmcu?avr5=mmcu?atmega164p \
- mmcu?avr5=mmcu?atmega165 \
- mmcu?avr5=mmcu?atmega165a \
- mmcu?avr5=mmcu?atmega165p \
- mmcu?avr5=mmcu?atmega168 \
- mmcu?avr5=mmcu?atmega168a \
- mmcu?avr5=mmcu?atmega168p \
- mmcu?avr5=mmcu?atmega169 \
- mmcu?avr5=mmcu?atmega169a \
- mmcu?avr5=mmcu?atmega169p \
- mmcu?avr5=mmcu?atmega169pa \
- mmcu?avr5=mmcu?atmega32 \
- mmcu?avr5=mmcu?atmega323 \
- mmcu?avr5=mmcu?atmega324a \
- mmcu?avr5=mmcu?atmega324p \
- mmcu?avr5=mmcu?atmega324pa \
- mmcu?avr5=mmcu?atmega325 \
- mmcu?avr5=mmcu?atmega325a \
- mmcu?avr5=mmcu?atmega325p \
- mmcu?avr5=mmcu?atmega3250 \
- mmcu?avr5=mmcu?atmega3250a \
- mmcu?avr5=mmcu?atmega3250p \
- mmcu?avr5=mmcu?atmega328 \
- mmcu?avr5=mmcu?atmega328p \
- mmcu?avr5=mmcu?atmega329 \
- mmcu?avr5=mmcu?atmega329a \
- mmcu?avr5=mmcu?atmega329p \
- mmcu?avr5=mmcu?atmega329pa \
- mmcu?avr5=mmcu?atmega3290 \
- mmcu?avr5=mmcu?atmega3290a \
- mmcu?avr5=mmcu?atmega3290p \
- mmcu?avr5=mmcu?atmega406 \
- mmcu?avr5=mmcu?atmega64 \
- mmcu?avr5=mmcu?atmega640 \
- mmcu?avr5=mmcu?atmega644 \
- mmcu?avr5=mmcu?atmega644a \
- mmcu?avr5=mmcu?atmega644p \
- mmcu?avr5=mmcu?atmega644pa \
- mmcu?avr5=mmcu?atmega645 \
- mmcu?avr5=mmcu?atmega645a \
- mmcu?avr5=mmcu?atmega645p \
- mmcu?avr5=mmcu?atmega6450 \
- mmcu?avr5=mmcu?atmega6450a \
- mmcu?avr5=mmcu?atmega6450p \
- mmcu?avr5=mmcu?atmega649 \
- mmcu?avr5=mmcu?atmega649a \
- mmcu?avr5=mmcu?atmega649p \
- mmcu?avr5=mmcu?atmega6490 \
- mmcu?avr5=mmcu?atmega6490a \
- mmcu?avr5=mmcu?atmega6490p \
- mmcu?avr5=mmcu?atmega16hva \
- mmcu?avr5=mmcu?atmega16hva2 \
- mmcu?avr5=mmcu?atmega16hvb \
- mmcu?avr5=mmcu?atmega32hvb \
- mmcu?avr5=mmcu?atmega64hve \
- mmcu?avr5=mmcu?at90can32 \
- mmcu?avr5=mmcu?at90can64 \
- mmcu?avr5=mmcu?at90pwm216 \
- mmcu?avr5=mmcu?at90pwm316 \
- mmcu?avr5=mmcu?atmega32c1 \
- mmcu?avr5=mmcu?atmega64c1 \
- mmcu?avr5=mmcu?atmega16m1 \
- mmcu?avr5=mmcu?atmega32m1 \
- mmcu?avr5=mmcu?atmega64m1 \
- mmcu?avr5=mmcu?atmega16u4 \
- mmcu?avr5=mmcu?atmega32u4 \
- mmcu?avr5=mmcu?atmega32u6 \
- mmcu?avr5=mmcu?at90scr100 \
- mmcu?avr5=mmcu?at90usb646 \
- mmcu?avr5=mmcu?at90usb647 \
- mmcu?avr5=mmcu?at94k \
- mmcu?avr5=mmcu?m3000 \
- mmcu?avr51=mmcu?atmega128 \
- mmcu?avr51=mmcu?atmega1280 \
- mmcu?avr51=mmcu?atmega1281 \
- mmcu?avr51=mmcu?atmega1284p \
- mmcu?avr51=mmcu?atmega128rfa1 \
- mmcu?avr51=mmcu?at90can128 \
- mmcu?avr51=mmcu?at90usb1286 \
- mmcu?avr51=mmcu?at90usb1287 \
- mmcu?avr6=mmcu?atmega2560 \
- mmcu?avr6=mmcu?atmega2561
+$(srcdir)/config/avr/avr-tables.opt: $(srcdir)/config/avr/genopt.sh $(AVR_MCUS)
+ $(SHELL) $< $(AVR_MCUS) > $@
-MULTILIB_EXCEPTIONS =
+# MULTILIB_OPTIONS
+# MULTILIB_DIRNAMES
+# MULTILIB_EXCEPTIONS
+# MULTILIB_MATCHES
+$(srcdir)/config/avr/t-multilib: s-avr-mlib; @true
+
+# Override multilib_raw[] from multilib.h
+$(srcdir)/config/avr/multilib.h: s-avr-mlib; @true
+
+s-mlib: $(srcdir)/config/avr/t-multilib
+
+s-avr-mlib: $(srcdir)/config/avr/genmultilib.awk $(AVR_MCUS)
+ $(AWK) -f $< -v FORMAT=Makefile $< $(AVR_MCUS) > tmp-avr-mlib
+ $(AWK) -f $< -v FORMAT=multilib.h $< $(AVR_MCUS) > tmp-avr-mlib.h
+ $(SHELL) $(srcdir)/../move-if-change \
+ tmp-avr-mlib.h $(srcdir)/config/avr/multilib.h
+ $(SHELL) $(srcdir)/../move-if-change \
+ tmp-avr-mlib $(srcdir)/config/avr/t-multilib
+ $(STAMP) $@
diff --git a/gcc/config/avr/t-multilib b/gcc/config/avr/t-multilib
new file mode 100644
index 0000000..7f5a19a
--- /dev/null
+++ b/gcc/config/avr/t-multilib
@@ -0,0 +1,192 @@
+# Auto-generated Makefile Snip
+# Generated by : ./gcc/config/avr/genmultilib.awk
+# Generated from : ./gcc/config/avr/avr-mcus.def
+# Used by : tmake_file from Makefile and genmultilib
+
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6 mtiny-stack
+
+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 tiny-stack avr25/tiny-stack
+
+MULTILIB_EXCEPTIONS = \
+ mmcu=avr3/mtiny-stack \
+ mmcu=avr31/mtiny-stack \
+ mmcu=avr35/mtiny-stack \
+ mmcu=avr4/mtiny-stack \
+ mmcu=avr5/mtiny-stack \
+ mmcu=avr51/mtiny-stack \
+ mmcu=avr6/mtiny-stack
+
+MULTILIB_MATCHES = \
+ mmcu?at90s2313=mmcu?at90s2313 \
+ mmcu?at90s2323=mmcu?at90s2323 \
+ mmcu?at90s2333=mmcu?at90s2333 \
+ mmcu?at90s2343=mmcu?at90s2343 \
+ mmcu?attiny22=mmcu?attiny22 \
+ mmcu?attiny26=mmcu?attiny26 \
+ mmcu?at90s4433=mmcu?at90s4433 \
+ mmcu?avr25=mmcu?ata6289 \
+ mmcu?attiny13=mmcu?attiny13 \
+ mmcu?avr25=mmcu?attiny13 \
+ mmcu?attiny13a=mmcu?attiny13a \
+ mmcu?avr25=mmcu?attiny13a \
+ mmcu?attiny2313=mmcu?attiny2313 \
+ mmcu?avr25=mmcu?attiny2313 \
+ mmcu?attiny2313a=mmcu?attiny2313a \
+ mmcu?avr25=mmcu?attiny2313a \
+ mmcu?attiny24=mmcu?attiny24 \
+ mmcu?avr25=mmcu?attiny24 \
+ mmcu?attiny24a=mmcu?attiny24a \
+ mmcu?avr25=mmcu?attiny24a \
+ mmcu?avr25=mmcu?attiny4313 \
+ mmcu?avr25=mmcu?attiny44 \
+ mmcu?avr25=mmcu?attiny44a \
+ mmcu?avr25=mmcu?attiny84 \
+ mmcu?avr25=mmcu?attiny84a \
+ mmcu?attiny25=mmcu?attiny25 \
+ mmcu?avr25=mmcu?attiny25 \
+ mmcu?avr25=mmcu?attiny45 \
+ mmcu?avr25=mmcu?attiny85 \
+ mmcu?attiny261=mmcu?attiny261 \
+ mmcu?avr25=mmcu?attiny261 \
+ mmcu?attiny261a=mmcu?attiny261a \
+ mmcu?avr25=mmcu?attiny261a \
+ mmcu?avr25=mmcu?attiny461 \
+ mmcu?avr25=mmcu?attiny461a \
+ mmcu?avr25=mmcu?attiny861 \
+ mmcu?avr25=mmcu?attiny861a \
+ mmcu?avr25=mmcu?attiny43u \
+ mmcu?avr25=mmcu?attiny87 \
+ mmcu?avr25=mmcu?attiny48 \
+ mmcu?avr25=mmcu?attiny88 \
+ mmcu?avr25=mmcu?at86rf401 \
+ mmcu?avr3=mmcu?at43usb355 \
+ mmcu?avr3=mmcu?at76c711 \
+ mmcu?avr31=mmcu?atmega103 \
+ mmcu?avr31=mmcu?at43usb320 \
+ mmcu?avr35=mmcu?at90usb82 \
+ mmcu?avr35=mmcu?at90usb162 \
+ mmcu?avr35=mmcu?atmega8u2 \
+ mmcu?avr35=mmcu?atmega16u2 \
+ mmcu?avr35=mmcu?atmega32u2 \
+ mmcu?avr35=mmcu?attiny167 \
+ mmcu?avr4=mmcu?atmega8 \
+ mmcu?avr4=mmcu?atmega48 \
+ mmcu?avr4=mmcu?atmega48a \
+ mmcu?avr4=mmcu?atmega48p \
+ mmcu?avr4=mmcu?atmega88 \
+ mmcu?avr4=mmcu?atmega88a \
+ mmcu?avr4=mmcu?atmega88p \
+ mmcu?avr4=mmcu?atmega88pa \
+ mmcu?avr4=mmcu?atmega8515 \
+ mmcu?avr4=mmcu?atmega8535 \
+ mmcu?avr4=mmcu?atmega8hva \
+ mmcu?avr4=mmcu?at90pwm1 \
+ mmcu?avr4=mmcu?at90pwm2 \
+ mmcu?avr4=mmcu?at90pwm2b \
+ mmcu?avr4=mmcu?at90pwm3 \
+ mmcu?avr4=mmcu?at90pwm3b \
+ mmcu?avr4=mmcu?at90pwm81 \
+ mmcu?avr5=mmcu?atmega16 \
+ mmcu?avr5=mmcu?atmega16a \
+ mmcu?avr5=mmcu?atmega161 \
+ mmcu?avr5=mmcu?atmega162 \
+ mmcu?avr5=mmcu?atmega163 \
+ mmcu?avr5=mmcu?atmega164a \
+ mmcu?avr5=mmcu?atmega164p \
+ mmcu?avr5=mmcu?atmega165 \
+ mmcu?avr5=mmcu?atmega165a \
+ mmcu?avr5=mmcu?atmega165p \
+ mmcu?avr5=mmcu?atmega168 \
+ mmcu?avr5=mmcu?atmega168a \
+ mmcu?avr5=mmcu?atmega168p \
+ mmcu?avr5=mmcu?atmega169 \
+ mmcu?avr5=mmcu?atmega169a \
+ mmcu?avr5=mmcu?atmega169p \
+ mmcu?avr5=mmcu?atmega169pa \
+ mmcu?avr5=mmcu?atmega32 \
+ mmcu?avr5=mmcu?atmega323 \
+ mmcu?avr5=mmcu?atmega324a \
+ mmcu?avr5=mmcu?atmega324p \
+ mmcu?avr5=mmcu?atmega324pa \
+ mmcu?avr5=mmcu?atmega325 \
+ mmcu?avr5=mmcu?atmega325a \
+ mmcu?avr5=mmcu?atmega325p \
+ mmcu?avr5=mmcu?atmega3250 \
+ mmcu?avr5=mmcu?atmega3250a \
+ mmcu?avr5=mmcu?atmega3250p \
+ mmcu?avr5=mmcu?atmega328 \
+ mmcu?avr5=mmcu?atmega328p \
+ mmcu?avr5=mmcu?atmega329 \
+ mmcu?avr5=mmcu?atmega329a \
+ mmcu?avr5=mmcu?atmega329p \
+ mmcu?avr5=mmcu?atmega329pa \
+ mmcu?avr5=mmcu?atmega3290 \
+ mmcu?avr5=mmcu?atmega3290a \
+ mmcu?avr5=mmcu?atmega3290p \
+ mmcu?avr5=mmcu?atmega406 \
+ mmcu?avr5=mmcu?atmega64 \
+ mmcu?avr5=mmcu?atmega640 \
+ mmcu?avr5=mmcu?atmega644 \
+ mmcu?avr5=mmcu?atmega644a \
+ mmcu?avr5=mmcu?atmega644p \
+ mmcu?avr5=mmcu?atmega644pa \
+ mmcu?avr5=mmcu?atmega645 \
+ mmcu?avr5=mmcu?atmega645a \
+ mmcu?avr5=mmcu?atmega645p \
+ mmcu?avr5=mmcu?atmega6450 \
+ mmcu?avr5=mmcu?atmega6450a \
+ mmcu?avr5=mmcu?atmega6450p \
+ mmcu?avr5=mmcu?atmega649 \
+ mmcu?avr5=mmcu?atmega649a \
+ mmcu?avr5=mmcu?atmega649p \
+ mmcu?avr5=mmcu?atmega6490 \
+ mmcu?avr5=mmcu?atmega16hva \
+ mmcu?avr5=mmcu?atmega16hva2 \
+ mmcu?avr5=mmcu?atmega16hvb \
+ mmcu?avr5=mmcu?atmega32hvb \
+ mmcu?avr5=mmcu?atmega64hve \
+ mmcu?avr5=mmcu?at90can32 \
+ mmcu?avr5=mmcu?at90can64 \
+ mmcu?avr5=mmcu?at90pwm216 \
+ mmcu?avr5=mmcu?at90pwm316 \
+ mmcu?avr5=mmcu?atmega32c1 \
+ mmcu?avr5=mmcu?atmega64c1 \
+ mmcu?avr5=mmcu?atmega16m1 \
+ mmcu?avr5=mmcu?atmega32m1 \
+ mmcu?avr5=mmcu?atmega64m1 \
+ mmcu?avr5=mmcu?atmega16u4 \
+ mmcu?avr5=mmcu?atmega32u4 \
+ mmcu?avr5=mmcu?atmega32u6 \
+ mmcu?avr5=mmcu?at90scr100 \
+ mmcu?avr5=mmcu?at90usb646 \
+ mmcu?avr5=mmcu?at90usb647 \
+ mmcu?avr5=mmcu?at94k \
+ mmcu?avr5=mmcu?m3000 \
+ mmcu?avr51=mmcu?atmega128 \
+ mmcu?avr51=mmcu?atmega1280 \
+ mmcu?avr51=mmcu?atmega1281 \
+ mmcu?avr51=mmcu?atmega1284p \
+ mmcu?avr51=mmcu?atmega128rfa1 \
+ mmcu?avr51=mmcu?at90can128 \
+ mmcu?avr51=mmcu?at90usb1286 \
+ mmcu?avr51=mmcu?at90usb1287 \
+ mmcu?avr6=mmcu?atmega2560 \
+ mmcu?avr6=mmcu?atmega2561