On Aug 11, 2011, at 1:52 PM, Paolo Bonzini wrote: > On 08/10/2011 01:14 PM, Rainer Orth wrote: >> * At the moment, SHLIB_LINK is used in gcc/Makefile.in and the various >> Make-lang.in fragments to check if the target supports a shared >> libgcc_s. I've introduced gcc/config/t-slibgcc (from t-slibgcc-dummy) >> for this, which sets SHLIB = true, adding that fragment to all targets >> in config.gcc that do. There may be a better way to handle this. > > Yes, there is no need to use $(shell) in the first place---you can use > ifeq/ifneq---and perhaps an AC_DEFINE will be even better. But I agree this > is the simplest way to fix it for now. > >> ** AIX: >> >> Both t-aix43 and t-aix52 SHLIB_* variables now live in >> rs6000/t-slibgcc-aix. They were identical except that the t-aix52 >> variant had been updated for cross-compilation. I haven't changed >> them to allow use of t-slibgcc, but that could perhaps be done as a >> followup. > > No need for that. > >> ** HP-UX: >> >> After editing the PA and IA-64 HP-UX SHLIB_* variables into a form to >> allow comparison with t-slibgcc, it turned out that the differences >> are actually minimal. I only needed to introduce INSTALL_SHLIB to >> allow for the install -m 555 of the shared libgcc_s only needed on >> HP-UX. > > Very nice. > >> BASEVER_c isn't available outside of gcc, so I need to parse $(CC) >> --version output instead. > > We could also (later) write an M4 macro to process gcc/BASE-VER and friends, > and substitute those into the Makefile. > >> While alpha/t-vms already extracted symbol information with objdump >> --syms, ia64/t-vms still used a hardcoded list >> (ia64/vms_symvec_libgcc_s.opt). Since it has the comment `It would >> be better to auto-generate this file.', I've omitted it, hoping that >> the alpha procedure also works on ia64. This obviously needs to be >> tested. > > Tristan, can you do that?
Ok for ia64/vms as there are currently other build issue with ia64/vms that I have to fix. I will fix that later too. Tristan. > >> ** Windows: >> >> While the windows code hasn't been touched apart from the move, the >> various t-* fragments are so interdependent that I could easily have >> made a mistake. > > Looks good. > >> * The test for sjlj exceptions was already (almost) duplicated 3 times >> in libgo (for C), libjava (for C++), and libobjc (for Objective-C). >> I've created just another copy from the libgo variant, but it would be >> better to centralize this. > > Please add a comment on top of it, so that we can take care of this later. > >> * There's another issue I haven't attacked yet: while currently >> libgcc/Makefile.in performs a couple of substitions on SHLIB_* >> variables, this shouldn't be necessary any longer: >> >> @multilib_dir@ $(MULTIDIR) >> @multilib_flags@ $(CFLAGS) -B./ >> @shlib_base_name@ libgcc_s >> @shlib_map_file@ $(mapfile) >> @shlib_objs@ $(objects) >> @shlib_slibdir@ $(shlib_slibdir) >> @shlib_slibdir_qual@ $(MULTIOSSUBDIR) >> >> There should be a better way to handle this. > > Indeed, but it can be done later. We can change this: > > 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) -B./,$(subst \ > @multilib_dir@,$(MULTIDIR),$(subst \ > @shlib_objs@,$(objects),$(subst \ > @shlib_base_name@,libgcc_s,$(subst \ > @shlib_map_file@,$(mapfile),$(subst \ > @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \ > @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))) > > to: > > DUMMY := $(shell $(mkinstalldirs) $(MULTIDIR)) > libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) > > and then change the definitions of SHLIB_LINK to rules for > libgcc_s$(SHLIB_EXT). Likewise for other cases. > >> Could affected OS port/target maintainers please give the patch a try? > > The patch is okay after it has been bootstrapped on IA64/VMS and Win32. > > Paolo