gcc/libgcc/config
Joseph Myers e610393ca7 Make soft-fp symbols into compat symbols for powerpc*-*-linux*.
Continuing preparations for implementing
TARGET_ATOMIC_ASSIGN_EXPAND_FENV for powerpc*-*-linux* soft-float and
e500, this patch makes soft-fp symbols used for those targets into
compat symbols when building with glibc >= 2.19, so that they are only
in shared libgcc for existing binaries requiring them, not in static
libgcc and not available for new links using shared libgcc.  Instead,
new links will get the symbols from libc, which has exported all of
them since 2.19.  (Actually all the symbols were exported from glibc
since 2.4, but some of them were exported by glibc as compat symbols
only - because of a confusion between deliberately present soft-fp
symbols and old accidental reexports of libgcc functions from glibc
2.0 - until 2.19.)

This allows user floating-point arithmetic to interoperate properly
with the state handled by <fenv.h> functions, whether software state
(for soft-float; TLS variables that don't form a public part of
glibc's ABI, so can only be accessed directly by functions within
glibc) or hardware state (for e500 - the copies of the soft-fp
functions in glibc being built to interoperate with the hardware state
whereas those in libgcc aren't).  Previously only glibc's own
functions, and those operations done in hardware on e500, properly
worked with that state, not direct floating-point arithmetic
operations that were implemented in software.

The intended next step is the actual TARGET_ATOMIC_ASSIGN_EXPAND_FENV
implementation.

The test of glibc >= 2.19 uses the same --with-glibc-version configure
option as in the gcc/ directory (but differently implemented; in gcc/
the fallback is to examine headers to find the version, while in
libgcc/ we can use compile for the target and so use AC_COMPUTE_INT).
The TARGET_ATOMIC_ASSIGN_EXPAND_FENV implementation will also only do
anything for glibc >= 2.19, as it will depend on generating calls to
functions __atomic_feholdexcept __atomic_feclearexcept
__atomic_feupdateenv that were added in 2.19 for that purpose (even
for e500, inline code is not readily possible because of the need to
make prctl syscalls from the implementation of these functions).

In order to make symbols compat symbols, the soft-fp files need
wrapping with generated wrappers including asm .symver directives,
which need to name the symbol version in question.  This is extracted
by an awk script from an intermediate stage of generating the .map
file for linking libgcc (that .map itself depends on the objects that
go into the library, so can't be used for this purpose as that would
mean a circular dependency); the extraction is not fully general
regarding the features available in .map generation, but suffices for
the present purpose.

It would make sense for hardfp.c symbols to be compat symbols as well
(in the cases where hardfp.c gets used, the functions in question
should not be used for new links), but this isn't required for the
present purpose, which is only concerned with ensuring that where
functions that should be affected by rounding modes or exceptions get
used, those functions are actually affected by those rounding modes or
exceptions.

Tested with no regressions with cross to powerpc-linux-gnu
(soft-float); c11-atomic-exec-5.c moves from UNSUPPORTED to FAIL, as
expected, now that floating-point arithmetic in user programs uses the
same state as <fenv.h> functions, so the fenv_exceptions test passes,
but TARGET_ATOMIC_ASSIGN_EXPAND_FENV isn't yet implemented.  (For
e500, c11-atomic-exec-5.c was already FAILing, as enough operations
worked with the hardware state for the fenv_exceptions effective
target test to pass.)  Also verified that the exported symbols and
versions are unchanged, with the expected symbols becoming compat
symbols at the same versions, and that with --with-glibc-version=2.18
the symbols remain normal rather than compat symbols.

	* Makefile.in (libgcc.map.in): New target.
	(libgcc.map): Use libgcc.map.in.
	* config/t-softfp (softfp_compat): New variable to be set by
	users.
	[$(softfp_compat) = y] (softfp_map_dep, softfp_set_symver): New
	variables.
	[$(softfp_compat) = y] (softfp_file_list): Use files in the build
	directory.
	[$(softfp_compat) = y] ($(softfp_file_list)): Generate wrappers
	that use compat symbols and disable all code unless [SHARED].
	* config/t-softfp-compat: New file.
	* find-symver.awk: New file.
	* configure.ac (--with-glibc-version): New configure option.
	(ppc_fp_compat): New variable set for powerpc*-*-linux*.
	* configure: Regenerate.
	* config.host (powerpc*-*-linux*): Use ${ppc_fp_compat} for
	soft-float and e500.

