Commit b588ae30 by Georg-Johann Lay Committed by Georg-Johann Lay

re PR target/54461 ([avr] add configure option for better AVR-Libc integration)

	PR target/54461
	* configure.ac (noconfigdirs,target=avr-*-*): Add target-newlib,
	target-libgloss if not configured --with-avrlibc=no.
	* configure: Regenerate.

libgcc/
	PR target/54461
	* config.host (tmake_file,host=avr-*-*): Add avr/t-avrlibc if
	not configured --with-avrlibc=no.
	* config/avr/t-avrlibc: New file.
	* Makefile.in (FPBIT_FUNCS): filter-out LIB2FUNCS_EXCLUDE.
	(DPBIT_FUNCS): Ditto.
	(TPBIT_FUNCS): Ditto.

gcc/
	PR target/54461
	* config.gcc (tm_file,target=avr-*-*): Add avr/avrlibc.h if
	not configured --with-avrlibc=no.
	(tm_defines,target=avr-*-*): Add WITH_AVRLIBC if not configured
	--with-avrlibc=no.
	* config/avr/avrlibc.h: New file.
	* config/avr/avr-c.c: Build-in define __WITH_AVRLIBC__ if
	not configured --with-avrlibc=no.
	* doc/invoke.texi (AVR Built-in Macros): Document __WITH_AVRLIBC__

From-SVN: r190967
parent 4efbb06f
2012-09-05 Georg-Johann Lay <avr@gjlay.de>
PR target/54461
* configure.ac (noconfigdirs,target=avr-*-*): Add target-newlib,
target-libgloss if not configured --with-avrlibc=no.
* configure: Regenerate.
2012-09-04 Jason Merrill <jason@redhat.com> 2012-09-04 Jason Merrill <jason@redhat.com>
* configure.ac: Fix --enable-languages=all. * configure.ac: Fix --enable-languages=all.
......
...@@ -3499,6 +3499,13 @@ case "${target}" in ...@@ -3499,6 +3499,13 @@ case "${target}" in
arm-*-riscix*) arm-*-riscix*)
noconfigdirs="$noconfigdirs ld target-libgloss" noconfigdirs="$noconfigdirs ld target-libgloss"
;; ;;
avr-*-rtems*)
;;
avr-*-*)
if test x${with_avrlibc} != xno; then
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
fi
;;
c4x-*-* | tic4x-*-*) c4x-*-* | tic4x-*-*)
noconfigdirs="$noconfigdirs target-libgloss" noconfigdirs="$noconfigdirs target-libgloss"
;; ;;
......
...@@ -891,6 +891,13 @@ case "${target}" in ...@@ -891,6 +891,13 @@ case "${target}" in
arm-*-riscix*) arm-*-riscix*)
noconfigdirs="$noconfigdirs ld target-libgloss" noconfigdirs="$noconfigdirs ld target-libgloss"
;; ;;
avr-*-rtems*)
;;
avr-*-*)
if test x${with_avrlibc} != xno; then
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
fi
;;
c4x-*-* | tic4x-*-*) c4x-*-* | tic4x-*-*)
noconfigdirs="$noconfigdirs target-libgloss" noconfigdirs="$noconfigdirs target-libgloss"
;; ;;
......
2012-09-05 Georg-Johann Lay <avr@gjlay.de>
PR target/54461
* config.gcc (tm_file,target=avr-*-*): Add avr/avrlibc.h if
not configured --with-avrlibc=no.
(tm_defines,target=avr-*-*): Add WITH_AVRLIBC if not configured
--with-avrlibc=no.
* config/avr/avrlibc.h: New file.
* config/avr/avr-c.c: Build-in define __WITH_AVRLIBC__ if
not configured --with-avrlibc=no.
* doc/invoke.texi (AVR Built-in Macros): Document __WITH_AVRLIBC__
2012-09-04 Teresa Johnson <tejohnson@google.com> 2012-09-04 Teresa Johnson <tejohnson@google.com>
* gcov-io.c (gcov_write_summary): Write out non-zero histogram * gcov-io.c (gcov_write_summary): Write out non-zero histogram
......
...@@ -892,6 +892,10 @@ avr-*-rtems*) ...@@ -892,6 +892,10 @@ avr-*-rtems*)
;; ;;
avr-*-*) avr-*-*)
tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/avr-stdint.h" tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/avr-stdint.h"
if test x${with_avrlibc} != xno; then
tm_file="${tm_file} ${cpu_type}/avrlibc.h"
tm_defines="${tm_defines} WITH_AVRLIBC"
fi
tmake_file="avr/t-avr avr/t-multilib" tmake_file="avr/t-avr avr/t-multilib"
use_gcc_stdint=wrap use_gcc_stdint=wrap
extra_gcc_objs="driver-avr.o avr-devices.o" extra_gcc_objs="driver-avr.o avr-devices.o"
......
...@@ -148,6 +148,10 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile) ...@@ -148,6 +148,10 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile)
cpp_define_formatted (pfile, "__AVR_SFR_OFFSET__=0x%x", cpp_define_formatted (pfile, "__AVR_SFR_OFFSET__=0x%x",
avr_current_arch->sfr_offset); 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 /* Define builtin macros so that the user can easily query if or if not
non-generic address spaces (and which) are supported. non-generic address spaces (and which) are supported.
This is only supported for C. For C++, a language extension is needed This is only supported for C. For C++, a language extension is needed
......
/* Definitions of target machine for the GNU compiler collection
for Atmel AVR micro controller if configured for AVR-Libc.
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
<http://www.gnu.org/licenses/>. */
/* 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"
...@@ -11496,6 +11496,10 @@ or @code{STS}. This offset depends on the device architecture and has ...@@ -11496,6 +11496,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 to be subtracted from the RAM address in order to get the
respective I/O@tie{}address. 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 @end table
@node Blackfin Options @node Blackfin Options
......
2012-09-05 Georg-Johann Lay <avr@gjlay.de>
PR target/54461
* config.host (tmake_file,host=avr-*-*): Add avr/t-avrlibc if
not configured --with-avrlibc=no.
* config/avr/t-avrlibc: New file.
* Makefile.in (FPBIT_FUNCS): filter-out LIB2FUNCS_EXCLUDE.
(DPBIT_FUNCS): Ditto.
(TPBIT_FUNCS): Ditto.
2012-09-04 Teresa Johnson <tejohnson@google.com> 2012-09-04 Teresa Johnson <tejohnson@google.com>
* libgcov.c (struct gcov_summary_buffer): New structure. * libgcov.c (struct gcov_summary_buffer): New structure.
......
...@@ -516,6 +516,10 @@ FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS)) ...@@ -516,6 +516,10 @@ FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS))
DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS)) DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS))
endif 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 fpbit-src := $(srcdir)/fp-bit.c
# Build FPBIT. # Build FPBIT.
......
...@@ -380,6 +380,9 @@ avr-*-rtems*) ...@@ -380,6 +380,9 @@ avr-*-rtems*)
avr-*-*) avr-*-*)
# Make HImode functions for AVR # Make HImode functions for AVR
tmake_file="${cpu_type}/t-avr t-fpbit" tmake_file="${cpu_type}/t-avr t-fpbit"
if test x${with_avrlibc} != xno; then
tmake_file="$tmake_file ${cpu_type}/t-avrlibc"
fi
tm_file="$tm_file avr/avr-lib.h" tm_file="$tm_file avr/avr-lib.h"
;; ;;
bfin*-elf*) bfin*-elf*)
......
# This file is used if not configured --with-avrlibc=no
#
# 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment