[RFC] preliminary patch to move decimal float runtime to new libs

Janis Johnson janis187@us.ibm.com
Fri Aug 15 09:40:00 GMT 2008


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




More information about the Gcc-patches mailing list