From-SVN: r216942
2014-10-30 17:28:30 +00:00
..
aarch64 Add crtfastmath for AArch64. 2014-09-09 15:53:01 +00:00
alpha Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
arc Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
arm bpabi.c (__gnu_uldivmod_helper): Remove. 2014-06-18 15:44:45 +00:00
avr lib1funcs.S (__do_global_dtors): Fix wrong code introduced with 2014-10-21 trunk r216525. 2014-10-22 10:40:30 +00:00
bfin Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
c6x Update soft-fp from glibc. 2014-10-09 19:21:30 +01:00
cr16 Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
cris float128-mul-underflow.c, [...]: New tests. 2014-02-12 23:24:49 +00:00
epiphany Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
fr30 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
frv Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
h8300 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
i386 Fix i386 FP_TRAPPING_EXCEPTIONS. 2014-09-18 13:00:21 +01:00
ia64 re PR target/63312 (FAIL: gcc.dg/torture/float128-exact-underflow.c -O0 execution test) 2014-09-22 12:08:03 +01:00
iq2000 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
libbid Remove LIBGCC2_HAS_?F_MODE target macros. 2014-09-12 13:05:18 +01:00
lm32 float128-mul-underflow.c, [...]: New tests. 2014-02-12 23:24:49 +00:00
m32c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
m32r Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
m68k Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
mcore Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
mep Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
microblaze Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
mips Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
mmix Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
moxie float128-mul-underflow.c, [...]: New tests. 2014-02-12 23:24:49 +00:00
msp430 t-msp430 (HOST_LIBGCC2_CFLAGS): Add -mhwmult=none. 2014-05-22 15:15:36 +00:00
nds32 float128-mul-underflow.c, [...]: New tests. 2014-02-12 23:24:49 +00:00
nios2 Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
pa linux-unwind.h (pa32_read_access_ok): New function. 2014-10-26 14:46:14 +00:00
pdp11 Append to HOST_LIBGCC2_CFLAGS in libgcc 2011-11-07 17:14:32 +00:00
rl78 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
rs6000 Optimize powerpc*-*-linux* e500 hardfp/soft-fp use. 2014-10-29 12:59:16 +00:00
rx Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
s390 s390.c (s390_emit_tpf_eh_return): Pass original return address as second parameter to __tpf_eh_return routine. 2014-07-30 16:26:15 +00:00
score float128-mul-underflow.c, [...]: New tests. 2014-02-12 23:24:49 +00:00
sh Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
sparc Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
spu Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
stormy16 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
tilegx TILE-Gx big endian support. 2014-02-24 15:08:00 +00:00
tilepro Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
v850 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
vax Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
vms Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
xtensa Use -fbuilding-libgcc for more target macros used in libgcc. 2014-09-05 13:03:46 +01:00
darwin-64.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
darwin-crt-tm.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
darwin-crt3.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
gmon-sol2.c gmon-sol2.c: Reindent. 2011-06-01 14:46:24 +00:00
gthr-lynx.h Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
gthr-rtems.h Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
gthr-vxworks.h Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
hardfp.c configure.ac (libgcc_cv_mips_hard_float): New. 2014-02-07 07:46:34 +00:00
libgcc-glibc.ver Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
libgcc-libsystem.ver Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
no-sfp-machine.h soft-fp: Move to ../libgcc. 2011-08-05 15:13:48 +00:00
no-unwind.h linux.h (MD_UNWIND_SUPPORT): Remove. 2011-06-03 18:30:39 +00:00
t-crtfm Remove obsolete Tru64 UNIX V5.1B support 2012-03-12 15:35:56 +00:00
t-crtstuff-pic Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
t-darwin * config/t-darwin (crt3.0): Remove work-around for fixed PR26840. 2012-07-14 13:50:59 +00:00
t-dfprules dfp-bit.c, dfp-bit.h: Move to ../libgcc. 2011-07-11 14:40:56 +00:00
t-eh-dw2-dip Makefile.in (UNWIND_H): Remove. 2011-08-05 14:37:48 +00:00
t-fdpbit Makefile.in (FPBIT_FUNCS, [...]): Remove. 2011-08-05 14:53:09 +00:00
t-fixedpoint-gnu-prefix Makefile.in (LIBGCC_VER_FIXEDPOINT_GNU_PREFIX): New. 2011-08-01 12:02:45 +00:00
t-fpbit Makefile.in (FPBIT_FUNCS, [...]): Remove. 2011-08-05 14:53:09 +00:00
t-freebsd-thread Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
t-gnu-prefix Makefile.in (LIBGCC_VER_FIXEDPOINT_GNU_PREFIX): New. 2011-08-01 12:02:45 +00:00
t-hardfp Optimize powerpc*-*-linux* e500 hardfp/soft-fp use. 2014-10-29 12:59:16 +00:00
t-hardfp-sfdf configure.ac (libgcc_cv_mips_hard_float): New. 2014-02-07 07:46:34 +00:00
t-libgcc-pic Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
t-libunwind Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
t-libunwind-elf Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
t-linux Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-openbsd-thread Append to HOST_LIBGCC2_CFLAGS in libgcc 2011-11-07 17:14:32 +00:00
t-rtems Consistently use t-rtems in libgcc 2011-11-07 17:12:33 +00:00
t-slibgcc Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
t-slibgcc-darwin Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-slibgcc-elf-ver Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-slibgcc-gld t-slibgcc-darwin: Move to ... 2011-06-01 14:39:17 +00:00
t-slibgcc-gld-nover Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-slibgcc-hpux re PR other/55274 (gcc build hangs on HP-UX 11.11) 2013-04-06 18:22:09 +00:00
t-slibgcc-libgcc Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
t-slibgcc-nolc-override Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-slibgcc-sld Don't build libgcc-unwind.map with --disable-shared (PR libgcc/61097) 2014-05-08 12:11:14 +00:00
t-slibgcc-vms Move shlib support to toplevel libgcc 2011-11-02 10:49:46 +00:00
t-softfp Make soft-fp symbols into compat symbols for powerpc*-*-linux*. 2014-10-30 17:28:30 +00:00
t-softfp-compat Make soft-fp symbols into compat symbols for powerpc*-*-linux*. 2014-10-30 17:28:30 +00:00
t-softfp-excl soft-fp: Move to ../libgcc. 2011-08-05 15:13:48 +00:00
t-softfp-sfdf soft-fp: Move to ../libgcc. 2011-08-05 15:13:48 +00:00
t-softfp-tf soft-fp: Move to ../libgcc. 2011-08-05 15:13:48 +00:00
t-sol2 Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
t-stack t-stack (LIB2ADD_ST): Set instead of LIB2ADD. 2010-10-01 19:31:49 +00:00
t-tls tls.m4 (GCC_CHECK_CC_TLS): New. 2007-07-06 07:00:46 -07:00
t-vxworks Append to HOST_LIBGCC2_CFLAGS in libgcc 2011-11-07 17:14:32 +00:00
unwind-dw2-fde-darwin.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
vxlib-tls.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00
vxlib.c Update copyright years in libgcc/ 2014-01-02 22:25:22 +00:00