This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC] preliminary patch to move decimal float runtime to new libs
- From: Andreas Krebbel1 <Andreas dot Krebbel at de dot ibm dot com>
- To: janis187 at us dot ibm dot com
- Cc: bje at au1 dot ibm dot com, gcc-patches at gcc dot gnu dot org, hjl dot tools at gmail dot com
- Date: Fri, 15 Aug 2008 15:00:26 +0200
- Subject: Re: [RFC] preliminary patch to move decimal float runtime to new libs
- References: <1218771843.6001.13.camel@janis-laptop>
Hello Janis,
do we need a separate shared library for the DFP functions? Since all these
function are already part of libgcc.a why shouldn't we simply put them into
libgcc_s.so?
Bye,
-Andreas-
> [RFC] preliminary patch to move decimal float runtime to new libs
>
> I've made progress on moving decimal float runtime support from libgcc.a
> to libgcc_dfp.a and building a new shared library, libgcc_dfp.so.1.
> The patch works sometimes but still has problems and so is not yet ready
> for a full review, but I'd appreciate comments on the general approach.
> I'll be out of touch until Tuesday.
>
> The new libraries are installed in the same locations as libgcc.a
> (inst_libdir) and libgcc_s.a (inst_slibdir). They are only built for
> targets that support decimal float and when that support is enabled.
> It doesn't quite work yet, but the the specs will add -lgcc_dfp to
> the link line, with --as-needed, when decimal float support is enabled.
>
> 2008-08-14 Janis Johnson <janis187@us.ibm.com>
>
> libgcc/
> * Makefile.in (libgcc_dfp.a, libgcc_dfp$(SHLIB_EXT),
> install_shared-libgcc_dfp, install-libgcc_dfp) New targets.
> gcc/
> * gcc.c (init_spec): Use dfp libraries if they were built.
> * config.gcc: Add t-libgccdfp-elf to tmake_file for targets
> that support decimal float; set flag to build and use
> runtime decimal float support, to be used in init_spec.
> * Makefile.in (libgcc.mvars): Pass along new variables for
> shared decimal float library.
> * config/t-libgccdfp-elf (SHLIBGCCDFP_SOVERSION, SHLIBGCCDFP_SONAME,
> SHLIBGCCDFP_LINK, SHLIBGCCDFP_INSTALL): New file.
> * config/t-libgccdfp: New file.
>
> Index: libgcc/Makefile.in
> ===================================================================
> --- libgcc/Makefile.in (revision 139039)
> +++ libgcc/Makefile.in (working copy)
> @@ -1,6 +1,6 @@
> # Makefile.in
>
> -# Copyright (C) 2005, 2006 Free Software Foundation
> +# Copyright (C) 2005, 2006, 2008 Free Software Foundation
> #
> # This file is part of GCC.
> #
> @@ -122,6 +122,7 @@ clean:
> -rm -f *.a
> -rm -f libunwind$(SHLIB_EXT)
> -rm -f libgcc_s*
> + -rm -f libgcc_dfp*
> @$(MULTICLEAN) multi-clean DO=clean
> distclean: clean
> @$(MULTICLEAN) multi-clean DO=distclean
> @@ -195,6 +196,7 @@ DECNUMINC = -I$(srcdir)/../libdecnumber/
> endif
> else
> DECNUMINC =
> +SHLIBGCCDFP_LINK =
> endif
>
> # Specify the directories to be searched for header files.
> @@ -252,6 +254,12 @@ ifeq ($(enable_shared),yes)
> install-libunwind = install-libunwind
> endif
>
> + # If the target supports decimal float and it is enabled, build the
> + # shared library with decimal float runtime support.
> + ifneq ($(SHLIBGCCDFP_LINK),)
> + install-shared-libgcc_dfp = install-shared-libgcc_dfp
> + endif
> +
> # For -fvisibility=hidden. We need both a -fvisibility=hidden on
> # the command line, and a #define to prevent libgcc2.h etc from
> # overriding that with #pragmas.
> @@ -277,6 +285,7 @@ else
> iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-
> object.mk,$(iter-items))
> vis_hide =
> gen-hide-list = echo > \$@
> +SHLIBGCCDFP_LINK =
> endif
>
> ifneq ($(EXTRA_PARTS),)
> @@ -468,6 +477,8 @@ endif
> # Build decimal floating point support.
> ifeq ($(decimal_float),yes)
>
> +install-libgcc_dfp = install-libgcc_dfp
> +
> # If $DFP_ENABLE is set, then we want all data type sizes.
> ifneq ($(DFP_ENABLE),)
> D32PBIT = 1
> @@ -475,6 +486,7 @@ D64PBIT = 1
> D128PBIT = 1
> endif
>
> +
> dfp-filenames =
> ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
> ifeq ($(enable_decimal_float),bid)
> @@ -494,6 +506,7 @@ dfp-filenames += decContext decNumber de
> endif
> endif
>
> +# Build the static versions of basic decimal float support.
> dfp-objects = $(patsubst %,%$(objext),$(dfp-filenames))
> ifeq ($(enable_decimal_float),bid)
> $(dfp-objects): %$(objext): $(srcdir)/config/libbid/%.c
> @@ -501,7 +514,19 @@ else
> $(dfp-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
> endif
> $(gcc_compile) -c $<
> -libgcc-objects += $(dfp-objects)
> +libgcc-dfp-objects += $(dfp-objects)
> +
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +# Build the shared versions of basic decimal float support.
> +dfp-s-objects = $(patsubst %,%_s$(objext),$(dfp-filenames))
> +ifeq ($(enable_decimal_float),bid)
> +$(dfp-s-objects): %_s$(objext): $(srcdir)/config/libbid/%.c
> +else
> +$(dfp-s-objects): %_s$(objext): $(srcdir)/../libdecnumber/%.c
> +endif
> + $(gcc_s_compile) -c $<
> +libgcc-dfp-s-objects += $(dfp-s-objects)
> +endif
>
> decbits-filenames =
> ifneq ($(enable_decimal_float),bid)
> @@ -518,6 +543,7 @@ decbits-filenames += decimal128
> endif
> endif
>
> +# Build the static version of another set of basic support.
> decbits-objects = $(patsubst %,%$(objext),$(decbits-filenames))
> ifeq ($(enable_decimal_float),bid)
> $(decbits-objects): %$(objext): $(srcdir)/config/libbid/%.c
> @@ -525,7 +551,19 @@ else
> $(decbits-objects): %$(objext): $(srcdir)/../libdecnumber/$
> (enable_decimal_float)/%.c
> endif
> $(gcc_compile) -c $<
> -libgcc-objects += $(decbits-objects)
> +libgcc-dfp-objects += $(decbits-objects)
> +
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +# Build the shared version of that second set of basic support.
> +decbits-s-objects = $(patsubst %,%_s$(objext),$(decbits-filenames))
> +ifeq ($(enable_decimal_float),bid)
> +$(decbits-s-objects): %_s$(objext): $(srcdir)/config/libbid/%.c
> +else
> +$(decbits-s-objects): %_s$(objext): $(srcdir)/../libdecnumber/$
> (enable_decimal_float)/%.c
> +endif
> + $(gcc_s_compile) -c $<
> +libgcc-dfp-s-objects += $(decbits-s-objects)
> +endif
>
> # Next build individual support functions.
> ifeq ($(enable_decimal_float),bid)
> @@ -542,6 +580,7 @@ D128PBIT_FUNCS:=$(filter-out _plus_td _m
> endif
> endif
>
> +# Build the static objects for 32-bit functions.
> ifneq ($(D32PBIT),)
> d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
> ifeq ($(enable_decimal_float),bid)
> @@ -550,10 +589,23 @@ else
> $(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
> endif
> $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
> -libgcc-objects += $(d32pbit-o)
> +libgcc-dfp-objects += $(d32pbit-o)
> +
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +# Build the shared objects for 32-bit functions.
> +d32pbit-s-o = $(patsubst %,%_s$(objext),$(D32PBIT_FUNCS))
> +ifeq ($(enable_decimal_float),bid)
> +$(d32pbit-s-o): %_s$(objext): $(srcdir)/config/libbid/%.c
> +else
> +$(d32pbit-s-o): %_s$(objext): $(gcc_srcdir)/config/dfp-bit.c
> +endif
> + $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
> +libgcc-dfp-s-objects += $(d32pbit-s-o)
> +endif
> endif
>
> ifneq ($(D64PBIT),)
> +# Build the static objects for 64-bit functions.
> d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
> ifeq ($(enable_decimal_float),bid)
> $(d64pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
> @@ -561,10 +613,23 @@ else
> $(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
> endif
> $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
> -libgcc-objects += $(d64pbit-o)
> +libgcc-dfp-objects += $(d64pbit-o)
> +
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +# Build the static objects for 64-bit functions.
> +d64pbit-s-o = $(patsubst %,%_s$(objext),$(D64PBIT_FUNCS))
> +ifeq ($(enable_decimal_float),bid)
> +$(d64pbit-s-o): %_s$(objext): $(srcdir)/config/libbid/%.c
> +else
> +$(d64pbit-s-o): %_s$(objext): $(gcc_srcdir)/config/dfp-bit.c
> +endif
> + $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
> +libgcc-dfp-s-objects += $(d64pbit-s-o)
> +endif
> endif
>
> ifneq ($(D128PBIT),)
> +# Build the static objects for 128-bit functions.
> d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
> ifeq ($(enable_decimal_float),bid)
> $(d128pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
> @@ -572,7 +637,18 @@ else
> $(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
> endif
> $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
> -libgcc-objects += $(d128pbit-o)
> +libgcc-dfp-objects += $(d128pbit-o)
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +# Build the shared objects for 128-bit functions.
> +d128pbit-s-o = $(patsubst %,%_s$(objext),$(D128PBIT_FUNCS))
> +ifeq ($(enable_decimal_float),bid)
> +$(d128pbit-s-o): %_s$(objext): $(srcdir)/config/libbid/%.c
> +else
> +$(d128pbit-s-o): %_s$(objext): $(gcc_srcdir)/config/dfp-bit.c
> +endif
> + $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
> +libgcc-dfp-s-objects += $(d128pbit-s-o)
> +endif
> endif
>
> endif
> @@ -731,8 +807,9 @@ libgcc.a: $(libgcc-objects)
> libgcov.a: $(libgcov-objects)
> libunwind.a: $(libunwind-objects)
> libgcc_eh.a: $(libgcc-eh-objects)
> +libgcc_dfp.a: $(libgcc-dfp-objects)
>
> -libgcc.a libgcov.a libunwind.a libgcc_eh.a:
> +libgcc.a libgcov.a libunwind.a libgcc_eh.a libgcc_dfp.a:
> -rm -f $@
>
> objects="$(objects)"; \
> @@ -760,6 +837,14 @@ all: libunwind$(SHLIB_EXT)
> endif
> endif
>
> +ifeq ($(decimal_float),yes)
> +all: libgcc_dfp.a
> +ifneq ($(SHLIBGCCDFP_LINK),)
> +all: libgcc_dfp$(SHLIB_EXT)
> +libgcc_dfp$(SHLIB_EXT): libgcc_s$(SHLIB_EXT)
> +endif
> +endif
> +
> ifeq ($(enable_shared),yes)
>
> # Map-file generation.
> @@ -802,6 +887,19 @@ libunwind$(SHLIB_EXT): $(libunwind-s-obj
> @shlib_base_name@,libunwind,$(subst \
> @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK))))))
>
> +libgcc_dfp$(SHLIB_EXT): $(libgcc-dfp-s-objects) $(extra-parts)
> + # @multilib_flags@ is still needed because this may use
> + # $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
> + # @multilib_dir@ is not really necessary, but sometimes it has
> + # more uses than just a directory name.
> + $(mkinstalldirs) $(MULTIDIR)
> + $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
> + @multilib_dir@,$(MULTIDIR),$(subst \
> + @shlib_objs@,$(objects),$(subst \
> + @shlib_base_name@,libgcc_dfp,$(subst \
> + @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
> + @shlib_slibdir@,$(shlib_slibdir),$(SHLIBGCCDFP_LINK)))))))
> +
> endif
>
> # Build the standard GCC startfiles and endfiles.
> @@ -920,6 +1018,13 @@ install-libunwind:
> @shlib_base_name@,libunwind,$(subst \
> @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL))))
>
> +install-shared-libgcc_dfp:
> + $(mkinstalldirs) $(DESTDIR)$(inst_slibdir)
> +
> + $(subst @multilib_dir@,$(MULTIDIR),$(subst \
> + @shlib_base_name@,libgcc_dfp,$(subst \
> + @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBGCCDFP_INSTALL))))
> +
> install-shared:
> $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
>
> @@ -931,7 +1036,14 @@ install-shared:
> @shlib_base_name@,libgcc_s,$(subst \
> @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
>
> -install-leaf: $(install-shared) $(install-libunwind)
> +install-libgcc_dfp:
> + $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
> +
> + $(INSTALL_DATA) libgcc_dfp.a $(DESTDIR)$(inst_libdir)/
> + chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_dfp.a
> + $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_dfp.a
> +
> +install-leaf: $(install-shared) $(install-libunwind) $(install-
> shared-libgcc_dfp) $(install-libgcc_dfp)
> $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
>
> $(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
> @@ -950,7 +1062,7 @@ install-leaf: $(install-shared) $(instal
> install: install-leaf
> @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
>
> -.PHONY: install install-shared install-libunwind
> +.PHONY: install install-shared install-libunwind install-libgcc_dfp
> install-shared-libgcc_dfp
>
> # Don't export variables to the environment, in order to not confuse
> # configure.
> Index: gcc/gcc.c
> ===================================================================
> --- gcc/gcc.c (revision 139039)
> +++ gcc/gcc.c (working copy)
> @@ -1779,12 +1779,18 @@ init_spec (void)
> if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
> {
> init_gcc_specs (&obstack,
> - "-lgcc_s"
> +#ifdef USE_LIBGCCDFP
> + "-lgcc_dfp"
> +#endif
> + " -lgcc_s"
> #ifdef USE_LIBUNWIND_EXCEPTIONS
> " -lunwind"
> #endif
> ,
> - "-lgcc",
> +#ifdef USE_LIBGCCDFP
> + "-lgcc_dfp"
> +#endif
> + " -lgcc",
> "-lgcc_eh"
> #ifdef USE_LIBUNWIND_EXCEPTIONS
> # ifdef HAVE_LD_STATIC_DYNAMIC
> Index: gcc/config.gcc
> ===================================================================
> --- gcc/config.gcc (revision 139039)
> +++ gcc/config.gcc (working copy)
> @@ -1114,7 +1114,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfree
> i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/linux.h
> knetbsd-gnu.h i386/knetbsd-gnu.h" ;;
> i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/linux.h
> kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
> esac
> - tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-
> crtfm t-dfprules"
> + tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-
> crtfm t-dfprules t-libgccdfp-elf"
> ;;
> x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
> tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h
> svr4.h linux.h \
> @@ -1123,7 +1123,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu
> x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;;
> x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;;
> esac
> - tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-
> crtpc i386/t-crtfm t-dfprules"
> + tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-
> crtpc i386/t-crtfm t-dfprules t-libgccdfp-elf"
> ;;
> i[34567]86-*-gnu*)
> ;;
> @@ -1717,7 +1717,7 @@ powerpc64-*-linux*)
> tm_file="rs6000/secureplt.h ${tm_file}"
> fi
> extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
> - tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-
> ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
> + tmake_file="t-dfprules t-libgccdfp-elf rs6000/t-fprules $
> {tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-
> softfp soft-fp/t-softfp"
> ;;
> powerpc64-*-gnu*)
> tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h
> gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h"
> @@ -1799,7 +1799,7 @@ powerpc-*-linux*altivec*)
> powerpc-*-linux*spe*)
> tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h
> rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h rs6000/e500.h"
> extra_options="${extra_options} rs6000/sysv4.opt"
> - tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp
> soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
> + tmake_file="t-dfprules t-libgccdfp-elf rs6000/t-fprules rs6000/
> t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file}
> rs6000/t-ppccomm"
> ;;
> powerpc-*-linux*paired*)
> tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h
> rs6000/sysv4.h rs6000/linux.h rs6000/750cl.h"
> @@ -1809,7 +1809,7 @@ powerpc-*-linux*paired*)
> powerpc-*-linux*)
> tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h
rs6000/sysv4.h"
> extra_options="${extra_options} rs6000/sysv4.opt"
> - tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp
> soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
> + tmake_file="t-dfprules t-libgccdfp-elf rs6000/t-fprules rs6000/
> t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file}
> rs6000/t-ppccomm"
> case ${enable_targets}:${cpu_is_64bit} in
> *powerpc64* | all:* | *:yes)
> if test x$cpu_is_64bit = xyes; then
> @@ -1934,7 +1934,7 @@ rs6000-ibm-aix[6789].* | powerpc-ibm-aix
> ;;
> s390-*-linux*)
> tm_file="s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h"
> - tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux"
> + tmake_file="${tmake_file} t-dfprules t-libgccdfp-elf s390/t-
> crtstuff s390/t-linux"
> ;;
> s390x-*-linux*)
> tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h
> linux.h s390/linux.h"
> @@ -1942,7 +1942,7 @@ s390x-*-linux*)
> md_file=s390/s390.md
> extra_modes=s390/s390-modes.def
> out_file=s390/s390.c
> - tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-
> linux s390/t-linux64"
> + tmake_file="${tmake_file} t-dfprules t-libgccdfp-elf s390/t-
> crtstuff s390/t-linux s390/t-linux64"
> ;;
> s390x-ibm-tpf*)
> tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h
s390/tpf.h"
> @@ -2554,6 +2554,13 @@ if test x$with_schedule = x; then
> esac
> fi
>
> +# Flag whether to build and use runtime decimal float support.
> +case ${enable_decimal_float} in
> + yes | dpd | bid)
> + tmake_file="${tmake_file} t-libgccdfp"
> + ;;
> +esac
> +
> # Validate and mark as valid any --with options supported
> # by this target. In order to use a particular --with option
> # you must list it in supported_defaults; validating the value
> Index: gcc/Makefile.in
> ===================================================================
> --- gcc/Makefile.in (revision 139039)
> +++ gcc/Makefile.in (working copy)
> @@ -1671,6 +1671,10 @@ libgcc.mvars: config.status Makefile $(L
> echo D64PBIT_FUNCS='$(D64PBIT_FUNCS)' >> tmp-libgcc.mvars
> echo D128PBIT='$(D128PBIT)' >> tmp-libgcc.mvars
> echo D128PBIT_FUNCS='$(D128PBIT_FUNCS)' >> tmp-libgcc.mvars
> + echo SHLIBGCCDFP_SOVERSION = '$(SHLIBGCCDFP_SOVERSION)' >> tmp-
> libgcc.mvars
> + echo SHLIBGCCDFP_SONAME = '$(SHLIBGCCDFP_SONAME)' >> tmp-libgcc.mvars
> + echo SHLIBGCCDFP_LINK = '$(SHLIBGCCDFP_LINK)' >> tmp-libgcc.mvars
> + echo SHLIBGCCDFP_INSTALL = '$(SHLIBGCCDFP_INSTALL)' >>
tmp-libgcc.mvars
> echo GCC_EXTRA_PARTS = '$(GCC_EXTRA_PARTS)' >> tmp-libgcc.mvars
> echo SHLIB_LINK = '$(subst $(GCC_FOR_TARGET),$$(GCC_FOR_TARGET),
> $(SHLIB_LINK))' >> tmp-libgcc.mvars
> echo SHLIB_INSTALL = '$(SHLIB_INSTALL)' >> tmp-libgcc.mvars
> Index: gcc/config/t-libgccdfp-elf
> ===================================================================
> --- gcc/config/t-libgccdfp-elf (revision 0)
> +++ gcc/config/t-libgccdfp-elf (revision 0)
> @@ -0,0 +1,27 @@
> +# Build libgccdfp for ELF with the GNU linker.
> +
> +SHLIBGCCDFP_SOVERSION = 1
> +SHLIBGCCDFP_SONAME = @shlib_base_name@.so.$(SHLIBGCCDFP_SOVERSION)
> +
> +SHLIBGCCDFP_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared \
> + -nodefaultlibs -Wl,-h,$(SHLIBGCCDFP_SONAME) \
> + -Wl,-z,text -Wl,-z,defs -o $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME).tmp \
> + @multilib_flags@ $(SHLIB_OBJS) -lc -L. -lgcc_s && \
> + rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
> + if [ -f $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME) ]; then \
> + mv -f $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME) \
> + $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME).backup; \
> + else true; fi && \
> + mv $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME).tmp \
> + $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME) && \
> + $(LN_S) $(SHLIBGCCDFP_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
> +
> +# $(slibdir) double quoted to protect it from expansion while building
> +# libgcc.mk. We want this delayed until actual install time.
> +SHLIBGCCDFP_INSTALL = \
> + $$(SHELL) $$(srcdir)/mkinstalldirs $$(DESTDIR)$$(slibdir)$
> (SHLIB_SLIBDIR_QUAL); \
> + $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIBGCCDFP_SONAME) \
> + $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIBGCCDFP_SONAME);
\
> + rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
> + $(LN_S) $(SHLIBGCCDFP_SONAME) \
> + $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
> Index: gcc/config/t-libgccdfp
> ===================================================================
> --- gcc/config/t-libgccdfp (revision 0)
> +++ gcc/config/t-libgccdfp (revision 0)
> @@ -0,0 +1,2 @@
> +# Support a separate library for runtime decimal float support.
> +T_CFLAGS += -DUSE_LIBGCCDFP
>
>