From: Daniel Jacobowitz <drow@false.org>
To: Paolo Bonzini <paolo.bonzini@lu.unisi.ch>
Cc: gcc-patches@gcc.gnu.org, Mark Mitchell <mark@codesourcery.com>
Subject: Re: libgcc move to the top level
Date: Tue, 19 Dec 2006 19:18:00 -0000 [thread overview]
Message-ID: <20061219191730.GA32355@nevyn.them.org> (raw)
In-Reply-To: <45880EB3.7070101@lu.unisi.ch>
On Tue, Dec 19, 2006 at 05:09:23PM +0100, Paolo Bonzini wrote:
> >2006-12-16 Daniel Jacobowitz <dan@codesourcery.com>
> >
> > * Makefile.def (target_modules): Add libgcc.
> > (lang_env_dependencies): Remove default items. Use no_c and no_gcc.
>
> We actually don't need lang_env_dependencies at all. I'll work to move
> these into target_modules (using new attributes like libstdcxx_depend,
> no_libc_depend and no_libgcc_depend respectively), but it's ok to do it
> after this is committed.
Well, I actually think it's clearer this way, but it's definitely not a
big deal either way.
> For the toplevel libgcc build machinery, as I told you privately I'm
> worried that moving config.gcc fragments into the libgcc config.host,
> and at the same time preserving the correct case ordering, will be a
> nightmare. So I think that even the first version of libgcc;s
> config.host should be based on config.gcc and should already list the
> cases in the correct order. This way, moving stuff from gcc to libgcc
> will be much easier.
>
> I'll review the toplevel libgcc build machinery as soon as I get an
> updated patch with this change.
OK, see attached.
> Also, right now, there is practically no example of how to move the
> EXTRA_PARTS to the libgcc directory. I'd appreciate if at least one
> arch maintainer would help you moving their arch's stuff to the libgcc
> directory. Of course it's okay if you post one such example soon after
> committing, or even better before (anyway, this would be a separate
> commit from this already huge patch).
Good job picking out this issue :-) Indeed, the first target to move
EXTRA_PARTS may not be trivial because of the way we currently recurse
into the gcc subdirectory to build them. I think that to do this, we
will have to build extra startfiles twice, once in the libgcc objdir
and once in the gcc objdir, until all targets are migrated.
That's not too difficult, but it will be a little touchy. I'll try it
later - I'd prefer to do that next after committing libgcc.
--
Daniel Jacobowitz
CodeSourcery
2006-12-19 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.def (target_modules): Add libgcc.
(lang_env_dependencies): Remove default items. Use no_c and no_gcc.
* Makefile.tpl (clean-target-libgcc): Delete.
(configure-target-[+module+]): Emit --disable-bootstrap dependencies
on gcc even for bootstrapped modules. Rewrite handling of
lang_env_dependencies to loop over target_modules.
* configure.in (target_libraries): Add target-libgcc.
* Makefile.in, configure: Regenerated.
2006-12-19 Daniel Jacobowitz <dan@codesourcery.com>
* config.gcc: Mention libgcc/config.host.
* Makefile.in: Update comments mentioning libgcc.
(LIBGCC, INSTALL_LIBGCC, GCC_PARTS, mklibgcc): Delete.
(all.cross, start.encap, rest.encap, rest.cross): Update
dependencies for libgcc move.
(libgcc.mk, LIBGCC_DEPS, libgcov.a, libgcc.a, stmp-multilib)
(clean-target, clean-target-libgcc): Delete.
(srcdirify): New macro.
(libgcc-support, libgcc.mvars): New rules.
(distclean): Remove mention of mklibgcc.
(install): Don't reference INSTALL_LIBGCC.
(install-common): Don't reference EXTRA_PARTS.
(install-libgcc, install-multilib): Delete rules.
* mklibgcc.in: Delete file.
* doc/configfiles.texi: Don't mention mklibgcc.
* config/i386/t-darwin (SHLIB_VERPFX): Delete (moved to libgcc).
* config/i386/t-darwin64 (SHLIB_VERPFX): Likewise.
* config/rs6000/t-darwin (SHLIB_VERPFX): Likewise.
* config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS, SHLIB_MAPFILES)
(mklibgcc, ldblspecs): Likewise.
* config/i386/t-nwld (libgcc.def, libc.def, libpcre.def)
(posixpre.def): Use $(T).
(SHLIB_EXT, SHLIB_NAME, SHLIB_SLIBDIR_QUAL, SHLIB_DEF, SHLIB_MAP)
(SHLIB_SRC, SHLIB_INSTALL): Delete.
(SHLIB_LINK): Make dummy.
* config/t-slibgcc-darwin: Delete contents except for dummy SHLIB_LINK.
* configure.ac (all_outputs): Remove mklibgcc.
* configure: Regenerated.
2006-12-19 Daniel Jacobowitz <dan@codesourcery.com>
Paolo Bonzini <bonzini@gnu.org>
* Makefile.in, config/i386/t-darwin, config/i386/t-darwin64,
config/i386/t-nwld, config/rs6000/t-darwin, config/rs6000/t-ldbl128,
config/t-slibgcc-darwin, config.host, configure.ac, empty.mk,
shared-object.mk, siditi-object.mk, static-object.mk: New files.
* configure: Generated.
diff -Nurp trunk/Makefile.def fsf-branch/Makefile.def
--- trunk/Makefile.def 2006-12-09 18:52:34.000000000 -0500
+++ fsf-branch/Makefile.def 2006-12-09 11:40:14.000000000 -0500
@@ -119,6 +119,7 @@ target_modules = { module= libstdc++-v3;
target_modules = { module= libmudflap; lib_path=.libs; };
target_modules = { module= libssp; lib_path=.libs; };
target_modules = { module= newlib; };
+target_modules = { module= libgcc; bootstrap=true; no_check=true; };
target_modules = { module= libgfortran; };
target_modules = { module= libobjc; };
target_modules = { module= libtermcap; no_check=true;
@@ -438,18 +439,17 @@ dependencies = { module=all-tar; on=all-
dependencies = { module=all-uudecode; on=all-build-texinfo; };
// Target modules. These can also have dependencies on the language
-// environment (e.g. on libstdc++).
-lang_env_dependencies = { module=boehm-gc; };
+// environment (e.g. on libstdc++). By default target modules depend
+// on libgcc and newlib/libgloss.
lang_env_dependencies = { module=gperf; cxx=true; };
-lang_env_dependencies = { module=libada; };
-lang_env_dependencies = { module=libgfortran; };
-lang_env_dependencies = { module=libffi; };
lang_env_dependencies = { module=libjava; cxx=true; };
-lang_env_dependencies = { module=libmudflap; };
-lang_env_dependencies = { module=libobjc; };
-lang_env_dependencies = { module=libssp; };
-lang_env_dependencies = { module=libstdc++-v3; };
-lang_env_dependencies = { module=zlib; };
+lang_env_dependencies = { module=newlib; no_c=true; };
+lang_env_dependencies = { module=libgloss; no_c=true; };
+lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; };
+// libiberty does not depend on newlib or libgloss because it must be
+// built newlib on some targets (e.g. Cygwin). It still needs
+// a dependency on libgcc for native targets to configure.
+lang_env_dependencies = { module=libiberty; no_c=true; };
dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; };
dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
diff -Nurp trunk/Makefile.tpl fsf-branch/Makefile.tpl
--- trunk/Makefile.tpl 2006-12-16 17:12:45.000000000 -0500
+++ fsf-branch/Makefile.tpl 2006-12-16 17:30:45.000000000 -0500
@@ -591,11 +591,6 @@ maintainer-clean: local-maintainer-clean
maintainer-clean: local-distclean
realclean: maintainer-clean
-# Extra dependency for clean-target, owing to the mixed nature of gcc.
-clean-target: clean-target-libgcc
-clean-target-libgcc:
- if test -f gcc/Makefile; then cd gcc && $(MAKE) $@; else :; fi
-
# Check target.
.PHONY: check do-check
@@ -1461,18 +1456,12 @@ configure-target-[+module+]: stage_last[
ENDIF bootstrap +][+ ENDFOR target_modules +]
@endif gcc-bootstrap
-@if gcc-no-bootstrap[+ FOR target_modules +][+ IF bootstrap
- +][+ ELSE +]
+@if gcc-no-bootstrap[+ FOR target_modules +]
configure-target-[+module+]: maybe-all-gcc[+
- ENDIF bootstrap +][+ ENDFOR target_modules +]
+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
-[+ FOR lang_env_dependencies +]
-configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
-[+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
-[+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
-
# There are two types of dependencies here: 'hard' dependencies, where one
# module simply won't build without the other; and 'soft' dependencies, where
# if the depended-on module is missing, the depending module will do without
@@ -1569,6 +1558,49 @@ all-prebootstrap: [+ (dep-target "" "on"
[+ ESAC +][+
ENDFOR dependencies +]
+
+# Dependencies for target modules on other target modules are
+# described by lang_env_dependencies; the defaults apply to anything
+# not mentioned there.
+[+
+ ;; Predicate for whether LANG was specified in lang_env_dependencies.
+ (define lang-dep (lambda (lang)
+ (hash-ref lang-env-deps (string-append (get "module") "-" lang))))
+
+ ;; Build the hash table we will need.
+ (define lang-env-deps (make-hash-table 7))
++][+ FOR lang_env_dependencies +][+
+ (if (exist? "cxx")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "cxx") #t))
+
+ (if (exist? "no_c")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_c") #t))
+
+ (if (exist? "no_gcc")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_gcc") #t))
+ "" +][+ ENDFOR lang_env_dependencies +]
+
+@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
+ +][+ IF bootstrap +][+ FOR bootstrap_stage +]
+configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
+ ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
+configure-target-[+module+]: maybe-all-target-libgcc[+
+ ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-no-bootstrap
+
+[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
+configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
+ ENDIF +][+ IF (lang-dep "cxx") +]
+configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
+ ENDIF +]
+[+ ENDFOR target_modules +]
+
# Non-toplevel bootstrap rules must depend on several packages, to be built
# before gcc. Another wart that will go away, hopefully soon.
@if gcc-no-bootstrap
diff -Nurp trunk/configure.in fsf-branch/configure.in
--- trunk/configure.in 2006-12-16 17:12:45.000000000 -0500
+++ fsf-branch/configure.in 2006-12-16 17:30:45.000000000 -0500
@@ -142,6 +142,7 @@ libgcj="target-libffi \
# the host libraries and the host tools (which may be a cross compiler)
#
target_libraries="target-libiberty \
+ target-libgcc \
target-libgloss \
target-newlib \
target-libstdc++-v3 \
diff -Nurp trunk/gcc/Makefile.in fsf-branch/gcc/Makefile.in
--- trunk/gcc/Makefile.in 2006-12-16 17:12:33.000000000 -0500
+++ fsf-branch/gcc/Makefile.in 2006-12-16 17:30:37.000000000 -0500
@@ -330,9 +330,9 @@ USER_H = $(srcdir)/ginclude/decfloat.h \
UNWIND_H = $(srcdir)/unwind-generic.h
-# The GCC to use for compiling libgcc.a and crt*.o.
+# The GCC to use for compiling crt*.o.
# Usually the one we just built.
-# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
+# Don't use this as a dependency--use $(GCC_PASSES).
GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld
# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
@@ -537,11 +537,6 @@ GGC=@GGC@.o
# If a supplementary library is being used for the GC.
GGC_LIB=
-# libgcc.a may be built directly or via stmp-multilib,
-# and installed likewise. Overridden by t-fragment.
-LIBGCC = libgcc.a
-INSTALL_LIBGCC = install-libgcc
-
# "true" if the target C library headers are unavailable; "false"
# otherwise.
inhibit_libc = @inhibit_libc@
@@ -655,10 +650,6 @@ COMPILERS = cc1$(exeext) @all_compilers@
# to compile anything (without linking).
GCC_PASSES=xgcc$(exeext) cc1$(exeext) specs $(EXTRA_PASSES)
-# List of things which should already be built whenever we try to use xgcc
-# to link anything.
-GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS)
-
# Directory to link to, when using the target `maketest'.
DIR = ../gcc
@@ -701,7 +692,7 @@ CRT0STUFF_T_CFLAGS =
# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
T =
-# Should T contain a `=', libgcc.mk will make T_TARGET, setting
+# Should T contain a `=', libgcc/Makefile will make T_TARGET, setting
# $(T_TARGET) to the name of the actual target filename.
T_TARGET =
T_TARGET : $(T_TARGET)
@@ -1230,9 +1221,6 @@ $(srcdir)/configure: @MAINT@ $(srcdir)/c
gccbug: $(srcdir)/gccbug.in
CONFIG_FILES=gccbug CONFIG_HEADERS= ./config.status
-mklibgcc: $(srcdir)/mklibgcc.in
- CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status
-
# cstamp-h.in controls rebuilding of config.in.
# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
# delete it. A stamp file is needed as autoheader won't update the file if
@@ -1274,12 +1262,12 @@ config.status: $(srcdir)/configure $(src
all.internal: start.encap rest.encap doc
# This is what to compile if making a cross-compiler.
all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \
- $(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra
+ libgcc-support lang.all.cross doc @GENINSRC@ srcextra
# This is what must be made before installing GCC and converting libraries.
start.encap: native xgcc$(exeext) cpp$(exeext) specs \
- xlimits.h lang.start.encap @GENINSRC@ srcextra
+ libgcc-support xlimits.h lang.start.encap @GENINSRC@ srcextra
# These can't be made until after GCC can run.
-rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
+rest.encap: $(STMP_FIXPROTO) lang.rest.encap
# This is what is made with the host's compiler
# whether making a cross compiler or not.
native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
@@ -1293,7 +1281,7 @@ c: cc1$(exeext)
# On the target machine, finish building a cross compiler.
# This does the things that can't be done on the host machine.
-rest.cross: $(LIBGCC) specs
+rest.cross: specs
# Recompile all the language-independent object files.
# This is used only if the user explicitly asks for it.
@@ -1415,75 +1403,61 @@ xlimits.h: glimits.h limitx.h limity.h
LIB2ADD = $(LIB2FUNCS_EXTRA)
LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
-libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) specs \
+# All source files for libgcc are either in the source directory (in
+# which case they will start with $(srcdir)), or generated into the build
+# directory (in which case they will be relative paths).
+srcdirify = $(patsubst $(srcdir)%,$$(gcc_srcdir)%,$(filter $(srcdir)%,$(1))) \
+ $(patsubst %,$$(gcc_objdir)/%,$(filter-out $(srcdir)%,$(1)))
+
+libgcc-support: libgcc.mvars stmp-int-hdrs $(STMP_FIXPROTO) $(TCONFIG_H) \
+ $(MACHMODE_H) $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
+ $(LIB2ADD_ST) $(LIB2ADDEH) gcov-iov.h $(SFP_MACHINE)
+
+libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
xgcc$(exeext) stamp-as stamp-collect-ld stamp-nm
- objext='$(objext)' \
- LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
- LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
- LIB2FUNCS_EXCLUDE='$(LIB2FUNCS_EXCLUDE)' \
- LIBGCOV='$(LIBGCOV)' \
- LIB2ADD='$(LIB2ADD)' \
- LIB2ADD_ST='$(LIB2ADD_ST)' \
- LIB2ADDEH='$(LIB2ADDEH)' \
- LIB2ADDEHSTATIC='$(LIB2ADDEHSTATIC)' \
- LIB2ADDEHSHARED='$(LIB2ADDEHSHARED)' \
- LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
- LIB2_SIDITI_CONV_FUNCS='$(LIB2_SIDITI_CONV_FUNCS)' \
- LIBUNWIND='$(LIBUNWIND)' \
- LIBUNWINDDEP='$(LIBUNWINDDEP)' \
- SHLIBUNWIND_LINK='$(SHLIBUNWIND_LINK)' \
- SHLIBUNWIND_INSTALL='$(SHLIBUNWIND_INSTALL)' \
- FPBIT='$(FPBIT)' \
- FPBIT_FUNCS='$(FPBIT_FUNCS)' \
- LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \
- DPBIT='$(DPBIT)' \
- DPBIT_FUNCS='$(DPBIT_FUNCS)' \
- TPBIT='$(TPBIT)' \
- TPBIT_FUNCS='$(TPBIT_FUNCS)' \
- DFP_ENABLE='$(DFP_ENABLE)' \
- DFP_CFLAGS='$(DFP_CFLAGS)' \
- D32PBIT='$(D32PBIT)' \
- D32PBIT_FUNCS='$(D32PBIT_FUNCS)' \
- D64PBIT='$(D64PBIT)' \
- D64PBIT_FUNCS='$(D64PBIT_FUNCS)' \
- D128PBIT='$(D128PBIT)' \
- D128PBIT_FUNCS='$(D128PBIT_FUNCS)' \
- MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
- EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
- SHLIB_LINK='$(SHLIB_LINK)' \
- SHLIB_INSTALL='$(SHLIB_INSTALL)' \
- SHLIB_EXT='$(SHLIB_EXT)' \
- SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
- SHLIB_MKMAP='$(SHLIB_MKMAP)' \
- SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
- SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
- SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
- MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
- ASM_HIDDEN_OP='$(ASM_HIDDEN_OP)' \
- GCC_FOR_TARGET='$(GCC_FOR_TARGET)' \
- mkinstalldirs='$(mkinstalldirs)' \
- $(SHELL) mklibgcc > tmp-libgcc.mk
- mv tmp-libgcc.mk libgcc.mk
-
-# All the things that might cause us to want to recompile bits of libgcc.
-LIBGCC_DEPS = $(GCC_PASSES) stmp-int-hdrs $(STMP_FIXPROTO) \
- libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
- $(MACHMODE_H) longlong.h gbl-ctors.h config.status $(srcdir)/libgcc2.h \
- tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
- config/dfp-bit.h config/dfp-bit.c \
- $(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
- $(srcdir)/config/$(LIB1ASMSRC) \
- $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h $(SFP_MACHINE)
-
-libgcov.a: libgcc.a; @true
-
-libgcc.a: $(LIBGCC_DEPS)
- $(MAKE) \
- CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
- CONFIG_H="$(TCONFIG_H)" TM_H="$(TM_H)" \
- INCLUDES="$(INCLUDES)" \
- MAKEOVERRIDES= \
- -f libgcc.mk all
+ : > tmp-libgcc.mvars
+ echo LIB1ASMFUNCS = '$(LIB1ASMFUNCS)' >> tmp-libgcc.mvars
+ echo LIB1ASMSRC = '$(LIB1ASMSRC)' >> tmp-libgcc.mvars
+ echo LIB2FUNCS_ST = '$(LIB2FUNCS_ST)' >> tmp-libgcc.mvars
+ echo LIB2FUNCS_EXCLUDE = '$(LIB2FUNCS_EXCLUDE)' >> tmp-libgcc.mvars
+ echo LIBGCOV = '$(LIBGCOV)' >> tmp-libgcc.mvars
+ echo LIB2ADD = '$(call srcdirify,$(LIB2ADD))' >> tmp-libgcc.mvars
+ echo LIB2ADD_ST = '$(call srcdirify,$(LIB2ADD_ST))' >> tmp-libgcc.mvars
+ echo LIB2ADDEH = '$(call srcdirify,$(LIB2ADDEH))' >> tmp-libgcc.mvars
+ echo LIB2ADDEHSTATIC = '$(call srcdirify,$(LIB2ADDEHSTATIC))' >> tmp-libgcc.mvars
+ echo LIB2ADDEHSHARED = '$(call srcdirify,$(LIB2ADDEHSHARED))' >> tmp-libgcc.mvars
+ echo LIB2_SIDITI_CONV_FUNCS = '$(LIB2_SIDITI_CONV_FUNCS)' >> tmp-libgcc.mvars
+ echo LIBUNWIND = '$(call srcdirify,$(LIBUNWIND))' >> tmp-libgcc.mvars
+ echo SHLIBUNWIND_LINK = '$(SHLIBUNWIND_LINK)' >> tmp-libgcc.mvars
+ echo SHLIBUNWIND_INSTALL = '$(SHLIBUNWIND_INSTALL)' >> tmp-libgcc.mvars
+ echo FPBIT = '$(FPBIT)' >> tmp-libgcc.mvars
+ echo FPBIT_FUNCS = '$(FPBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo LIB2_DIVMOD_FUNCS = '$(LIB2_DIVMOD_FUNCS)' >> tmp-libgcc.mvars
+ echo DPBIT = '$(DPBIT)' >> tmp-libgcc.mvars
+ echo DPBIT_FUNCS = '$(DPBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo TPBIT = '$(TPBIT)' >> tmp-libgcc.mvars
+ echo TPBIT_FUNCS = '$(TPBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo DFP_ENABLE = '$(DFP_ENABLE)' >> tmp-libgcc.mvars
+ echo DFP_CFLAGS='$(DFP_CFLAGS)' >> tmp-libgcc.mvars
+ echo D32PBIT='$(D32PBIT)' >> tmp-libgcc.mvars
+ echo D32PBIT_FUNCS='$(D32PBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo D64PBIT='$(D64PBIT)' >> tmp-libgcc.mvars
+ echo D64PBIT_FUNCS='$(D64PBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo D128PBIT='$(D128PBIT)' >> tmp-libgcc.mvars
+ echo D128PBIT_FUNCS='$(D128PBIT_FUNCS)' >> tmp-libgcc.mvars
+ echo EXTRA_MULTILIB_PARTS = '$(EXTRA_MULTILIB_PARTS)' >> tmp-libgcc.mvars
+ echo EXTRA_PARTS = '$(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
+ echo SHLIB_EXT = '$(SHLIB_EXT)' >> tmp-libgcc.mvars
+ echo SHLIB_MKMAP = '$(call srcdirify,$(SHLIB_MKMAP))' >> tmp-libgcc.mvars
+ echo SHLIB_MKMAP_OPTS = '$(SHLIB_MKMAP_OPTS)' >> tmp-libgcc.mvars
+ echo SHLIB_MAPFILES = '$(call srcdirify,$(SHLIB_MAPFILES))' >> tmp-libgcc.mvars
+ echo SHLIB_NM_FLAGS = '$(SHLIB_NM_FLAGS)' >> tmp-libgcc.mvars
+ echo ASM_HIDDEN_OP = '$(ASM_HIDDEN_OP)' >> tmp-libgcc.mvars
+ echo LIBGCC2_CFLAGS = '$(LIBGCC2_CFLAGS)' >> tmp-libgcc.mvars
+
+ mv tmp-libgcc.mvars libgcc.mvars
# Use the genmultilib shell script to generate the information the gcc
# driver program needs to select the library directory based on the
@@ -1509,15 +1483,6 @@ s-mlib: $(srcdir)/genmultilib Makefile
$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
$(STAMP) s-mlib
-# Build multiple copies of libgcc.a, one for each target switch.
-stmp-multilib: $(LIBGCC_DEPS)
- $(MAKE) \
- CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
- CONFIG_H="$(CONFIG_H)" \
- MAKEOVERRIDES= \
- -f libgcc.mk all
- $(STAMP) stmp-multilib
-
# Compile two additional files that are linked with every program
# linked using GCC on systems using COFF or ELF, for the sake of C++
# constructors.
@@ -3540,18 +3505,6 @@ fsf-funding.pod: funding.texi
-$(TEXI2POD) $< > $@
#\f
-# clean-target removes all files made by compilation.
-# This can be added to over time.
-
-clean-target: clean-target-libgcc
-
-clean-target-libgcc:
- test ! -d libgcc || \
- (cd libgcc && find . -type d -print) | \
- while read d; do rm -f $$d/libgcc.a || : ; done
- test ! -d libgcc || rm -r libgcc
- test ! -f stmp-dirs || rm stmp-dirs
-
# Deletion of files made during compilation.
# There are four levels of this:
# `mostlyclean', `clean', `distclean' and `maintainer-clean'.
@@ -3648,7 +3601,7 @@ distclean: clean lang.distclean
-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
-rm -rf ${QMTEST_DIR} stamp-qmtest
-rm -f cxxmain.c
- -rm -f mklibgcc gccbug .gdbinit configargs.h
+ -rm -f gccbug .gdbinit configargs.h
-rm -f gcov.pod
# Delete po/*.gmo only if we are not building in the source directory.
-if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
@@ -3670,7 +3623,7 @@ maintainer-clean:
# Copy the compiler files into directories where they will be run.
# Install the driver last so that the window when things are
# broken is small.
-install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
+install: install-common $(INSTALL_HEADERS) \
install-cpp install-man install-info install-@POSUB@ \
install-driver
@@ -3696,7 +3649,7 @@ installdirs:
$(mkinstalldirs) $(DESTDIR)$(man7dir)
# Install the compiler executables built during cross compilation.
-install-common: native $(EXTRA_PARTS) lang.install-common installdirs
+install-common: native lang.install-common installdirs
for file in $(COMPILERS); do \
if [ -f $$file ] ; then \
rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
@@ -3710,13 +3663,6 @@ install-common: native $(EXTRA_PARTS) la
$(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
else true; fi; \
done
- for file in $(EXTRA_PARTS) ..; do \
- if [ x"$$file" != x.. ]; then \
- rm -f $(DESTDIR)$(libsubdir)/$$file; \
- $(INSTALL_DATA) $$file $(DESTDIR)$(libsubdir)/$$file; \
- chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
- else true; fi; \
- done
# We no longer install the specs file because its presence makes the
# driver slower, and because people who need it can recreate it by
# using -dumpspecs. We remove any old version because it would
@@ -3835,24 +3781,6 @@ $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME
-$(INSTALL_DATA) $< $@
-chmod a-x $@
-# Install the library.
-install-libgcc: libgcc.mk libgcc.a libgcov.a installdirs
- $(MAKE) \
- CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
- CONFIG_H="$(TCONFIG_H)" \
- MAKEOVERRIDES= \
- mkinstalldirs='$(mkinstalldirs)' \
- -f libgcc.mk install
-
-# Install multiple versions of libgcc.a, libgcov.a.
-install-multilib: stmp-multilib installdirs
- $(MAKE) \
- CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
- CONFIG_H="$(CONFIG_H)" \
- MAKEOVERRIDES= \
- mkinstalldirs='$(mkinstalldirs)' \
- -f libgcc.mk install
-
# Install all the header files built in the include subdirectory.
install-headers: $(INSTALL_HEADERS_DIR)
# Fix symlinks to absolute paths in the installed include directory to
diff -Nurp trunk/gcc/config/i386/t-darwin fsf-branch/gcc/config/i386/t-darwin
--- trunk/gcc/config/i386/t-darwin 2006-11-23 14:57:24.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-darwin 2006-11-26 17:18:07.000000000 -0500
@@ -1,4 +1,3 @@
-SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
MULTILIB_OPTIONS = m64
MULTILIB_DIRNAMES = x86_64
LIB2_SIDITI_CONV_FUNCS=yes
diff -Nurp trunk/gcc/config/i386/t-darwin64 fsf-branch/gcc/config/i386/t-darwin64
--- trunk/gcc/config/i386/t-darwin64 2006-11-23 14:57:26.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-darwin64 2006-11-26 19:34:30.000000000 -0500
@@ -1,3 +1,2 @@
-SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
LIB2_SIDITI_CONV_FUNCS=yes
LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
diff -Nurp trunk/gcc/config/i386/t-nwld fsf-branch/gcc/config/i386/t-nwld
--- trunk/gcc/config/i386/t-nwld 2006-11-23 14:57:27.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-nwld 2006-12-16 17:54:54.000000000 -0500
@@ -4,18 +4,18 @@ CRT0STUFF_T_CFLAGS = -mpreferred-stack-b
CRT0_S = $(srcdir)/config/i386/netware-crt0.c
MCRT0_S = $(srcdir)/config/i386/netware-crt0.c
-libgcc.def: $(srcdir)/config/i386/t-nwld
+$(T)libgcc.def: $(srcdir)/config/i386/t-nwld
echo "module libgcc_s" >$@
-libc.def: $(srcdir)/config/i386/t-nwld
+$(T)libc.def: $(srcdir)/config/i386/t-nwld
echo "module libc" >$@
-libcpre.def: $(srcdir)/config/i386/t-nwld
+$(T)libcpre.def: $(srcdir)/config/i386/t-nwld
echo "start _LibCPrelude" >$@
echo "exit _LibCPostlude" >>$@
echo "check _LibCCheckUnload" >>$@
-posixpre.def: $(srcdir)/config/i386/t-nwld
+$(T)posixpre.def: $(srcdir)/config/i386/t-nwld
echo "start POSIX_Start" >$@
echo "exit POSIX_Stop" >>$@
echo "check POSIX_CheckUnload" >>$@
@@ -26,36 +26,5 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(R
s-crt0: $(srcdir)/unwind-dw2-fde.h
-# Build a shared libgcc library for NetWare.
-
-SHLIB_EXT = .nlm
-SHLIB_NAME = @shlib_base_name@.nlm
-SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
-SHLIB_DEF = $(srcdir)/config/i386/netware-libgcc.def
-SHLIB_MAP = $(srcdir)/config/i386/netware-libgcc.exp
-SHLIB_SRC = $(srcdir)/config/i386/netware-libgcc.c
-
-SHLIB_LINK = set -e; \
- cat $(SHLIB_DEF) >@shlib_base_name@.def; \
- echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
- echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
- touch libgcc/build; \
- echo "build $$$$(expr $$$$(<libgcc/build) + 0)" >>@shlib_base_name@.def; \
- echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
- if mpkxdc -n -p @shlib_base_name@.xdc; \
- then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
- else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
- fi; \
- $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
- $(SHLIB_SRC) -posix -static-libgcc -lnetware \
- -Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
- rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
- rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
- expr $$$$(<libgcc/build) + 1 >libgcc/build
-
-# $(slibdir) double quoted to protect it from expansion while building
-# libgcc.mk. We want this delayed until actual install time.
-SHLIB_INSTALL = \
- $$(SHELL) $(srcdir)/mkinstalldirs $$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
- $$(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
- $$(INSTALL_DATA) @shlib_base_name@.imp $$(DESTDIR)$$(libsubdir)/
+# To keep DRIVER_DEFINES correct.
+SHLIB_LINK = dummy
diff -Nurp trunk/gcc/config/rs6000/t-darwin fsf-branch/gcc/config/rs6000/t-darwin
--- trunk/gcc/config/rs6000/t-darwin 2006-12-09 18:52:21.000000000 -0500
+++ fsf-branch/gcc/config/rs6000/t-darwin 2006-12-09 11:39:56.000000000 -0500
@@ -23,8 +23,6 @@ TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusu
# Export the _xlq* symbols from darwin-ldouble.c.
SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc64.ver
-SHLIB_VERPFX = $(srcdir)/config/rs6000/darwin-libgcc
-
LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
darwin-fpsave.o: $(srcdir)/config/rs6000/darwin-asm.h
diff -Nurp trunk/gcc/config/rs6000/t-ppccomm fsf-branch/gcc/config/rs6000/t-ppccomm
--- trunk/gcc/config/rs6000/t-ppccomm 2006-11-23 14:57:42.000000000 -0500
+++ fsf-branch/gcc/config/rs6000/t-ppccomm 2006-11-24 19:11:44.000000000 -0500
@@ -11,18 +11,6 @@ eabi.S: $(srcdir)/config/rs6000/eabi.asm
tramp.S: $(srcdir)/config/rs6000/tramp.asm
cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
-ifneq (,$findstring gnu,$(target))
-TARGET_LIBGCC2_CFLAGS += -specs=ldblspecs
-
-SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc-glibc.ver
-
-# Hack to use -mlong-double-128 only when not compiling nof libgcc
-mklibgcc: ldblspecs
-
-ldblspecs: specs
- sed -e '/cc1_options/{ n; s/$$/ %{!msoft-float:-mlong-double-128}/; }' < specs > $@
-endif
-
# Switch synonyms
MULTILIB_MATCHES_ENDIAN = mlittle=mlittle-endian mbig=mbig-endian
MULTILIB_MATCHES_SYSV = mcall-sysv=mcall-sysv-eabi mcall-sysv=mcall-sysv-noeabi mcall-sysv=mcall-linux mcall-sysv=mcall-netbsd
diff -Nurp trunk/gcc/config/t-slibgcc-darwin fsf-branch/gcc/config/t-slibgcc-darwin
--- trunk/gcc/config/t-slibgcc-darwin 2006-12-09 18:52:16.000000000 -0500
+++ fsf-branch/gcc/config/t-slibgcc-darwin 2006-12-09 11:39:50.000000000 -0500
@@ -1,101 +1,2 @@
-# Build a shared libgcc library with the darwin linker.
-SHLIB_SOVERSION = 1
-SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
-SHLIB_EXT = .dylib
-SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
-SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
-SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
-SHLIB_SOLINK = @shlib_base_name@.so
-SHLIB_MAP = @shlib_map_file@
-SHLIB_OBJS = @shlib_objs@
-SHLIB_DIR = @multilib_dir@
-SHLIB_LC = -lc
-
-# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
-# so the libgcc variants have different names not different locations.
-# Note that this version is used for the loader, not the linker; the linker
-# uses the stub versions named by $(LIBGCC).
-SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
- -install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
- -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
- -Wl,-exported_symbols_list,$(SHLIB_MAP) \
- $(SHLIB_VERSTRING) \
- @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
-
-# $(slibdir) double quoted to protect it from expansion while building
-# libgcc.mk. We want this delayed until actual install time.
-SHLIB_INSTALL = \
- $$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \
- $(INSTALL_DATA) $(SHLIB_SONAME) \
- $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME)
-
-SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
-SHLIB_MKMAP_OPTS = -v leading_underscore=1
-SHLIB_MAPFILES += $(srcdir)/libgcc-std.ver
-
-# Must use a different directive for hidden visibility in assembly sources.
-ASM_HIDDEN_OP = .private_extern
-
-# In order to support -mmacosx-version-min, you need to have multiple
-# different libgcc_s libraries that actually get linked against, one for
-# each system version supported. They are 'stub' libraries that
-# contain no code, just a list of exported symbols.
-# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
-#
-# This assumes each multilib corresponds to a different architecture.
-libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver stmp-multilib
- # When building multilibbed target libraries, all the required
- # libraries are expected to exist in the multilib directory.
- MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
- | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
- for mlib in $$MLIBS ; do \
- rm -f $${mlib}/$@ || exit 1 ; \
- $(LN_S) ../$@ $${mlib}/$@ || exit 1 ; \
- done
- MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
- | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
- for mlib in '' $$MLIBS ; do \
- $(STRIP_FOR_TARGET) -o $(@)_T$${mlib} \
- -s $(SHLIB_VERPFX).$(*).ver -c -u \
- ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
- done
- $(LIPO_FOR_TARGET) -output $@ -create $(@)_T*
- rm $(@)_T*
-
-libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): stmp-multilib libgcc_s.10.4.dylib \
- libgcc_s.10.5.dylib
- # When building multilibbed target libraries, all the required
- # libraries are expected to exist in the multilib directory.
- MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
- | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
- for mlib in '' $$MLIBS ; do \
- cp ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
- ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
- done
- $(LIPO_FOR_TARGET) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
- -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
- rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
-
-# From the point-of-view of the Makefiles, libgcc is built by the 'strip'
-# and 'lipo' commands above.
-LIBGCC=libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) libgcc_s.10.4.dylib \
- libgcc_s.10.5.dylib stmp-multilib
-
-INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
-
-install-darwin-libgcc-stubs : $(INSTALL_FILES) installdirs
- for d in $(INSTALL_FILES) ; do \
- $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
- done
- if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
- rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
- else true; fi
- $(LN_S) libgcc_s.1.dylib \
- $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
- if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
- rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
- else true; fi
- $(LN_S) libgcc_s.1.dylib \
- $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
-
-INSTALL_LIBGCC = install-darwin-libgcc-stubs install-multilib
+# To keep DRIVER_DEFINES correct.
+SHLIB_LINK = dummy
diff -Nurp trunk/gcc/config.gcc fsf-branch/gcc/config.gcc
--- trunk/gcc/config.gcc 2006-11-23 14:57:14.000000000 -0500
+++ fsf-branch/gcc/config.gcc 2006-12-19 13:18:00.000000000 -0500
@@ -25,6 +25,9 @@
# configure script. Putting it in a separate shell file lets us skip
# running autoconf when modifying target-specific information.
+# When you change the cases in the OS or target switches, consider
+# updating ../libgcc/config.host also.
+
# This file switches on the shell variable ${target}, and also uses the
# following shell variables:
#
diff -Nurp trunk/gcc/configure.ac fsf-branch/gcc/configure.ac
--- trunk/gcc/configure.ac 2006-12-16 17:12:25.000000000 -0500
+++ fsf-branch/gcc/configure.ac 2006-12-16 17:30:31.000000000 -0500
@@ -3435,7 +3435,7 @@ all_languages=
all_boot_languages=
all_compilers=
all_stagestuff=
-all_outputs='Makefile gccbug mklibgcc libada-mk'
+all_outputs='Makefile gccbug libada-mk'
# List of language makefile fragments.
all_lang_makefrags=
# List of language subdirectory makefiles. Deprecated.
diff -Nurp trunk/gcc/doc/configfiles.texi fsf-branch/gcc/doc/configfiles.texi
--- trunk/gcc/doc/configfiles.texi 2005-11-29 14:51:15.000000000 -0500
+++ fsf-branch/gcc/doc/configfiles.texi 2006-12-16 22:05:03.000000000 -0500
@@ -40,9 +40,6 @@ used.
@item
@file{intl/Makefile} is constructed from @file{intl/Makefile.in}.
@item
-@file{mklibgcc}, a shell script to create a Makefile to build libgcc,
-is constructed from @file{mklibgcc.in}.
-@item
If a language @file{config-lang.in} file (@pxref{Front End Config, ,
The Front End @file{config-lang.in} File}) sets @code{outputs}, then
the files listed in @code{outputs} there are also generated.
diff -Nurp trunk/gcc/mklibgcc.in fsf-branch/gcc/mklibgcc.in
--- trunk/gcc/mklibgcc.in 2006-12-09 18:52:11.000000000 -0500
+++ fsf-branch/gcc/mklibgcc.in 1969-12-31 19:00:00.000000000 -0500
@@ -1,935 +0,0 @@
-#!/bin/sh
-# Construct makefile for libgcc.
-# Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-#
-# This file is part of GCC.
-
-# Arguments, taken from the environment, since there are a lot
-# of them, and positional args becomes quite ugly.
-#
-# objext
-# LIB1ASMFUNCS
-# LIB2FUNCS_ST
-# LIB2FUNCS_EXCLUDE
-# LIBGCOV
-# LIB2ADD
-# LIB2ADD_ST
-# LIB2ADDEH
-# LIB2ADDEHSTATIC
-# LIB2ADDEHSHARED
-# LIB2ADDEHDEP
-# LIBUNWIND
-# LIBUNWINDDEP
-# SHLIBUNWIND_LINK
-# SHLIBUNWIND_INSTALL
-# FPBIT
-# FPBIT_FUNCS
-# LIB2_DIVMOD_FUNCS
-# LIB2_SIDITI_CONV_FUNCS
-# DFP_ENABLE
-# DFP_CFLAGS
-# DPBIT
-# DPBIT_FUNCS
-# TPBIT
-# TPBIT_FUNCS
-# D32PBIT
-# D32PBIT_FUNCS
-# D64PBIT
-# D64PBIT_FUNCS
-# D128PBIT
-# D128PBIT_FUNCS
-# LIBGCC
-# MULTILIBS
-# EXTRA_MULTILIB_PARTS
-# SHLIB_EXT
-# SHLIB_LINK
-# SHLIB_MKMAP
-# SHLIB_MKMAP_OPTS
-# SHLIB_MAPFILES
-# SHLIB_NM_FLAGS
-# SHLIB_INSTALL
-# MULTILIB_OSDIRNAMES
-# ASM_HIDDEN_OP
-# GCC_FOR_TARGET
-
-# Make needs VPATH to be literal.
-echo 'srcdir = @srcdir@'
-echo 'VPATH = @srcdir@'
-echo 'EQ = ='
-echo 'objects = $(filter %'$objext',$^)'
-echo
-echo '# Dependencies are accumulated as we go.'
-echo 'all: stmp-dirs'
-echo 'dirs = libgcc'
-echo
-
-# Library members defined in libgcc2.c.
-
-# The floating-point conversion routines that involve a single-word integer.
-# XX stands for the integer mode.
-swfloatfuncs=
-for mode in sf df xf; do
- swfloatfuncs="$swfloatfuncs _fixuns${mode}XX"
-done
-
-# Likewise double-word routines.
-dwfloatfuncs=
-for mode in sf df xf tf; do
- dwfloatfuncs="$dwfloatfuncs _fix${mode}XX _fixuns${mode}XX"
- dwfloatfuncs="$dwfloatfuncs _floatXX${mode} _floatunXX${mode}"
-done
-
-# Entries of the form <objfile>:<func>:<wordsize> indicate that libgcc2.c
-# should be compiled with L<func> defined and with LIBGCC2_UNITS_PER_WORD
-# set to <wordsize>. <objfile> is the name of the associated object file
-
-lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
- _cmpdi2 _ucmpdi2 _clear_cache
- _enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
- _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
- _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
- _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2
- _powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
- _divxc3 _divtc3 _bswapsi2 _bswapdi2'
-
-if [ "$LIB2_SIDITI_CONV_FUNCS" ]; then
- for func in $swfloatfuncs; do
- sifunc=`echo $func | sed -e 's/XX/si/'`
- lib2funcs="$lib2funcs $sifunc:$sifunc:4"
- done
- for func in $dwfloatfuncs; do
- difunc=`echo $func | sed -e 's/XX/di/'`
- tifunc=`echo $func | sed -e 's/XX/ti/'`
- lib2funcs="$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8"
- done
-else
- lib2funcs="$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`"
- lib2funcs="$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`"
-fi
-
-# Disable SHLIB_LINK if shared libgcc not enabled.
-if [ "@enable_shared@" = "no" ]; then
- SHLIB_LINK=""
-fi
-
-# Build lines.
-
-gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
-gcc_s_compile="$gcc_compile -DSHARED"
-make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
- AR_FOR_TARGET="$(AR_FOR_TARGET)" \
- AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
- AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
- AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
- CC="$(CC)" CFLAGS="$(CFLAGS)" \
- BUILD_PREFIX="$(BUILD_PREFIX)" \
- BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
- LANGUAGES="$(LANGUAGES)"'
-
-# Generic dependencies for libgcc
-libgcc_dep='$(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h'
-
-# Dependencies for libgcc2.c
-libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(srcdir)/libgcc2.h gbl-ctors.h'" $libgcc_dep"
-
-# Dependencies for libgcov.c
-libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'" $libgcc_dep"
-
-# Dependencies for fp-bit.c
-fpbit_c_dep='stmp-dirs config.status tsystem.h'
-
-# Dependencies for decnumber and friends. This is an overzealous set,
-# but at least we can be sure to recompile if anything gets modified.
-decnumber_dep='stmp-dirs $(srcdir)/../libdecnumber/decContext.h $(srcdir)/../libdecnumber/decNumber.h
- $(srcdir)/../libdecnumber/decNumberLocal.h $(srcdir)/../libdecnumber/decimal32.h $(srcdir)/../libdecnumber/decimal64.h
- $(srcdir)/../libdecnumber/decimal128.h $(srcdir)/../libdecnumber/decDPD.h $(srcdir)/../libdecnumber/decUtility.h'
-
-# Dependencies for dfp-bit.c
-dfpbit_c_dep='$(srcdir)/../libdecnumber/decRound.h'" $libgcc_dep $decnumber_dep"
-
-# Flag whether we need eh_dummy.c
-need_eh_dummy=
-
-if [ "$SHLIB_LINK" ]; then
- # Test -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. The dance with @ is to prevent
- # echo from seeing anything it might take for an option.
- # echo turns the \$\$\$\$ into $$$$ and when make sees it it
- # becomes $$ and the shell substitutes the pid. Makes for a
- # slightly safer temp file.
- echo "vis_hide := \$(strip \$(subst @,-,\\"
- echo " \$(shell if echo 'void foo(void); void foo(void) {}' | \\"
- echo " $gcc_compile -fvisibility=hidden -Werror \\"
- echo " -c -xc - -o vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
- echo " then echo @fvisibility=hidden @DHIDE_EXPORTS; \\"
- echo " rm vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
- echo " fi)))"
- echo
-
- # If we have -fvisibility=hidden, then we need to generate hide
- # lists for object files implemented in assembly. The default
- # pseudo-op for this is ".hidden", but can be overridden with
- # ASM_HIDDEN_OP.
- [ "$ASM_HIDDEN_OP" ] || ASM_HIDDEN_OP=".hidden"
-
- echo "ifneq (,\$(vis_hide))"
- echo "define gen-hide-list"
- echo "\$(NM_FOR_TARGET) ${SHLIB_NM_FLAGS} \$< | \\"
- # non-GNU nm emits three fields even for undefined and typeless symbols,
- # so explicitly omit them
- echo " \$(AWK) 'NF == 3 && \$\$2 !~ /^[UN]\$\$/ { print \"\\t${ASM_HIDDEN_OP}\", \$\$3 }' > \$@T"
- echo "mv -f \$@T \$@"
- echo "endef"
- echo "else"
- echo "gen-hide-list = echo > \$@"
- echo "endif"
- echo
-else
- # It is too hard to guarantee that vis_hide and gen-hide-list will never
- # be referenced if SHLIB_LINK is not set, so set them to the values they'd
- # have if SHLIB_LINK were set and we didn't have visibility support.
- echo "vis_hide ="
- echo "gen-hide-list = echo > \$@"
-fi
-
-# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
-# defined as optimized assembly code in LIB1ASMFUNCS or as C code
-# in LIB2FUNCS_EXCLUDE.
-for name in $LIB1ASMFUNCS $LIB2FUNCS_EXCLUDE; do
- lib2funcs=`echo $lib2funcs | sed -e 's/^'$name'[ :]//' \
- -e 's/ '$name'[ :]/ /' \
- -e 's/ '$name'$//'`
- LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
- -e 's/ '$name' / /' \
- -e 's/ '$name'$//'`
-done
-
-#
-# Rules to generate object files.
-#
-
-for ml in $MULTILIBS; do
-
- # Work out relevant parameters that depend only on the multilib.
- dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
- shlib_slibdir_qual=
- libgcc_a=$dir/libgcc.a
- libgcov_a=$dir/libgcov.a
- libgcc_eh_a=
- libgcc_s_so=
- libunwind_a=
- libunwind_so=
-
- if [ "$LIBUNWIND" ]; then
- libunwind_a=$dir/libunwind.a
- fi
- if [ "$SHLIB_LINK" ]; then
- libgcc_eh_a=$dir/libgcc_eh.a
- libgcc_s_so=$dir/libgcc_s${SHLIB_EXT}
- if [ "$LIBUNWIND" ]; then
- libunwind_so=$dir/libunwind${SHLIB_EXT}
- fi
- os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
- if [ "$os_multilib_dir" != . ]; then
- shlib_slibdir_qual="/$os_multilib_dir"
- fi
- fi
-
- libgcc_s_so_extra=
- libunwind_so_extra=
-
- echo
- echo \#
- echo \# ml: $ml
- echo \# dir: $dir
- echo \# flags: $flags
- echo \# libgcc_a: $libgcc_a
- echo \# libgcov_a: $libgcov_a
- echo \# libgcc_eh_a: $libgcc_eh_a
- echo \# libunwind_a: $libunwind_a
- echo \#
- echo \# shlib_slibdir_qual: $shlib_slibdir_qual
- echo \# libgcc_s_so: $libgcc_s_so
- echo \# libunwind_so: $libunwind_so
- echo \#
- echo
-
- # Update list of directories.
- if [ $dir != . ]; then
- echo "dirs += ${dir} libgcc/${dir}"
- echo
- fi
-
- #
- # Build libgcc1 components.
- #
- for name in $LIB1ASMFUNCS; do
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
- outV="libgcc/${dir}/${name}.vis"
-
- echo ${outS}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
- echo " $gcc_s_compile" $flags -DL$name -xassembler-with-cpp \
- -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $outS
-
- echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ${outV}
- echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
- -c '$(srcdir)/config/$(LIB1ASMSRC)' -include $outV -o $out
-
- echo "${outV}: ${outS}; \$(gen-hide-list)"
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
- echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
- -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
- echo $libgcc_a: $out
- fi
- done
-
- #
- # Build libgcc2 components.
- #
-
- for name in $lib2funcs; do
- case $name in
- *:*:*)
- defines=`echo $name | sed -e 's/.*:\(.*\):\(.*\)/-DL\1 -DLIBGCC2_UNITS_PER_WORD=\2/'`
- name=`echo $name | sed -e 's/\(.*\):.*:.*/\1/'`
- ;;
- *)
- defines="-DL$name"
- ;;
- esac
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $libgcc2_c_dep
- echo " $gcc_s_compile" $flags $defines -c '$(srcdir)/libgcc2.c' \
- -o $outS
-
- echo $out: $libgcc2_c_dep
- echo " $gcc_compile" $flags $defines '$(vis_hide)' \
- -c '$(srcdir)/libgcc2.c' -o $out
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
- echo " $gcc_compile" $flags $defines -c '$(srcdir)/libgcc2.c' -o $out
- echo $libgcc_a: $out
- fi
- done
-
- for name in $LIB2FUNCS_ST; do
- out="libgcc/${dir}/${name}${objext}"
-
- echo $out: $libgcc2_c_dep
- echo " $gcc_compile" $flags -DL$name '$(vis_hide)' \
- -c '$(srcdir)/libgcc2.c' -o $out
- echo ${dir}/libgcc.a: $out
- done
-
- for name in $LIB2_DIVMOD_FUNCS; do
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $libgcc2_c_dep
- echo " $gcc_s_compile" $flags -DL$name \
- -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $outS
-
- echo $out: $libgcc2_c_dep
- echo " $gcc_compile" $flags -DL$name '$(vis_hide)' \
- -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
- echo " $gcc_compile" $flags -DL$name \
- -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
- echo $libgcc_a: $out
- fi
- done
-
- #
- # Build software floating point functions.
- #
-
- for fpbit_var in FPBIT DPBIT TPBIT ; do
- fpfuncs_var="${fpbit_var}_FUNCS"
- eval fpbit=\$$fpbit_var
- eval fpfuncs=\$$fpfuncs_var
-
- if [ "$fpbit" ] ; then
- for name in $fpfuncs; do
- case "$name" in
- # _sf_to_tf and _df_to_tf require tp-bit.c
- # being compiled in.
- _[sd]f_to_tf) [ -z "$TPBIT" ] && continue;;
- esac
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $fpbit $fpbit_c_dep
- echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $fpbit -o $outS
-
- echo $out: $fpbit $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- '$(vis_hide)' -c $fpbit -o $out
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo $out: $fpbit $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $fpbit -o $out
-
- echo $libgcc_a: $out
- fi
- done
- fi
- done
-
- if [ "@enable_decimal_float@" = "yes" -a -z "$libgcc_so" ]; then
- # If $DFP_ENABLE is set, then we want all data type sizes.
- if [ "$DFP_ENABLE" ] ; then
- D32PBIT=1; D64PBIT=1; D128PBIT=1
- fi
-
- # Bring in the DFP support code if D32PBIT, D64PBIT or D128PBIT are set.
- if [ -n "$D32PBIT" -o -n "$D64PBIT" -o -n "$D128PBIT" ] ; then
- dec_filenames="decContext decNumber decRound decLibrary decUtility"
- fi
-
- # Only bring in decimal*.c files for types we support.
- if [ -n "$D32PBIT" ] ; then
- dec_filenames="$dec_filenames decimal32"
- fi
- if [ -n "$D64PBIT" ] ; then
- dec_filenames="$dec_filenames decimal64"
- fi
- if [ -n "$D128PBIT" ] ; then
- dec_filenames="$dec_filenames decimal128"
- fi
-
- for name in $dec_filenames ; do
- out="libgcc/${dir}/${name}${objext}"
- echo $out: "\$(srcdir)/../libdecnumber/${name}.c" $decnumber_dep
- echo " $gcc_compile" $flags -c "\$(srcdir)/../libdecnumber/${name}.c" -o $out
- echo $libgcc_a: $out
- done
-
- # For individual functions, loop over each variable by name.
- for dpbit_var in D32PBIT D64PBIT D128PBIT ; do
- dpfuncs_var="${dpbit_var}_FUNCS"
- eval dpbit=\$$dpbit_var
- eval dpfuncs=\$$dpfuncs_var
- case "$dpbit_var" in
- D32PBIT) dpwidth=32 ;;
- D64PBIT) dpwidth=64 ;;
- D128PBIT) dpwidth=128 ;;
- esac
-
- if [ "$dpbit" ]; then
- for name in $dpfuncs; do
- out="libgcc/${dir}/${name}${objext}"
- echo $out: config/dfp-bit.h config/dfp-bit.c $dfpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name -DWIDTH=$dpwidth \
- $DFP_CFLAGS -c $\(srcdir\)/config/dfp-bit.c -o $out
- echo $libgcc_a: $out
- done
- fi
- done
- fi
-
- for file in $LIB2ADD; do
- name=`echo $file | sed -e 's/[.][cS]$//' -e 's/[.]asm$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
-
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${oname}${objext}"
- outS="libgcc/${dir}/${oname}_s${objext}"
-
- case $file in
- *.c)
- echo $outS: stmp-dirs $file $libgcc_dep
- echo " $gcc_s_compile" $flags -c $file -o $outS
-
- echo $out: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags '$(vis_hide)' -c $file -o $out
- ;;
-
- *.asm | *.S)
- outV="libgcc/${dir}/${oname}.vis"
-
- echo $outS: stmp-dirs $file $libgcc_dep
- echo " $gcc_s_compile" $flags -xassembler-with-cpp \
- -c $file -o $outS
-
- echo $out: stmp-dirs $file $libgcc_dep $outV
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -include $outV -c $file -o $out
- echo "${outV}: ${outS}; \$(gen-hide-list)"
- ;;
-
- *)
- echo "Unhandled extension: $file" >&2
- exit 1
- ;;
- esac
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${oname}${objext}"
- case $file in
- *.c)
- echo $out: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags -c $file -o $out
- ;;
-
- *.asm | *.S)
- echo $out: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -c $file -o $out
- ;;
-
- *)
- echo "Unhandled extension: $file" >&2
- exit 1
- ;;
- esac
-
- echo $libgcc_a: $out
- fi
- done
-
-
- for file in $LIB2ADD_ST; do
- name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
- out="libgcc/${dir}/${oname}${objext}"
-
- case $file in
- *.c)
- echo $out: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags '$(vis_hide)' -c $file -o $out
- ;;
-
- *.asm | *.S)
- # We may have to compile it twice in order to establish the list
- # of symbols to be marked hidden.
- if [ "$libgcc_so" ]; then
- outV="libgcc/${dir}/${oname}.vis"
- outT="libgcc/${dir}/${oname}_t${objext}"
- echo ${outT}: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -c $file -o ${outT}
- echo $out: stmp-dirs $file $libgcc_dep $outV
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -include $outV -c $file -o $out
- echo "${outV}: ${outT}; \$(gen-hide-list)"
- else
- echo $out: stmp-dirs $file $libgcc_dep
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -c $file -o $out
- fi
- ;;
-
- *)
- echo "Unhandled extension: $file" >&2
- exit 1
- ;;
- esac
- echo $libgcc_a: $out
- done
-
- # If we don't have libgcc_eh.a, only LIB2ADDEH matters. If we do, only
- # LIB2ADDEHSTATIC and LIB2ADDEHSHARED matter. (Usually all three are
- # identical.)
-
- if [ "$libgcc_eh_a" ]; then
- for file in $LIB2ADDEHSTATIC; do
- name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
- out="libgcc/${dir}/${oname}${objext}"
-
- case $file in
- *.c)
- echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out
- ;;
- *.asm | *.S)
- # We have to compile it twice in order to establish the list
- # of symbols to be marked hidden.
- outV="libgcc/${dir}/${oname}.vis"
- outT="libgcc/${dir}/${oname}_t${objext}"
- echo ${outT}: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -c $file -o ${outT}
- echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep $outV
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -include $outV -c $file -o $out
- echo "${outV}: ${outT}; \$(gen-hide-list)"
- ;;
- *) echo "Unhandled extension: $file">&2; exit 1 ;;
- esac
-
- echo $libgcc_eh_a: $out
- done
-
- for file in $LIB2ADDEHSHARED; do
- name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
- outS="libgcc/${dir}/${oname}_s${objext}"
-
- case $file in
- *.c)
- echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_s_compile" $flags -fexceptions -c $file -o $outS
- ;;
- *.asm | *.S)
- echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_s_compile" $flags -xassembler-with-cpp -c $file -o $outS
- ;;
- *) echo "Unhandled extension: $file">&2; exit 1 ;;
- esac
-
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- done
-
- # If nothing went into libgcc_eh.a, create a dummy object -
- # some linkers don't like totally empty archives.
- if [ -z "$LIB2ADDEHSTATIC" ]; then
- file=eh_dummy.c
- out="libgcc/${dir}/eh_dummy${objext}"
- need_eh_dummy=1
-
- echo $out: stmp-dirs $file
- echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
- echo $libgcc_eh_a: $out
- fi
-
-
- else # no libgcc_eh.a
- for file in $LIB2ADDEH; do
- name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
- out="libgcc/${dir}/${oname}${objext}"
-
- case $file in
- *.c)
- echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
- ;;
- *.asm | *.S)
- echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
- echo " $gcc_compile" $flags -xassembler-with-cpp \
- -c $file -o $out
- ;;
- *) echo "Unhandled extension: $file">&2; exit 1 ;;
- esac
-
- echo $libgcc_a: $out
- done
- fi
-
- # We do _not_ handle assembly files in this context.
- if [ "$LIBUNWIND" ]; then
- for file in $LIBUNWIND; do
- case $file in
- *.c) ;;
- *) echo "Unhandled extension: $file">&2; exit 1 ;;
- esac
-
- name=`echo $file | sed -e 's/[.]c$//'`
- oname=`echo $name | sed -e 's,.*/,,'`
-
- if [ "$libunwind_so" ]; then
- out="libgcc/${dir}/${oname}${objext}"
- outS="libgcc/${dir}/${oname}_s${objext}"
-
- echo $out: stmp-dirs $file $LIBUNWINDDEP
- echo " $gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
-
- echo $outS: stmp-dirs $file $LIBUNWINDDEP
- echo " $gcc_s_compile $flags -fexceptions -c $file -o $outS"
-
- echo $libunwind_a: $out
- echo $libunwind_so: $outS
- else
- out="libgcc/${dir}/${oname}${objext}"
- echo $out: stmp-dirs $file $LIBUNWINDDEP
- echo " $gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
- echo $libunwind_a: $out
- fi
- done
- fi
-
- #
- # build libgcov components
- #
- for name in $LIBGCOV; do
- dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
- out="libgcc/${dir}/${name}${objext}"
-
- echo $out: $libgcov_c_dep
- echo " $gcc_compile $flags -DL$name -c \$(srcdir)/libgcov.c -o $out"
- echo $libgcov_a: $out
- done
-
- # EXTRA_MULTILIB_PARTS.
- if [ -n "$EXTRA_MULTILIB_PARTS" ]; then
- # Each of the EXTRA_MULTILIB_PARTS is built by recursive invocation
- # of the parent Makefile. We must do this just once for each
- # multilib, passing it all the EXTRA_MULTILIB_PARTS as
- # simultaneous goal targets, so that rules which cannot execute
- # simultaneously are properly serialized.
-
- extra=
- echo
- for f in $EXTRA_MULTILIB_PARTS; do
- case $dir in
- .) out=$f ; t= ;;
- *) out=$dir/$f ; t=$dir/ ;;
- esac
- case $out in
- # Prevent `make' from interpreting $out as a macro assignment
- *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
- *) targ=$out ;;
- esac
- extra="$extra $targ"
- done
-
- if [ "$dir" = . ]; then
- suffix=
- else
- suffix=`echo $dir | sed s,/,_,g`
- fi
- echo extra$suffix: stmp-dirs
- echo " $make_compile" \\
- echo ' LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
- echo ' MULTILIB_CFLAGS="'$flags'"' T=$t $extra
- echo "all: extra$suffix"
-
- # Make libunwind.so and libgcc_s.so depend on these, since they
- # are likely to be implicitly used by the link process.
- if [ "$libgcc_s_so" ]; then
- echo "$libgcc_s_so: extra$suffix"
- fi
- if [ "$libunwind_so" ]; then
- echo "$libunwind_so: extra$suffix"
- fi
- fi
-
- # Library build rules.
- dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
-
- # Map-file generation.
- if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
- mapfile="libgcc/${dir}/libgcc.map"
- tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
- # This uses a here document instead of echos because some shells
- # will convert the \1 in the second sed command to a control-A.
- # The behavior of here documents is more predictable.
- cat <<EOF
-
-${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES
- { \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS \$(objects); echo %%; \\
- cat $SHLIB_MAPFILES \\
- | sed -e '/^[ ]*#/d' \\
- -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
- | $gcc_compile $flags -E -xassembler-with-cpp -; \\
- } | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
- mv '$tmpmapfile' \$@
-$libgcc_s_so: ${mapfile}
-EOF
- fi
-
- # Static libraries.
-
- # Each of these .a files depends on stmp-dirs. It would seem that
- # this dependency is redundant, since each of the object files
- # itself depends on stmp-dirs. However, it is possible that there
- # are in fact no object files. In that case, the stmp-dirs
- # dependency is required; the directory containing the archive must
- # exist before the archive itself can be created.
- echo ""
- echo "$libgcc_a: stmp-dirs"
- echo " -rm -f $libgcc_a"
- echo ' $(AR_CREATE_FOR_TARGET)' $libgcc_a '$(objects)'
- echo ' $(RANLIB_FOR_TARGET)' $libgcc_a
- echo "all: $libgcc_a"
-
- echo ""
- echo "$libgcov_a: stmp-dirs"
- echo " -rm -f $libgcov_a"
- echo ' $(AR_CREATE_FOR_TARGET)' $libgcov_a '$(objects)'
- echo ' $(RANLIB_FOR_TARGET)' $libgcov_a
- echo "all: $libgcov_a"
-
- # These libraries are not always built.
- if [ "$libunwind_a" ]; then
- echo ""
- echo "$libunwind_a: stmp-dirs"
- echo " -rm -f $libunwind_a"
- echo ' $(AR_CREATE_FOR_TARGET)' $libunwind_a '$(objects)'
- echo ' $(RANLIB_FOR_TARGET)' $libunwind_a
- echo "all: $libunwind_a"
- fi
-
- if [ "$libgcc_eh_a" ]; then
- echo ""
- echo "${dir}/libgcc_eh.a: stmp-dirs"
- echo " -rm -f ${dir}/libgcc_eh.a"
- echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a '$(objects)'
- echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
- echo "all: $libgcc_eh_a"
- fi
-
- # Shared libraries.
- if [ "$libgcc_s_so" ]; then
- echo ""
- echo "$libgcc_s_so: stmp-dirs $libunwind_so"
- echo " $SHLIB_LINK" \
- | sed -e "s%@multilib_flags@%$flags%g" \
- -e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_objs@%\$(objects)%g" \
- -e "s%@shlib_base_name@%libgcc_s%g" \
- -e "s%@shlib_map_file@%$mapfile%g" \
- -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
- echo "all: $libgcc_s_so"
- fi
-
- if [ "$libunwind_so" ]; then
- echo ""
- echo "$libunwind_so: stmp-dirs"
- echo " $SHLIBUNWIND_LINK" \
- | sed -e "s%@multilib_flags@%$flags%g" \
- -e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_objs@%\$(objects)%g" \
- -e "s%@shlib_base_name@%libunwind%g" \
- -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
- echo "all: $libunwind_so"
- fi
-
-done # ml in MULTILIBS
-
-echo
-echo "libgcc-stage-start:"
-echo " for dir in \$(dirs); do \\"
-echo " if [ -d \$(stage)/\$\$dir ]; then :; \\"
-echo " else $mkinstalldirs \$(stage)/\$\$dir; fi; \\"
-echo " done"
-echo " -for dir in \$(dirs); do \\"
-echo " mv \$\$dir/*${objext} \$(stage)/\$\$dir; \\"
-echo " mv \$\$dir/*.vis \$(stage)/\$\$dir; \\"
-echo " mv \$\$dir/*.map \$(stage)/\$\$dir; \\"
-echo " test ! -f \$\$dir/libgcc.a || mv \$\$dir/lib* \$(stage)/\$\$dir; \\"
-echo " done"
-
-echo
-echo "stmp-dirs:"
-echo " for d in \$(dirs); do \\"
-echo " if [ -d \$\$d ]; then true; else $mkinstalldirs \$\$d; fi; \\"
-echo " done"
-echo " if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi"
-
-if [ "$need_eh_dummy" ]; then
- echo "eh_dummy.c:"
- echo " echo 'int __libgcc_eh_dummy;' > \$@"
-fi
-
-echo ""
-echo "install: all"
-for ml in $MULTILIBS; do
- dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
- if [ $dir != . ]; then
- ldir='$(DESTDIR)$(libsubdir)'/$dir
- echo " if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
- else
- ldir='$(DESTDIR)$(libsubdir)'
- fi
- echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
- echo ' chmod 644' ${ldir}/libgcc.a
- echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
- echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
- echo ' chmod 644' ${ldir}/libgcov.a
- echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
-
- if [ "$SHLIB_LINK" ]; then
- echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
- echo ' chmod 644' ${ldir}/libgcc_eh.a
- echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
-
- shlib_slibdir_qual=
- os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
- if [ "$os_multilib_dir" != . ]; then
- shlib_slibdir_qual="/$os_multilib_dir"
- fi
- echo " $SHLIB_INSTALL" \
- | sed -e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_base_name@%libgcc_s%g" \
- -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
- if [ "$LIBUNWIND" ]; then
- echo " $SHLIBUNWIND_INSTALL" \
- | sed -e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_base_name@%libunwind%g" \
- -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
- libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
- echo ' $(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
- echo ' chmod 644' ${dir}/libunwind.a
- echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
- fi
- fi
-done
-for f in $EXTRA_MULTILIB_PARTS; do
- for ml in $MULTILIBS; do
- dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- if [ $dir != . ]; then
- out=${dir}/$f
- ldir='$(DESTDIR)$(libsubdir)'/$dir
- else
- out=$f
- ldir='$(DESTDIR)$(libsubdir)'
- fi
- echo ' $(INSTALL_DATA)' $out $ldir/
- done
-done
-
-echo '.PHONY: all install'
diff -Nurp trunk/libgcc/Makefile.in fsf-branch/libgcc/Makefile.in
--- trunk/libgcc/Makefile.in 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/Makefile.in 2006-12-19 11:09:24.000000000 -0500
@@ -0,0 +1,740 @@
+# Makefile.in
+
+# Copyright (C) 2005, 2006 Free Software Foundation
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under the
+# terms of the GNU Library General Public License as published by the Free
+# Software Foundation; either version 2 of the License, 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 COPYING. If not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+
+libgcc_topdir = @libgcc_topdir@
+gcc_srcdir = $(libgcc_topdir)/gcc
+gcc_objdir = $(MULTIBUILDTOP)../../gcc
+
+srcdir = @srcdir@
+
+prefix = @prefix@
+
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+
+SHELL = @SHELL@
+
+enable_shared = @enable_shared@
+decimal_float = @decimal_float@
+
+host_noncanonical = @host_noncanonical@
+
+# Multilib support variables.
+MULTISRCTOP =
+MULTIBUILDTOP =
+MULTIDIRS =
+MULTISUBDIR =
+MULTIDO = true
+MULTICLEAN = true
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
+
+objext = .o
+
+AR = @AR@
+AR_FLAGS = rc
+
+CC = @CC@
+CFLAGS = @CFLAGS@
+RANLIB = @RANLIB@
+MAKEINFO = @MAKEINFO@
+LN_S = @LN_S@
+PERL = @PERL@
+
+PWD_COMMAND = $${PWDCMD-pwd}
+
+# Flags to pass to a recursive make.
+FLAGS_TO_PASS = \
+ "AR=$(AR)" \
+ "AR_FLAGS=$(AR_FLAGS)" \
+ "CC=$(CC)" \
+ "CFLAGS=$(CFLAGS)" \
+ "DESTDIR=$(DESTDIR)" \
+ "EXTRA_OFILES=$(EXTRA_OFILES)" \
+ "HDEFINES=$(HDEFINES)" \
+ "INSTALL=$(INSTALL)" \
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ "LDFLAGS=$(LDFLAGS)" \
+ "LOADLIBES=$(LOADLIBES)" \
+ "RANLIB=$(RANLIB)" \
+ "SHELL=$(SHELL)" \
+ "prefix=$(prefix)" \
+ "exec_prefix=$(exec_prefix)" \
+ "libdir=$(libdir)" \
+ "libsubdir=$(libsubdir)" \
+ "tooldir=$(tooldir)"
+
+# Dependencies for "all" are set later in the file.
+all: all-multi
+ # Now that we have built all the objects, we need to copy
+ # them back to the GCC directory. Too many things (other
+ # in-tree libraries, and DejaGNU) know about the layout
+ # of the build tree, for now.
+ $(MAKE) install DESTDIR=$(gcc_objdir) \
+ slibdir= libsubdir= MULTIOSDIR=$(MULTIDIR)
+
+.PHONY: all-multi
+all-multi:
+ # If this is the top-level multilib, build all the other
+ # multilibs.
+ @: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
+
+.PHONY: check installcheck
+check: check-subdir
+installcheck: installcheck-subdir
+
+.PHONY: all clean
+
+clean:
+ -rm -f config.h stamp-h stmp-ldirs libgcc.map
+ -rm -f *$(objext)
+ -rm -f *.dep
+ -rm -f *.a
+ -rm -f libunwind$(SHLIB_EXT)
+ -rm -f libgcc_s*
+ @$(MULTICLEAN) multi-clean DO=clean
+distclean: clean
+ @$(MULTICLEAN) multi-clean DO=distclean
+ -rm -f *~ Makefile config.cache config.status multilib.out
+ -rm -f config.log
+maintainer-clean realclean: distclean
+
+Makefile: $(srcdir)/Makefile.in config.status
+ CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Depending on Makefile makes sure that config.status has been re-run
+# if needed. This prevents problems with parallel builds.
+config.h: stamp-h ; @true
+stamp-h: $(srcdir)/config.in config.status Makefile
+ CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
+
+config.status: $(srcdir)/configure
+ $(SHELL) ./config.status --recheck
+
+include $(gcc_objdir)/libgcc.mvars
+
+# Flags to pass to recursive makes.
+
+AR_FOR_TARGET = $(AR)
+AR_FLAGS_FOR_TARGET =
+AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
+AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
+AWK = @AWK@
+GCC_FOR_TARGET = $(CC)
+LIPO = @LIPO@
+LIPO_FOR_TARGET = $(LIPO)
+MACHMODE_H = machmode.h mode-classes.def insn-modes.h
+NM = @NM@
+NM_FOR_TARGET = $(NM)
+RANLIB_FOR_TARGET = $(RANLIB)
+STRIP = @STRIP@
+STRIP_FOR_TARGET = $(STRIP)
+
+# Directory in which the compiler finds libraries etc.
+libsubdir = $(libdir)/gcc/$(host_noncanonical)/$(version)
+# Used to install the shared libgcc.
+slibdir = @slibdir@
+
+export AR_FOR_TARGET
+export AR_CREATE_FOR_TARGET
+export AR_FLAGS_FOR_TARGET
+export AR_EXTRACT_FOR_TARGET
+export AWK
+export DESTDIR
+export GCC_FOR_TARGET
+export INCLUDES
+export INSTALL_DATA
+export LIB1ASMSRC
+export LIBGCC2_CFLAGS
+export LIPO_FOR_TARGET
+export MACHMODE_H
+export NM_FOR_TARGET
+export STRIP_FOR_TARGET
+export RANLIB_FOR_TARGET
+export libsubdir
+export slibdir
+
+DECNUMINC = -I$(srcdir)/../libdecnumber -I$(MULTIBUILDTOP)../../libdecnumber
+
+# Specify the directories to be searched for header files.
+# Both . and srcdir are used, in that order,
+# so that *config.h will be found in the compilation
+# subdirectory rather than in the source directory.
+# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
+# currently being compiled, in both source trees, to be examined as well.
+INCLUDES = -I. -I$(@D) -I$(gcc_objdir) \
+ -I$(srcdir) -I$(srcdir)/$(@D) -I$(srcdir)/../gcc \
+ -I$(srcdir)/../include $(DECNUMINC)
+
+# CFLAGS first is not perfect; normally setting CFLAGS should override any
+# options in LIBGCC2_CFLAGS. But LIBGCC2_CFLAGS may contain -g0, and CFLAGS
+# will usually contain -g, so for the moment CFLAGS goes first. We must
+# include CFLAGS - that's where multilib options live.
+INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) $(INCLUDES)
+
+MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
+MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
+
+MULTIOSSUBDIR := $(shell if test $(MULTIOSDIR) != .; then echo /$(MULTIOSDIR); fi)
+inst_libdir = $(libsubdir)$(MULTISUBDIR)
+inst_slibdir = $(slibdir)$(MULTIOSSUBDIR)
+
+gcc_compile_bare = $(CC) $(INTERNAL_CFLAGS)
+gcc_compile = $(gcc_compile_bare) -o $@ -MT $@ -MD -MP -MF $(basename $@).dep
+gcc_s_compile = $(gcc_compile) -DSHARED
+
+objects = $(filter %$(objext),$^)
+
+# Collect any host-specific information from Makefile fragments.
+tmake_file = @tmake_file@
+include $(srcdir)/empty.mk $(tmake_file)
+
+# Only handle shared libraries if both:
+# - the user requested them
+# - we know how to build them
+ifeq ($(SHLIB_LINK),)
+ enable_shared := no
+endif
+
+ifeq ($(enable_shared),yes)
+ iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/shared-object.mk,$(iter-items))
+
+ install-shared = install-shared
+
+ ifneq ($(LIBUNWIND),)
+ install-libunwind = install-libunwind
+ endif
+
+# Test -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. The dance with @ is to prevent
+# echo from seeing anything it might take for an option.
+# echo turns the \$\$\$\$ into $$$$ and when make sees it it
+# becomes $$ and the shell substitutes the pid. Makes for a
+# slightly safer temp file.
+vis_hide := $(strip $(subst @,-,\
+ $(shell if echo 'void foo(void); void foo(void) {}' | \
+ $(gcc_compile_bare) -fvisibility=hidden -Werror \
+ -c -xc - -o vis_temp_file$$$$.o 2> /dev/null; \
+ then echo @fvisibility=hidden @DHIDE_EXPORTS; \
+ rm vis_temp_file$$$$.o 2> /dev/null; \
+ fi)))
+
+ifneq (,$(vis_hide))
+
+# If we have -fvisibility=hidden, then we need to generate hide
+# lists for object files implemented in assembly. The default
+# pseudo-op for this is ".hidden", but can be overridden with
+# ASM_HIDDEN_OP.
+ifeq ($(ASM_HIDDEN_OP),)
+ASM_HIDDEN_OP = .hidden
+endif
+
+define gen-hide-list
+$(NM) -pg $< | \
+ $(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T
+mv -f $@T $@
+endef
+else
+gen-hide-list = echo > $@
+endif
+
+else
+# Not enable_shared.
+iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items))
+vis_hide =
+gen-hide-list = echo > \$@
+endif
+
+# The distinction between these two variables is no longer relevant.
+EXTRA_MULTILIB_PARTS := $(sort $(EXTRA_MULTILIB_PARTS) $(EXTRA_PARTS))
+
+ifneq ($(EXTRA_MULTILIB_PARTS),)
+ extra-parts = extra-parts
+endif
+
+# Library members defined in libgcc2.c.
+lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \
+ _clear_cache _enable_execute_stack _trampoline __main _absvsi2 \
+ _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \
+ _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 \
+ _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 \
+ _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 \
+ _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 \
+ _divtc3 _bswapsi2 _bswapdi2
+
+# The floating-point conversion routines that involve a single-word integer.
+# XX stands for the integer mode.
+swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf)
+
+# Likewise double-word routines.
+dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \
+ $(patsubst %,_fixuns%XX,sf df xf tf) \
+ $(patsubst %,_floatXX%,sf df xf tf) \
+ $(patsubst %,_floatunXX%,sf df xf tf)
+
+ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
+ lib2funcs += $(subst XX,si,$(swfloatfuncs))
+ lib2funcs += $(subst XX,di,$(dwfloatfuncs))
+endif
+
+# These might cause a divide overflow trap and so are compiled with
+# unwinder info.
+LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
+
+
+all: $(HOST_EXTRA)
+install: $(HOST_EXTRA_INSTALL)
+
+# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
+# defined as optimized assembly code in LIB1ASMFUNCS or as C code
+# in LIB2FUNCS_EXCLUDE.
+lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs))
+LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \
+ $(LIB2_DIVMOD_FUNCS))
+
+# Build "libgcc1" (assembly) components.
+ifeq ($(enable_shared),yes)
+
+lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC) %.vis
+ $(gcc_compile) -DL$* -xassembler-with-cpp \
+ -c $(gcc_srcdir)/config/$(LIB1ASMSRC) -include $*.vis
+$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s.o
+ $(gen-hide-list)
+libgcc-objects += $(lib1asmfuncs-o)
+
+lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-s-o): %_s$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
+ $(gcc_s_compile) -DL$* -xassembler-with-cpp \
+ -c $(gcc_srcdir)/config/$(LIB1ASMSRC)
+libgcc-s-objects += $(lib1asmfuncs-s-o)
+
+else
+
+lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
+ $(gcc_compile) -DL$* -xassembler-with-cpp \
+ -c $(gcc_srcdir)/config/$(LIB1ASMSRC)
+libgcc-objects += $(lib1asmfuncs-o)
+
+endif
+
+# Build lib2funcs. For the static library also include LIB2FUNCS_ST.
+lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST))
+$(lib2funcs-o): %$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+ $(vis_hide)
+libgcc-objects += $(lib2funcs-o)
+
+ifeq ($(enable_shared),yes)
+lib2funcs-s-o = $(patsubst %,%_s$(objext),$(lib2funcs))
+$(lib2funcs-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c
+libgcc-s-objects += $(lib2funcs-s-o)
+endif
+
+ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
+# Build libgcc2.c for each conversion function, with a specific
+# L<func> definition and LIBGCC2_UNITS_PER_WORD setting. The DImode
+# functions are built with a wordsize of 4; the TImode functions are
+# built with the same labels, but a wordsize of 8.
+
+sifuncs = $(subst XX,si,$(swfloatfuncs))
+difuncs = $(subst XX,di,$(dwfloatfuncs))
+tifuncs = $(subst XX,ti,$(dwfloatfuncs))
+
+iter-items := $(sifuncs) $(difuncs) $(tifuncs)
+iter-labels := $(sifuncs) $(difuncs) $(difuncs)
+iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(sifuncs) $(difuncs) $(tifuncs))
+ifeq ($(enable_shared),yes)
+libgcc-s-objects += $(patsubst %,%_s$(objext),$(sifuncs) $(difuncs) $(tifuncs))
+endif
+endif
+
+# Build LIB2_DIVMOD_FUNCS.
+lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
+$(lib2-divmod-o): %$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+ -fexceptions -fnon-call-exceptions $(vis_hide)
+libgcc-objects += $(lib2-divmod-o)
+
+ifeq ($(enable_shared),yes)
+lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
+$(lib2-divmod-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+ -fexceptions -fnon-call-exceptions
+libgcc-s-objects += $(lib2-divmod-s-o)
+endif
+
+# $(FPBIT) et al. are pathnames relative to the GCC build
+# directory; the supporting files are made by the GCC
+# Makefile.
+# FIXME: Soon we will be able to move this logic into this directory.
+
+ifneq ($(fpbit-in-libgcc),yes)
+FPBIT:=$(if $(FPBIT),$(gcc_objdir)/$(FPBIT),)
+DPBIT:=$(if $(DPBIT),$(gcc_objdir)/$(DPBIT),)
+TPBIT:=$(if $(TPBIT),$(gcc_objdir)/$(TPBIT),)
+endif
+
+ifeq ($(TPBIT),)
+# _sf_to_tf and _df_to_tf require tp-bit.c being compiled in.
+FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS))
+DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS))
+endif
+
+# Build FPBIT.
+ifneq ($(FPBIT),)
+fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS))
+$(fpbit-o): %$(objext): $(FPBIT)
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT) $(vis_hide)
+libgcc-objects += $(fpbit-o)
+
+ifeq ($(enable_shared),yes)
+fpbit-s-o = $(patsubst %,%_s$(objext),$(FPBIT_FUNCS))
+$(fpbit-s-o): %_s$(objext): $(FPBIT)
+ $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT)
+libgcc-s-objects += $(fpbit-s-o)
+endif
+endif
+
+# Build DPBIT.
+ifneq ($(DPBIT),)
+dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS))
+$(dpbit-o): %$(objext): $(DPBIT)
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT) $(vis_hide)
+libgcc-objects += $(dpbit-o)
+
+ifeq ($(enable_shared),yes)
+dpbit-s-o = $(patsubst %,%_s$(objext),$(DPBIT_FUNCS))
+$(dpbit-s-o): %_s$(objext): $(DPBIT)
+ $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT)
+libgcc-s-objects += $(dpbit-s-o)
+endif
+endif
+
+# Build TPBIT.
+ifneq ($(TPBIT),)
+tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS))
+$(tpbit-o): %$(objext): $(TPBIT)
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT) $(vis_hide)
+libgcc-objects += $(tpbit-o)
+
+ifeq ($(enable_shared),yes)
+tpbit-s-o = $(patsubst %,%_s$(objext),$(TPBIT_FUNCS))
+$(tpbit-s-o): %_s$(objext): $(TPBIT)
+ $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT)
+libgcc-s-objects += $(tpbit-s-o)
+endif
+endif
+
+# Build decimal floating point support.
+ifeq ($(decimal_float),yes)
+
+# If $DFP_ENABLE is set, then we want all data type sizes.
+ifneq ($(DFP_ENABLE),)
+D32PBIT = 1
+D64PBIT = 1
+D128PBIT = 1
+endif
+
+dec-filenames =
+ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
+dec-filenames += decContext decNumber decRound decLibrary decUtility
+endif
+
+ifneq ($(D32PBIT),)
+dec-filenames += decimal32
+endif
+
+ifneq ($(D64PBIT),)
+dec-filenames += decimal64
+endif
+
+ifneq ($(D128PBIT),)
+dec-filenames += decimal128
+endif
+
+dec-objects = $(patsubst %,%$(objext),$(dec-filenames))
+$(dec-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
+ $(gcc_compile) -c $<
+libgcc-objects += $(dec-objects)
+
+# Next build individual support functions.
+ifneq ($(D32PBIT),)
+d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
+$(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
+libgcc-objects += $(d32pbit-o)
+endif
+
+ifneq ($(D64PBIT),)
+d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
+$(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
+libgcc-objects += $(d64pbit-o)
+endif
+
+ifneq ($(D128PBIT),)
+d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
+$(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+ $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
+libgcc-objects += $(d128pbit-o)
+endif
+
+endif
+
+# Build LIB2ADD and LIB2ADD_ST.
+ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),)
+$(error Unsupported files in LIB2ADD or LIB2ADD_ST.)
+endif
+
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD))))
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST))))
+
+c_flags :=
+iter-items := $(LIB2ADD) $(LIB2ADD_ST)
+include $(iterator)
+
+ifeq ($(enable_shared),yes)
+libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADD))))
+endif
+
+# Build LIB2ADDEH, LIB2ADDEHSTATIC, and LIB2ADDEHSHARED. If we don't have
+# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
+# LIB2ADDEHSHARED matter. (Usually all three are identical.)
+
+c_flags := -fexceptions
+
+ifeq ($(enable_shared),yes)
+
+libgcc-eh-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEHSTATIC))))
+libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADDEHSHARED))))
+
+iter-items := $(sort $(LIB2ADDEHSTATIC) $(LIB2ADDEHSHARED))
+include $(iterator)
+
+else
+# Not shared. LIB2ADDEH are added to libgcc.a.
+
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEH))))
+
+iter-items := $(LIB2ADDEH)
+include $(iterator)
+
+endif
+
+# Build LIBUNWIND.
+
+c_flags := -fexceptions
+
+libunwind-objects += $(addsuffix $(objext),$(basename $(notdir $(LIBUNWIND))))
+
+ifeq ($(enable_shared),yes)
+libunwind-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIBUNWIND))))
+endif
+
+iter-items := $(LIBUNWIND)
+include $(iterator)
+
+# Build libgcov components.
+libgcov-objects = $(patsubst %,%$(objext),$(LIBGCOV))
+$(libgcov-objects): %$(objext): $(gcc_srcdir)/libgcov.c
+ $(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcov.c
+
+
+# Static libraries.
+libgcc.a: $(libgcc-objects)
+libgcov.a: $(libgcov-objects)
+libunwind.a: $(libunwind-objects)
+libgcc_eh.a: $(libgcc-eh-objects)
+
+libgcc.a libgcov.a libunwind.a libgcc_eh.a:
+ -rm -f $@
+
+ objects="$(objects)"; \
+ if test -z "$$objects"; then \
+ echo 'int __libgcc_eh_dummy;' > eh_dummy.c; \
+ $(gcc_compile_bare) $(vis_hide) -c eh_dummy.c \
+ -o eh_dummy$(objext); \
+ objects=eh_dummy$(objext); \
+ fi; \
+ $(AR_CREATE_FOR_TARGET) $@ $$objects
+
+ $(RANLIB) $@
+
+all: libgcc.a libgcov.a
+
+ifneq ($(LIBUNWIND),)
+all: libunwind.a
+endif
+
+ifeq ($(enable_shared),yes)
+all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
+ifneq ($(LIBUNWIND),)
+all: libunwind$(SHLIB_EXT)
+endif
+endif
+
+ifeq ($(enable_shared),yes)
+
+# Map-file generation.
+ifneq ($(SHLIB_MKMAP),)
+libgcc.map: $(SHLIB_MKMAP) $(SHLIB_MAPFILES) $(libgcc-s-objects)
+ { $(NM) $(SHLIB_NM_FLAGS) $(libgcc-s-objects); echo %%; \
+ cat $(SHLIB_MAPFILES) \
+ | sed -e '/^[ ]*#/d' \
+ -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
+ | $(gcc_compile_bare) -E -xassembler-with-cpp -; \
+ } | $(AWK) -f $(SHLIB_MKMAP) $(SHLIB_MKMAP_OPTS) > tmp-$@
+ mv tmp-$@ $@
+libgcc_s$(SHLIB_EXT): libgcc.map
+mapfile = libgcc.map
+endif
+
+libgcc_s$(SHLIB_EXT): $(libgcc-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),$(subst \
+ @multilib_dir@,$(MULTIDIR),$(subst \
+ @shlib_objs@,$(objects),$(subst \
+ @shlib_base_name@,libgcc_s,$(subst \
+ @shlib_map_file@,$(mapfile),$(subst \
+ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_LINK)))))))
+
+libunwind$(SHLIB_EXT): $(libunwind-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),$(subst \
+ @multilib_dir@,$(MULTIDIR),$(subst \
+ @shlib_objs@,$(objects),$(subst \
+ @shlib_base_name@,libunwind,$(subst \
+ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK))))))
+
+endif
+
+extra-parts:
+ # Recursively invoke make in the GCC directory to build any
+ # startfiles (for now). We must do this just once, passing
+ # it all the EXTRA_MULTILIB_PARTS as simultaneous goal targets,
+ # so that rules which cannot execute simultaneously are properly
+ # serialized. We indirect through T_TARGET in case any multilib
+ # directories contain an equals sign, to prevent make from
+ # interpreting any of the goals as variable assignments.
+
+ # We must use cd && make rather than make -C, or else the stage
+ # number will be embedded in debug information.
+
+ T=`$(PWD_COMMAND)`/ \
+ && cd $(gcc_objdir) \
+ && $(MAKE) GCC_FOR_TARGET="$(CC)" \
+ MULTILIB_CFLAGS="$(CFLAGS)" \
+ T=$$T \
+ T_TARGET="$(patsubst %,$${T}%,$(EXTRA_MULTILIB_PARTS))" \
+ T_TARGET
+
+ # Early copyback; see "all" above for the rationale. The
+ # early copy is necessary so that the gcc -B options find
+ # the right startup files when linking shared libgcc.
+ $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
+ for file in dummy $(EXTRA_MULTILIB_PARTS); do \
+ if test $$file != dummy; then \
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
+ $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/;\
+ fi; \
+ done
+
+all: $(extra-parts)
+
+# Install rules. These do not depend on "all", so that they can be invoked
+# recursively from it.
+install-libunwind:
+ $(mkinstalldirs) $(DESTDIR)$(inst_slibdir)
+
+ # NOTE: Maybe this should go into $(inst_libdir), but this
+ # is where the old mklibgcc.in put it.
+ $(INSTALL_DATA) libunwind.a $(DESTDIR)$(inst_slibdir)/
+ chmod 644 $(DESTDIR)$(inst_slibdir)/libunwind.a
+ $(RANLIB) $(DESTDIR)$(inst_slibdir)/libunwind.a
+
+ $(subst @multilib_dir@,$(MULTIDIR),$(subst \
+ @shlib_base_name@,libunwind,$(subst \
+ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL))))
+
+install-shared:
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+
+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+
+ $(subst @multilib_dir@,$(MULTIDIR),$(subst \
+ @shlib_base_name@,libgcc_s,$(subst \
+ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
+
+install: $(install-shared) $(install-libunwind)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+
+ $(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
+ $(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
+
+ for file in dummy $(EXTRA_MULTILIB_PARTS); do \
+ if test $$file != dummy; then \
+ rm -f $(DESTDIR)$(inst_libdir)/$$file; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/; \
+ fi; \
+ done
+
+.PHONY: install install-shared install-libunwind
+
+# Don't export variables to the environment, in order to not confuse
+# configure.
+.NOEXPORT:
+
+include $(srcdir)/empty.mk $(wildcard *.dep)
+
+# TODO QUEUE:
+# Garbage collect in gcc/:
+# $(LIBGCC) settings in t-* are now unused
+#
+# Remove use of $(gcc_srcdir). Source files referenced using $(gcc_srcdir)
+# should move into the libgcc directory.
+
diff -Nurp trunk/libgcc/config/i386/t-darwin fsf-branch/libgcc/config/i386/t-darwin
--- trunk/libgcc/config/i386/t-darwin 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-darwin 2006-11-26 17:19:11.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc
diff -Nurp trunk/libgcc/config/i386/t-darwin64 fsf-branch/libgcc/config/i386/t-darwin64
--- trunk/libgcc/config/i386/t-darwin64 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-darwin64 2006-11-26 17:21:13.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc
diff -Nurp trunk/libgcc/config/i386/t-nwld fsf-branch/libgcc/config/i386/t-nwld
--- trunk/libgcc/config/i386/t-nwld 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-nwld 2006-12-16 17:54:03.000000000 -0500
@@ -0,0 +1,31 @@
+# Build a shared libgcc library for NetWare.
+
+SHLIB_EXT = .nlm
+SHLIB_NAME = @shlib_base_name@.nlm
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+SHLIB_DEF = $(gcc_srcdir)/config/i386/netware-libgcc.def
+SHLIB_MAP = $(gcc_srcdir)/config/i386/netware-libgcc.exp
+SHLIB_SRC = $(gcc_srcdir)/config/i386/netware-libgcc.c
+
+SHLIB_LINK = set -e; \
+ cat $(SHLIB_DEF) >@shlib_base_name@.def; \
+ echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
+ echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
+ touch build; \
+ echo "build $$(expr $$(<build) + 0)" >>@shlib_base_name@.def; \
+ echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
+ if mpkxdc -n -p @shlib_base_name@.xdc; \
+ then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
+ else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
+ fi; \
+ $(CC) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
+ $(SHLIB_SRC) -posix -static-libgcc -lnetware \
+ -Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
+ rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
+ rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
+ expr $$(<build) + 1 >build
+
+SHLIB_INSTALL = \
+ $(SHELL) $(srcdir)/mkinstalldirs $(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL_DATA) $(SHLIB_NAME) $(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
+ $(INSTALL_DATA) @shlib_base_name@.imp $(DESTDIR)$(libsubdir)/
diff -Nurp trunk/libgcc/config/rs6000/t-darwin fsf-branch/libgcc/config/rs6000/t-darwin
--- trunk/libgcc/config/rs6000/t-darwin 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/rs6000/t-darwin 2006-11-26 17:19:00.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/rs6000/darwin-libgcc
diff -Nurp trunk/libgcc/config/rs6000/t-ldbl128 fsf-branch/libgcc/config/rs6000/t-ldbl128
--- trunk/libgcc/config/rs6000/t-ldbl128 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/rs6000/t-ldbl128 2006-11-26 10:11:09.000000000 -0500
@@ -0,0 +1,7 @@
+SHLIB_MAPFILES += $(gcc_srcdir)/config/rs6000/libgcc-ppc-glibc.ver
+
+# Use -mlong-double-128 only when not compiling nof libgcc.
+predefined-macros := $(shell true | $(CC) $(CFLAGS) -x c -dD -E -)
+ifeq ($(findstring _SOFT_FLOAT,$(predefined-macros)),)
+HOST_LIBGCC2_CFLAGS += -mlong-double-128
+endif
diff -Nurp trunk/libgcc/config/t-slibgcc-darwin fsf-branch/libgcc/config/t-slibgcc-darwin
--- trunk/libgcc/config/t-slibgcc-darwin 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/t-slibgcc-darwin 2006-12-09 11:39:36.000000000 -0500
@@ -0,0 +1,125 @@
+# Build a shared libgcc library with the darwin linker.
+SHLIB_SOVERSION = 1
+SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
+SHLIB_EXT = .dylib
+SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
+SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_SOLINK = @shlib_base_name@.so
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@
+SHLIB_LC = -lc
+
+# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
+# so the libgcc variants have different names not different locations.
+# Note that this version is used for the loader, not the linker; the linker
+# uses the stub versions named by the versioned members of $(INSTALL_FILES).
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
+ -install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
+ -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
+ -Wl,-exported_symbols_list,$(SHLIB_MAP) \
+ $(SHLIB_VERSTRING) \
+ @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
+
+SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk
+SHLIB_MKMAP_OPTS = -v leading_underscore=1
+SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver
+
+# Must use a different directive for hidden visibility in assembly sources.
+ASM_HIDDEN_OP = .private_extern
+
+INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
+
+# For the toplevel multilib, build a fat archive including all the multilibs.
+ifeq ($(MULTIBUILDTOP),)
+
+SHLIB_INSTALL = \
+ $(mkinstalldirs) $(DESTDIR)$(slibdir); \
+ $(INSTALL_DATA) $(SHLIB_SONAME) \
+ $(DESTDIR)$(slibdir)/$(SHLIB_SONAME)
+
+ifeq ($(enable_shared),yes)
+HOST_EXTRA = $(INSTALL_FILES)
+HOST_EXTRA_INSTALL = install-darwin-libgcc-stubs
+endif
+
+# In order to support -mmacosx-version-min, you need to have multiple
+# different libgcc_s libraries that actually get linked against, one for
+# each system version supported. They are 'stub' libraries that
+# contain no code, just a list of exported symbols.
+# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
+#
+# This assumes each multilib corresponds to a different architecture.
+libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) all-multi
+ $(STRIP) -o $(@)_T \
+ -s $(SHLIB_VERPFX).$(*).ver -c -u \
+ ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp
+ MLIBS=`$(CC) --print-multi-lib \
+ | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
+ for mlib in $$MLIBS ; do \
+ $(STRIP) -o $(@)_T$${mlib} \
+ -s $(SHLIB_VERPFX).$(*).ver -c -u \
+ ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
+ done
+ $(LIPO) -output $@ -create $(@)_T*
+ rm $(@)_T*
+
+libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) \
+ libgcc_s.10.4.dylib libgcc_s.10.5.dylib
+ cp libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
+ ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_ || exit 1 ; \
+ MLIBS=`$(CC) --print-multi-lib \
+ | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
+ for mlib in $$MLIBS ; do \
+ cp ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
+ ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
+ done
+ $(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
+ -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+ rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+
+install-darwin-libgcc-stubs : $(INSTALL_FILES)
+ $(mkinstalldirs) $(DESTDIR)$(slibdir)
+ for d in $(INSTALL_FILES) ; do \
+ $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
+ done
+ if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
+ rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
+ else true; fi
+ $(LN_S) libgcc_s.1.dylib \
+ $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
+ if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
+ rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
+ else true; fi
+ $(LN_S) libgcc_s.1.dylib \
+ $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
+
+else
+
+# Do not install shared libraries for any other multilibs. Unless
+# we're putting them in the gcc directory during a build, for
+# compatibility with the pre-top-level layout. In that case we
+# need symlinks.
+SHLIB_INSTALL =
+
+ifeq ($(enable_shared),yes)
+all: install-darwin-libgcc-links
+endif
+
+install-darwin-libgcc-links:
+ $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
+ for file in $(INSTALL_FILES); do \
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
+ $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \
+ done
+
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+ $(LN_S) libgcc_s.1.dylib \
+ $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+ $(LN_S) libgcc_s.1.dylib \
+ $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+
+endif
diff -Nurp trunk/libgcc/config.host fsf-branch/libgcc/config.host
--- trunk/libgcc/config.host 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config.host 2006-12-19 13:16:57.000000000 -0500
@@ -0,0 +1,591 @@
+# libgcc host-specific configuration file.
+# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+
+#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 2, 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 COPYING. If not, write to the Free
+#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+#02110-1301, USA.
+
+# This is the libgcc host-specific configuration file
+# where a configuration type is mapped to different system-specific
+# definitions and files. This is invoked by the autoconf-generated
+# configure script. Putting it in a separate shell file lets us skip
+# running autoconf when modifying host-specific information.
+
+# This file bears an obvious resemblance to gcc/config.gcc. The cases
+# should be kept similar, to ease moving library-specific settings
+# from config.gcc to this file. That is also why tmake_file is
+# left as tmake_file, rather than hmake_file, even though this library
+# switches on ${host}.
+
+# This file switches on the shell variable ${host}, and also uses the
+# following shell variables:
+#
+# with_* Various variables as set by configure.
+
+# This file sets the following shell variables for use by the
+# autoconf-generated configure script:
+#
+# cpu_type The name of the cpu, if different from the first
+# chunk of the canonical host name.
+# tmake_file A list of machine-description-specific
+# makefile-fragments, if different from
+# "$cpu_type/t-$cpu_type".
+
+tmake_file=
+
+# Set default cpu_type so it can be updated in each machine entry.
+cpu_type=`echo ${host} | sed 's/-.*$//'`
+case ${host} in
+m32c*-*-*)
+ cpu_type=m32c
+ ;;
+alpha*-*-*)
+ cpu_type=alpha
+ ;;
+am33_2.0-*-linux*)
+ cpu_type=mn10300
+ ;;
+strongarm*-*-*)
+ cpu_type=arm
+ ;;
+arm*-*-*)
+ cpu_type=arm
+ ;;
+bfin*-*)
+ cpu_type=bfin
+ ;;
+ep9312*-*-*)
+ cpu_type=arm
+ ;;
+frv*) cpu_type=frv
+ ;;
+xscale-*-*)
+ cpu_type=arm
+ ;;
+i[34567]86-*-*)
+ cpu_type=i386
+ ;;
+x86_64-*-*)
+ cpu_type=i386
+ ;;
+ia64-*-*)
+ ;;
+hppa*-*-* | parisc*-*-*)
+ cpu_type=pa
+ ;;
+m32r*-*-*)
+ cpu_type=m32r
+ ;;
+m680[012]0-*-*)
+ cpu_type=m68k
+ ;;
+m68k-*-*)
+ ;;
+mips*-*-*)
+ cpu_type=mips
+ ;;
+powerpc*-*-*)
+ cpu_type=rs6000
+ ;;
+rs6000*-*-*)
+ ;;
+score*-*-*)
+ cpu_type=score
+ ;;
+sparc64*-*-*)
+ cpu_type=sparc
+ ;;
+sparc*-*-*)
+ cpu_type=sparc
+ ;;
+spu*-*-*)
+ cpu_type=spu
+ ;;
+s390*-*-*)
+ cpu_type=s390
+ ;;
+# Note the 'l'; we need to be able to match e.g. "shle" or "shl".
+sh[123456789lbe]*-*-*)
+ cpu_type=sh
+ ;;
+tic4x-*-*)
+ cpu_type=c4x
+ ;;
+esac
+
+# Common parts for widely ported systems.
+case ${host} in
+*-*-darwin*)
+ tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+ ;;
+*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
+ # This is the place-holder for the generic a.out configuration
+ # of FreeBSD. No actual configuration resides here since
+ # there was only ever a bare-bones ix86 configuration for
+ # a.out and it exists solely in the machine-specific section.
+ # This place-holder must exist to avoid dropping into
+ # the generic ELF configuration of FreeBSD (i.e. it must be
+ # ordered before that section).
+ ;;
+*-*-freebsd*)
+ # This is the generic ELF configuration of FreeBSD. Later
+ # machine-specific sections may refine and add to this
+ # configuration.
+ ;;
+*-*-linux*libc1* | *-*-linux*aout*)
+ # Avoid the generic linux case.
+ ;;
+*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
+ # Must come before *-*-gnu* (because of *-*-linux-gnu* systems).
+ ;;
+*-*-gnu*)
+ ;;
+*-*-netbsd*)
+ ;;
+*-*-openbsd*)
+ ;;
+*-*-rtems*)
+ ;;
+*-*-vxworks*)
+ ;;
+esac
+
+case ${host} in
+# Support site-specific machine types.
+*local*)
+ rest=`echo ${host} | sed -e "s/$cpu_type-//"`
+ if test -f $srcdir/config/${cpu_type}/t-$rest
+ then tmake_file=${cpu_type}/t-$rest
+ fi
+ ;;
+alpha*-*-unicosmk*)
+ ;;
+alpha*-*-linux*)
+ ;;
+alpha*-*-gnu*)
+ ;;
+alpha*-*-freebsd*)
+ ;;
+alpha*-*-netbsd*)
+ ;;
+alpha*-*-openbsd*)
+ ;;
+alpha*-dec-osf[45]*)
+ ;;
+alpha64-dec-*vms*)
+ ;;
+alpha*-dec-*vms*)
+ ;;
+arc-*-elf*)
+ ;;
+arm-*-coff* | armel-*-coff*)
+ ;;
+arm-semi-aof | armel-semi-aof)
+ ;;
+arm-wrs-vxworks)
+ ;;
+arm*-*-freebsd*|strongarm*-*-freebsd*)
+ ;;
+arm*-*-netbsdelf*)
+ ;;
+arm*-*-netbsd*)
+ ;;
+arm*-*-linux*) # ARM GNU/Linux with ELF
+ ;;
+arm*-*-uclinux*) # ARM ucLinux
+ ;;
+arm*-*-ecos-elf)
+ ;;
+arm*-*-eabi* | arm*-*-symbianelf* )
+ ;;
+arm*-*-rtems*)
+ ;;
+arm*-wince-pe*)
+ ;;
+arm-*-pe*)
+ ;;
+arm*-*-kaos*)
+ ;;
+avr-*-rtems*)
+ ;;
+avr-*-*)
+ ;;
+bfin*-elf*)
+ ;;
+bfin*-uclinux*)
+ ;;
+bfin*-*)
+ ;;
+c4x-*-rtems* | tic4x-*-rtems*)
+ ;;
+c4x-* | tic4x-*)
+ ;;
+cris-*-aout)
+ ;;
+cris-*-elf | cris-*-none)
+ ;;
+cris-*-linux*)
+ ;;
+crx-*-elf)
+ ;;
+fr30-*-elf)
+ ;;
+frv-*-elf)
+ ;;
+frv-*-*linux*)
+ ;;
+h8300-*-rtemscoff*)
+ ;;
+h8300-*-rtems*)
+ ;;
+h8300-*-elf*)
+ ;;
+h8300-*-*)
+ ;;
+hppa*64*-*-linux* | parisc*64*-*-linux*)
+ ;;
+hppa*-*-linux* | parisc*-*-linux*)
+ ;;
+hppa1.1-*-pro*)
+ ;;
+hppa1.1-*-osf*)
+ ;;
+hppa1.1-*-bsd*)
+ ;;
+hppa[12]*-*-hpux10*)
+ ;;
+hppa*64*-*-hpux11*)
+ ;;
+hppa[12]*-*-hpux11*)
+ ;;
+i[34567]86-*-darwin*)
+ ;;
+x86_64-*-darwin*)
+ tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
+ ;;
+i[34567]86-*-elf*)
+ ;;
+i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4*)
+ ;;
+i[34567]86-*-aout*)
+ ;;
+i[34567]86-*-beoself* | i[34567]86-*-beos*)
+ ;;
+i[34567]86-*-freebsd*)
+ ;;
+x86_64-*-freebsd*)
+ ;;
+i[34567]86-*-netbsdelf*)
+ ;;
+x86_64-*-netbsd*)
+ ;;
+i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
+ ;;
+i[34567]86-*-openbsd*)
+ ;;
+i[34567]86-*-coff*)
+ ;;
+i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
+ ;;
+i[34567]86-*-gnu*)
+ ;;
+i[34567]86-pc-msdosdjgpp*)
+ ;;
+i[34567]86-*-lynxos*)
+ ;;
+i[3456x]86-*-netware*)
+ case /${with_ld} in
+ */nwld)
+ tmake_file="${tmake_file} i386/t-nwld"
+ ;;
+ esac
+ ;;
+i[34567]86-*-nto-qnx*)
+ ;;
+i[34567]86-*-rtems*)
+ ;;
+i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
+ ;;
+i[34567]86-*-solaris2*)
+ ;;
+i[34567]86-*-sysv5*) # Intel x86 on System V Release 5
+ ;;
+i[34567]86-*-sysv4*) # Intel 80386's running system V.4
+ ;;
+i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
+ ;;
+i[34567]86-*-pe | i[34567]86-*-cygwin*)
+ ;;
+i[34567]86-*-mingw32*)
+ ;;
+i[34567]86-*-uwin*)
+ ;;
+i[34567]86-*-interix3*)
+ ;;
+i[34567]86-*-kaos*)
+ ;;
+ia64*-*-freebsd*)
+ ;;
+ia64*-*-hpux*)
+ ;;
+iq2000*-*-elf*)
+ ;;
+m32r-*-elf*)
+ ;;
+m32rle-*-elf*)
+ ;;
+m32r-*-linux*)
+ ;;
+m32rle-*-linux*)
+ ;;
+m68hc11-*-*|m6811-*-*)
+ ;;
+m68hc12-*-*|m6812-*-*)
+ ;;
+m68k-*-aout*)
+ ;;
+m68k-*-coff*)
+ ;;
+m68020-*-elf* | m68k-*-elf*)
+ ;;
+m68010-*-netbsdelf* | m68k*-*-netbsdelf*)
+ ;;
+m68k*-*-openbsd*)
+ ;;
+m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux with uClibc
+ ;;
+m68k-*-linux*) # Motorola m68k's running GNU/Linux
+ # with ELF format using glibc 2
+ # aka the GNU/Linux C library 6.
+ ;;
+m68k-*-rtems*)
+ ;;
+mcore-*-elf)
+ ;;
+mcore-*-pe*)
+ ;;
+mips-sgi-irix[56]*)
+ ;;
+mips*-*-netbsd*) # NetBSD/mips, either endian.
+ ;;
+mips64*-*-linux*)
+ ;;
+mips*-*-openbsd*)
+ ;;
+mipsisa32-*-elf* | mipsisa32el-*-elf*)
+ ;;
+mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*)
+ ;;
+mipsisa64-*-elf* | mipsisa64el-*-elf*)
+ ;;
+mipsisa64sr71k-*-elf*)
+ ;;
+mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
+ ;;
+mips-*-elf* | mipsel-*-elf*)
+ ;;
+mips64-*-elf* | mips64el-*-elf*)
+ ;;
+mips64vr-*-elf* | mips64vrel-*-elf*)
+ ;;
+mips64orion-*-elf* | mips64orionel-*-elf*)
+ ;;
+mips*-*-rtems*)
+ ;;
+mips-wrs-vxworks)
+ ;;
+mips-wrs-windiss) # Instruction-level simulator for VxWorks.
+ ;;
+mipstx39-*-elf* | mipstx39el-*-elf*)
+ ;;
+mmix-knuth-mmixware)
+ ;;
+mn10300-*-*)
+ ;;
+mt-*-elf)
+ ;;
+ns32k-*-netbsdelf*)
+ echo "GCC does not yet support the ${host} target"; exit 1
+ ;;
+ns32k-*-netbsd*)
+ ;;
+pdp11-*-bsd)
+ ;;
+pdp11-*-*)
+ ;;
+powerpc64-*-linux*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc64-*-gnu*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-*-beos*)
+ ;;
+powerpc-*-darwin*)
+ ;;
+powerpc64-*-darwin*)
+ ;;
+powerpc*-*-freebsd*)
+ ;;
+powerpc-*-netbsd*)
+ ;;
+powerpc-*-chorusos*)
+ ;;
+powerpc-*-eabispe*)
+ ;;
+powerpc-*-eabisimaltivec*)
+ ;;
+powerpc-*-eabisim*)
+ ;;
+powerpc-*-elf*)
+ ;;
+powerpc-*-eabialtivec*)
+ ;;
+powerpc-*-eabi*)
+ ;;
+powerpc-*-rtems*)
+ ;;
+powerpc-*-linux*altivec*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-*-linux*spe*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-*-linux*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-*-gnu-gnualtivec*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-*-gnu*)
+ tmake_file="${tmake_file} rs6000/t-ldbl128"
+ ;;
+powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
+ ;;
+powerpc-wrs-windiss*) # Instruction-level simulator for VxWorks.
+ ;;
+powerpc-*-lynxos*)
+ ;;
+powerpcle-*-sysv*)
+ ;;
+powerpcle-*-elf*)
+ ;;
+powerpcle-*-eabisim*)
+ ;;
+powerpcle-*-eabi*)
+ ;;
+powerpc-*-kaos*)
+ ;;
+powerpcle-*-kaos*)
+ ;;
+rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*)
+ ;;
+rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
+ ;;
+rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
+ ;;
+rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
+ ;;
+s390-*-linux*)
+ ;;
+s390x-*-linux*)
+ ;;
+s390x-ibm-tpf*)
+ ;;
+score-*-elf)
+ ;;
+sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+ sh-*-linux* | sh[346lbe]*-*-linux* | \
+ sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+ sh64-*-netbsd* | sh64l*-*-netbsd*)
+ ;;
+sh-*-rtemscoff*)
+ ;;
+sh-*-rtems*)
+ ;;
+sh-wrs-vxworks)
+ ;;
+sh-*-*)
+ ;;
+sparc-*-netbsdelf*)
+ ;;
+sparc64-*-openbsd*)
+ ;;
+sparc-*-elf*)
+ ;;
+sparc-*-linux*) # SPARC's running GNU/Linux, libc6
+ ;;
+sparc-*-rtems*)
+ ;;
+sparc64-*-solaris2* | sparcv9-*-solaris2*)
+ ;;
+sparc-*-sysv4*)
+ ;;
+sparc64-*-elf*)
+ ;;
+sparc64-*-freebsd*|ultrasparc-*-freebsd*)
+ ;;
+sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
+ ;;
+sparc64-*-netbsd*)
+ ;;
+spu-*-elf*)
+ ;;
+strongarm-*-elf*)
+ ;;
+strongarm-*-pe)
+ ;;
+strongarm-*-kaos*)
+ ;;
+v850e1-*-*)
+ ;;
+v850e-*-*)
+ ;;
+v850-*-*)
+ ;;
+vax-*-bsd*) # VAXen running BSD
+ ;;
+vax-*-sysv*) # VAXen running system V
+ ;;
+vax-*-netbsdelf*)
+ ;;
+vax-*-netbsd*)
+ ;;
+vax-*-openbsd*)
+ ;;
+vax-*-ultrix*) # VAXen running ultrix
+ ;;
+xscale-*-elf)
+ ;;
+xscale-*-coff)
+ ;;
+xstormy16-*-elf)
+ ;;
+xtensa-*-elf*)
+ ;;
+xtensa-*-linux*)
+ ;;
+am33_2.0-*-linux*)
+ ;;
+m32c-*-elf*)
+ ;;
+*)
+ echo "*** Configuration ${host} not supported" 1>&2
+ exit 1
+ ;;
+esac
diff -Nurp trunk/libgcc/configure.ac fsf-branch/libgcc/configure.ac
--- trunk/libgcc/configure.ac 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/configure.ac 2006-12-19 13:15:01.000000000 -0500
@@ -0,0 +1,133 @@
+dnl Process this file with autoconf to produce a configure script.
+
+sinclude(../config/acx.m4)
+sinclude(../config/no-executables.m4)
+
+AC_PREREQ(2.59)
+AC_INIT([GNU C Runtime Library], 1.0,,[libgcc])
+AC_CONFIG_SRCDIR([static-object.mk])
+
+AC_ARG_WITH(target-subdir,
+[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target])
+AC_ARG_WITH(cross-host,
+[ --with-cross-host=HOST Configuring with a cross compiler])
+AC_ARG_WITH(ld,
+[ --with-ld arrange to use the specified ld (full pathname)])
+
+if test "${srcdir}" = "."; then
+ if test -n "${with_build_subdir}"; then
+ libgcc_topdir="${srcdir}/../.."
+ with_target_subdir=
+ elif test -z "${with_target_subdir}"; then
+ libgcc_topdir="${srcdir}/.."
+ else
+ if test "${with_target_subdir}" != "."; then
+ libgcc_topdir="${srcdir}/${with_multisrctop}../.."
+ else
+ libgcc_topdir="${srcdir}/${with_multisrctop}.."
+ fi
+ fi
+else
+ libgcc_topdir="${srcdir}/.."
+fi
+AC_SUBST(libgcc_topdir)
+AC_CONFIG_AUX_DIR($libgcc_topdir)
+
+AC_ARG_ENABLE(shared,
+[ --disable-shared don't provide a shared libgcc],
+[
+ case $enable_shared in
+ yes | no) ;;
+ *)
+ enable_shared=no
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+ esac
+], [enable_shared=yes])
+AC_SUBST(enable_shared)
+
+AC_ARG_WITH(slibdir,
+[ --with-slibdir=DIR shared libraries in DIR [LIBDIR]],
+slibdir="$with_slibdir",
+if test "${enable_version_specific_runtime_libs+set}" = set; then
+ slibdir='$(libsubdir)'
+elif test "$host" != "$target"; then
+ slibdir='$(build_tooldir)/lib'
+else
+ slibdir='$(libdir)'
+fi)
+AC_SUBST(slibdir)
+
+AC_PROG_INSTALL
+
+AC_PROG_AWK
+# We need awk; bail out if it's missing.
+case ${AWK} in
+ "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
+esac
+
+AC_CANONICAL_HOST
+ACX_NONCANONICAL_HOST
+
+dnl These must be called before AM_PROG_LIBTOOL, because it may want
+dnl to call AC_CHECK_PROG.
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(LIPO, lipo, :)
+AC_CHECK_TOOL(NM, nm)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+AC_PROG_LN_S
+
+GCC_NO_EXECUTABLES
+AC_PROG_CC
+AC_PROG_CPP_WERROR
+
+# Check for decimal float support.
+AC_CACHE_CHECK([whether decimal floating point is supported], [libgcc_cv_dfp],
+ [AC_COMPILE_IFELSE([_Decimal32 x;], [libgcc_cv_dfp=yes],
+ [libgcc_cv_dfp=no])])
+decimal_float=$libgcc_cv_dfp
+AC_SUBST(decimal_float)
+
+
+# Collect host-machine-specific information.
+. ${srcdir}/config.host
+
+# Conditionalize the makefile for this target machine.
+tmake_file_=
+for f in ${tmake_file}
+do
+ if test -f ${srcdir}/config/$f
+ then
+ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
+ fi
+done
+tmake_file="${tmake_file_}"
+AC_SUBST(tmake_file)
+
+# We need multilib support.
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_COMMANDS([default],
+ [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+if test -n "$CONFIG_FILES"; then
+ # FIXME: We shouldn't need to set ac_file
+ ac_file=Makefile
+ . ${libgcc_topdir}/config-ml.in
+fi]],
+[[srcdir=${srcdir}
+host=${host}
+target=${target}
+with_target_subdir=${with_target_subdir}
+with_multisubdir=${with_multisubdir}
+ac_configure_args="--enable-multilib ${ac_configure_args}"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+libgcc_topdir=${libgcc_topdir}
+CC="${CC}"
+]])
+AC_OUTPUT
diff -Nurp trunk/libgcc/empty.mk fsf-branch/libgcc/empty.mk
--- trunk/libgcc/empty.mk 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/empty.mk 2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,2 @@
+# Empty. This file exists to suppress errors in the parent Makefile
+# when a variable (e.g. LIB2ADD) is empty.
diff -Nurp trunk/libgcc/shared-object.mk fsf-branch/libgcc/shared-object.mk
--- trunk/libgcc/shared-object.mk 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/shared-object.mk 2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,34 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items). On each inclusion, we advance $o to the next element.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+base := $(basename $(notdir $o))
+
+ifeq ($(suffix $o),.c)
+
+$(base)$(objext): $o
+ $(gcc_compile) $(c_flags) -c $< $(vis_hide)
+
+$(base)_s$(objext): $o
+ $(gcc_s_compile) $(c_flags) -c $<
+
+else
+
+ifneq ($(suffix $o),.S)
+ifneq ($(suffix $o),.asm)
+$(error Unsupported file type: $o)
+endif
+endif
+
+$(base)$(objext): $o $(base).vis
+ $(gcc_compile) -c -xassembler-with-cpp -include $*.vis $<
+
+$(base).vis: $(base)_s$(objext)
+ $(gen-hide-list)
+
+$(base)_s$(objext): $o
+ $(gcc_s_compile) -c -xassembler-with-cpp $<
+
+endif
diff -Nurp trunk/libgcc/siditi-object.mk fsf-branch/libgcc/siditi-object.mk
--- trunk/libgcc/siditi-object.mk 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/siditi-object.mk 2006-11-26 12:46:54.000000000 -0500
@@ -0,0 +1,22 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items). On each inclusion, we advance $o to the next element.
+# $(iter-labels) and $(iter-sizes) are also advanced.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+$o-label := $(firstword $(iter-labels))
+iter-labels := $(wordlist 2,$(words $(iter-labels)),$(iter-labels))
+
+$o-size := $(firstword $(iter-sizes))
+iter-sizes := $(wordlist 2,$(words $(iter-sizes)),$(iter-sizes))
+
+$o$(objext): %$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c $(vis_hide) \
+ -DLIBGCC2_UNITS_PER_WORD=$($*-size)
+
+ifeq ($(enable_shared),yes)
+$(o)_s$(objext): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+ $(gcc_s_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c \
+ -DLIBGCC2_UNITS_PER_WORD=$($*-size)
+endif
diff -Nurp trunk/libgcc/static-object.mk fsf-branch/libgcc/static-object.mk
--- trunk/libgcc/static-object.mk 1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/static-object.mk 2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,25 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items). On each inclusion, we advance $o to the next element.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+base := $(basename $(notdir $o))
+
+ifeq ($(suffix $o),.c)
+
+$(base)$(objext): $o
+ $(gcc_compile) $(c_flags) -c $< $(vis_hide)
+
+else
+
+ifneq ($(suffix $o),.S)
+ifneq ($(suffix $o),.asm)
+$(error Unsupported file type: $o)
+endif
+endif
+
+$(base)$(objext): $o
+ $(gcc_compile) -c -xassembler-with-cpp $<
+
+endif
next prev parent reply other threads:[~2006-12-19 19:18 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-17 3:15 Daniel Jacobowitz
2006-12-17 3:48 ` Daniel Jacobowitz
2006-12-19 16:09 ` Paolo Bonzini
2006-12-19 19:18 ` Daniel Jacobowitz [this message]
2006-12-19 20:06 ` Paolo Bonzini
2006-12-19 20:26 ` Daniel Jacobowitz
2006-12-20 7:56 ` Paolo Bonzini
2006-12-29 2:09 ` Daniel Jacobowitz
2006-12-29 10:55 ` Paolo Bonzini
2006-12-20 0:23 ` Mike Stump
2006-12-20 0:35 ` Daniel Jacobowitz
2006-12-29 11:27 ` Paolo Bonzini
2006-12-29 14:50 ` Daniel Jacobowitz
2006-12-29 15:29 ` Paolo Bonzini
2006-12-29 16:13 ` Daniel Jacobowitz
2006-12-29 16:31 ` Paolo Bonzini
2006-12-29 16:36 ` Daniel Jacobowitz
2006-12-29 16:42 ` Paolo Bonzini
2006-12-29 18:01 ` Daniel Jacobowitz
2006-12-30 8:20 ` Paolo Bonzini
2006-12-30 20:19 ` Daniel Jacobowitz
2006-12-31 18:43 ` Paolo Bonzini
2006-12-31 19:56 ` Daniel Jacobowitz
2007-01-01 18:10 ` Paolo Bonzini
2007-01-01 21:14 ` Mike Stump
2007-01-08 18:17 ` Steve Ellcey
2007-01-08 18:47 ` Daniel Jacobowitz
2007-01-08 22:32 ` Steve Ellcey
2007-01-08 22:51 ` Daniel Jacobowitz
2007-01-04 12:32 ` Andreas Schwab
2007-01-04 14:05 ` Daniel Jacobowitz
2007-01-04 14:57 ` Marcin Dalecki
2007-01-04 15:02 ` Daniel Jacobowitz
2007-01-04 15:09 ` Paolo Bonzini
2007-01-04 15:32 ` Marcin Dalecki
2007-01-04 15:39 ` Paolo Bonzini
2007-01-04 18:05 ` Marcin Dalecki
2007-01-04 16:13 ` Marcin Dalecki
2007-01-04 16:34 ` Daniel Jacobowitz
2007-01-04 17:13 ` Marcin Dalecki
2007-01-04 16:52 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061219191730.GA32355@nevyn.them.org \
--to=drow@false.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=mark@codesourcery.com \
--cc=paolo.bonzini@lu.unisi.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).