From: gjl Date: Wed, 5 Sep 2012 12:19:47 +0000 (+0000) Subject: Backport from 2012-09-05 mainline r190697. X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=1809bf068e9dda923ad47fe4fb92676b0fe6622a Backport from 2012-09-05 mainline r190697. PR target/54461 * configure.ac (noconfigdirs,target=avr-*-*): Add target-newlib, target-libgloss if configured --with-avrlibc. * configure: Regenerate. libgcc/ Backport from 2012-09-05 mainline r190697. PR target/54461 * config.host (tmake_file,host=avr-*-*): Add avr/t-avrlibc if configured --with-avrlibc. * Makefile.in (FPBIT_FUNCS): filter-out LIB2FUNCS_EXCLUDE. (DPBIT_FUNCS): Ditto. (TPBIT_FUNCS): Ditto. * config/avr/t-avrlibc: New file. gcc/ Backport from 2012-09-05 mainline r190697. PR target/54461 * config.gcc (tm_file,target=avr-*-*): Add avr/avrlibc.h if configured --with-avrlibc. (tm_defines,target=avr-*-*): Add WITH_AVRLIBC if configured --with-avrlibc. * config/avr/avrlibc.h: New file. * config/avr/avr-c.c: Build-in define __WITH_AVRLIBC__ if configured --with-avrlibc. * doc/invoke.texi (AVR Built-in Macros): Document __WITH_AVRLIBC__ git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@190973 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/ChangeLog b/ChangeLog index feb54daef03..125f9ec9186 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-09-05 Georg-Johann Lay + + Backport from 2012-09-05 mainline r190697. + + PR target/54461 + * configure.ac (noconfigdirs,target=avr-*-*): Add target-newlib, + target-libgloss if configured --with-avrlibc. + * configure: Regenerate. + 2012-06-14 Release Manager * GCC 4.7.1 released. diff --git a/configure b/configure index 9136c24fbe9..911351626ef 100755 --- a/configure +++ b/configure @@ -3447,6 +3447,13 @@ case "${target}" in arm-*-riscix*) noconfigdirs="$noconfigdirs ld target-libgloss" ;; + avr-*-rtems*) + ;; + avr-*-*) + if test x${with_avrlibc} = xyes; then + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + fi + ;; c4x-*-* | tic4x-*-*) noconfigdirs="$noconfigdirs target-libgloss" ;; diff --git a/configure.ac b/configure.ac index 92e6db39851..40aeeee549b 100644 --- a/configure.ac +++ b/configure.ac @@ -873,6 +873,13 @@ case "${target}" in arm-*-riscix*) noconfigdirs="$noconfigdirs ld target-libgloss" ;; + avr-*-rtems*) + ;; + avr-*-*) + if test x${with_avrlibc} = xyes; then + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + fi + ;; c4x-*-* | tic4x-*-*) noconfigdirs="$noconfigdirs target-libgloss" ;; diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28f8c13de3c..88f56103740 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2012-09-05 Georg-Johann Lay + + Backport from 2012-09-05 mainline r190697. + + PR target/54461 + * config.gcc (tm_file,target=avr-*-*): Add avr/avrlibc.h if + configured --with-avrlibc. + (tm_defines,target=avr-*-*): Add WITH_AVRLIBC if configured + --with-avrlibc. + * config/avr/avrlibc.h: New file. + * config/avr/avr-c.c: Build-in define __WITH_AVRLIBC__ if + configured --with-avrlibc. + * doc/invoke.texi (AVR Built-in Macros): Document __WITH_AVRLIBC__ + 2012-09-05 Bin Cheng Backport from 2012-09-04 mainline r190919 diff --git a/gcc/config.gcc b/gcc/config.gcc index aef6ff9fbac..0034c26d2d2 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -941,6 +941,10 @@ avr-*-rtems*) ;; avr-*-*) tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/avr-stdint.h" + if test x${with_avrlibc} = xyes; then + tm_file="${tm_file} ${cpu_type}/avrlibc.h" + tm_defines="${tm_defines} WITH_AVRLIBC" + fi tmake_file="avr/t-avr avr/t-multilib" use_gcc_stdint=wrap extra_gcc_objs="driver-avr.o avr-devices.o" diff --git a/gcc/config/avr/avr-c.c b/gcc/config/avr/avr-c.c index d689fa02380..6eb0ebaed5a 100644 --- a/gcc/config/avr/avr-c.c +++ b/gcc/config/avr/avr-c.c @@ -148,6 +148,10 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile) cpp_define_formatted (pfile, "__AVR_SFR_OFFSET__=0x%x", avr_current_arch->sfr_offset); +#ifdef WITH_AVRLIBC + cpp_define (pfile, "__WITH_AVRLIBC__"); +#endif /* WITH_AVRLIBC */ + /* Define builtin macros so that the user can easily query if or if not non-generic address spaces (and which) are supported. This is only supported for C. For C++, a language extension is needed diff --git a/gcc/config/avr/avrlibc.h b/gcc/config/avr/avrlibc.h new file mode 100644 index 00000000000..13fda0ff47e --- /dev/null +++ b/gcc/config/avr/avrlibc.h @@ -0,0 +1,31 @@ +/* Definitions of target machine for the GNU compiler collection + for Atmel AVR micro controller. + Copyright (C) 2012 + Free Software Foundation, Inc. + Contributed by Georg-Johann Lay (avr@gjlay.de) + +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 +. */ + +/* AVR-Libc implements functions from libgcc.a in libm.a, see PR54461. */ + +#undef LIBGCC_SPEC +#define LIBGCC_SPEC \ + "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lgcc -lm }}}}}" + +#undef LINK_GCC_C_SEQUENCE_SPEC +#define LINK_GCC_C_SEQUENCE_SPEC \ + "--start-group %G %L --end-group" diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a96cfa8bcd2..98959be6501 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -11459,6 +11459,10 @@ or @code{STS}. This offset depends on the device architecture and has to be subtracted from the RAM address in order to get the respective I/O@tie{}address. +@item __WITH_AVRLIBC__ +The compiler is configured to be used together with AVR-Libc. +See the @code{--with-avrlibc} configure option. + @end table @node Blackfin Options diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index ab6951bd371..e0b52e153f0 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,15 @@ +2012-09-05 Georg-Johann Lay + + Backport from 2012-09-05 mainline r190697. + + PR target/54461 + * config.host (tmake_file,host=avr-*-*): Add avr/t-avrlibc if + configured --with-avrlibc. + * config/avr/t-avrlibc: New file. + * Makefile.in (FPBIT_FUNCS): filter-out LIB2FUNCS_EXCLUDE. + (DPBIT_FUNCS): Ditto. + (TPBIT_FUNCS): Ditto. + 2012-08-21 Ian Lance Taylor * config/i386/morestack.S (__morestack_non_split): Increase amount diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index bcd92848b96..f38d5b4a250 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -517,6 +517,10 @@ FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS)) DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS)) endif +FPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(FPBIT_FUNCS)) +DPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(DPBIT_FUNCS)) +TPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(TPBIT_FUNCS)) + fpbit-src := $(srcdir)/fp-bit.c # Build FPBIT. diff --git a/libgcc/config.host b/libgcc/config.host index c853a1274bd..ef9791bffd6 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -391,6 +391,9 @@ avr-*-rtems*) avr-*-*) # Make HImode functions for AVR tmake_file="${cpu_type}/t-avr t-fpbit" + if test x${with_avrlibc} = xyes; then + tmake_file="$tmake_file ${cpu_type}/t-avrlibc" + fi tm_file="$tm_file avr/avr-lib.h" ;; bfin*-elf*) diff --git a/libgcc/config/avr/t-avrlibc b/libgcc/config/avr/t-avrlibc new file mode 100644 index 00000000000..543cdf6d89f --- /dev/null +++ b/libgcc/config/avr/t-avrlibc @@ -0,0 +1,66 @@ +# This file is used with --with-avrlibc=yes +# +# AVR-Libc comes with hand-optimized float routines. +# For historical reasons, these routines live in AVR-Libc +# and not in libgcc and use the same function names like libgcc. +# To get the best support, i.e. always use the routines from +# AVR-Libc, we remove these routines from libgcc. +# +# See also PR54461. +# +# +# Arithmetic: +# __addsf3 __subsf3 __divsf3 __mulsf3 __negsf2 +# +# Comparison: +# __cmpsf2 __unordsf2 +# __eqsf2 __lesf2 __ltsf2 __nesf2 __gesf2 __gtsf2 +# +# Conversion: +# __fixsfdi __fixunssfdi __floatdisf __floatundisf +# __fixsfsi __fixunssfsi __floatsisf __floatunsisf +# +# +# These functions are contained in modules: +# +# _addsub_sf.o: __addsf3 __subsf3 +# _mul_sf.o: __mulsf3 +# _div_sf.o: __divsf3 +# _negate_sf.o: __negsf2 +# +# _compare_sf.o: __cmpsf2 +# _unord_sf.o: __unordsf2 +# _eq_sf.o: __eqsf2 +# _ne_sf.o: __nesf2 +# _ge_sf.o: __gesf2 +# _gt_sf.o: __gtsf2 +# _le_sf.o: __lesf2 +# _lt_sf.o: __ltsf2 +# +# _fixsfdi.o: __fixsfdi +# _fixunssfdi.o: __fixunssfdi +# _fixunssfsi.o: __fixunssfsi +# _floatdisf.o: __floatdisf +# _floatundisf.o: __floatundisf +# _sf_to_si.o: __fixsfsi +# _si_to_sf.o: __floatsisf +# _usi_to_sf.o: __floatunsisf + + +# SFmode +LIB2FUNCS_EXCLUDE += \ + _addsub_sf \ + _negate_sf \ + _mul_sf _div_sf \ + \ + _compare_sf \ + _unord_sf \ + _eq_sf _ne_sf \ + _gt_sf _ge_sf \ + _lt_sf _le_sf \ + \ + _si_to_sf _sf_to_si \ + _usi_to_sf _sf_to_usi \ + _fixunssfsi _fixsfdi \ + _fixunssfdi \ + _floatdisf _floatundisf