PATCH: bootstrap/17684: /usr/ccs/bin/ld: Can't create libgcc_s.sl
H. J. Lu
hjl@lucon.org
Mon Sep 27 18:23:00 GMT 2004
We should create a temporary file first and rename it later. But I am
not 100% sure if this patch is parallel build safe.
H.J.
-----
2004-09-27 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/17684
* config/t-libunwind-elf (SHLIBUNWIND_LINK): Use a temporary
file for the shared library to be created.
* config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
* config/t-slibgcc-elf-ver (SHLIB_LINK): Likewise.
* config/t-slibgcc-sld (SHLIB_LINK): Likewise.
--- gcc/config/t-libunwind-elf.busy 2004-09-08 08:16:15.000000000 -0700
+++ gcc/config/t-libunwind-elf 2004-09-27 08:47:50.000000000 -0700
@@ -10,9 +10,10 @@ SHLIBUNWIND_NAME = @shlib_dir@@shlib_so_
SHLIBUNWIND_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared \
-nodefaultlibs -Wl,-h,$(SHLIBUNWIND_SONAME) \
- -Wl,-z,text -Wl,-z,defs \
- -o $(SHLIBUNWIND_NAME) @multilib_flags@ $(SHLIB_OBJS) -lc && \
- rm -f $(SHLIB_SOLINK) && \
+ -Wl,-z,text -Wl,-z,defs -o $(SHLIBUNWIND_NAME).tmp \
+ @multilib_flags@ $(SHLIB_OBJS) -lc && \
+ rm -f $(SHLIB_SOLINK) $(SHLIBUNWIND_NAME) && \
+ mv $(SHLIBUNWIND_NAME).tmp $(SHLIBUNWIND_NAME) && \
$(LN_S) $(SHLIBUNWIND_NAME) $(SHLIB_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
--- gcc/config/t-slibgcc-darwin.busy 2004-02-23 13:24:33.000000000 -0800
+++ gcc/config/t-slibgcc-darwin 2004-09-27 08:48:21.000000000 -0700
@@ -12,10 +12,11 @@ SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
-Wl,-install_name,$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME) \
- -Wl,-flat_namespace -o $(SHLIB_NAME) \
+ -Wl,-flat_namespace -o $(SHLIB_NAME).tmp \
$(SHLIB_VERSTRING) \
@multilib_flags@ $(SHLIB_OBJS) -lc && \
- rm -f $(SHLIB_SOLINK) && \
+ rm -f $(SHLIB_SOLINK) $(SHLIB_NAME).tmp && \
+ mv $(SHLIB_NAME).tmp $(SHLIB_NAME) && \
$(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
--- gcc/config/t-slibgcc-elf-ver.busy 2004-02-23 13:24:33.000000000 -0800
+++ gcc/config/t-slibgcc-elf-ver 2004-09-27 08:48:59.000000000 -0700
@@ -14,8 +14,9 @@ SHLIB_LC = -lc
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,--soname=$(SHLIB_SONAME) \
-Wl,--version-script=$(SHLIB_MAP) \
- -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \
- rm -f $(SHLIB_SOLINK) && \
+ -o $(SHLIB_NAME).tmp @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \
+ rm -f $(SHLIB_SOLINK) $(SHLIB_NAME) && \
+ mv $(SHLIB_NAME).tmp $(SHLIB_NAME) && \
$(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
--- gcc/config/t-slibgcc-sld.busy 2004-02-23 13:24:33.000000000 -0800
+++ gcc/config/t-slibgcc-sld 2004-09-27 08:49:20.000000000 -0700
@@ -10,9 +10,10 @@ SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
- -Wl,-M,$(SHLIB_MAP) -o $(SHLIB_NAME) \
+ -Wl,-M,$(SHLIB_MAP) -o $(SHLIB_NAME).tmp \
@multilib_flags@ $(SHLIB_OBJS) -lc && \
- rm -f $(SHLIB_SOLINK) && \
+ rm -f $(SHLIB_SOLINK) $(SHLIB_NAME) && \
+ mv $(SHLIB_NAME).tmp $(SHLIB_NAME) && \
$(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
-------------- next part --------------
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* Makefile.tpl (REALLY_SET_LIB_PATH): Add @SET_GCC_LIB_PATH@.
(HOST_EXPORTS]): Add @SET_GCC_LIB_PATH@. Set and export
SET_GCC_LIB_PATH_CMD.
(BASE_TARGET_EXPORTS): Likewise.
* Makefile.in: Regenerated.
* configure.in (SET_GCC_LIB_PATH): Set and substitute.
* configure: Regenerated.
config/
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* gcc-lib-path.m4: New file.
gcc/
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* Makefile.in (@set_gcc_lib_path@): Added.
* configure.ac: Include ../config/gcc-lib-path.m4. Use
TL_AC_GNU_MAKE_GCC_LIB_PATH.
* configure: Regenerated.
--- gcc/Makefile.tpl.ld-path 2004-09-13 12:41:58.000000000 -0700
+++ gcc/Makefile.tpl 2004-09-23 15:20:28.000000000 -0700
@@ -104,6 +104,7 @@ SET_LIB_PATH = @SET_LIB_PATH@
# Some platforms don't like blank entries, so we remove duplicate,
# leading and trailing colons.
REALLY_SET_LIB_PATH = \
+ @SET_GCC_LIB_PATH@ \
$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH):$(TARGET_LIB_PATH):$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
# This is the list of directories to be built for the build system.
@@ -173,7 +174,9 @@ HOST_EXPORTS = \
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
- GMPINC="$(HOST_GMPINC)"; export GMPINC;
+ GMPINC="$(HOST_GMPINC)"; export GMPINC; \
+ SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ @SET_GCC_LIB_PATH@
# Similar, for later GCC stages.
STAGE_HOST_EXPORTS = \
@@ -207,7 +210,9 @@ BASE_TARGET_EXPORTS = \
LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
NM="$(NM_FOR_TARGET)"; export NM; \
RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES;
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ @SET_GCC_LIB_PATH@
RAW_CXX_TARGET_EXPORTS = \
$(BASE_TARGET_EXPORTS) \
--- gcc/config/gcc-lib-path.m4.ld-path 2004-09-23 15:18:51.000000000 -0700
+++ gcc/config/gcc-lib-path.m4 2004-09-23 15:18:51.000000000 -0700
@@ -0,0 +1,15 @@
+AC_DEFUN([TL_AC_GNU_MAKE_GCC_LIB_PATH],
+[
+if test x"$SET_GCC_LIB_PATH_CMD" != x; then
+ # SET_GCC_LIB_PATH_CMD is "XXX=path; export XXX;". It is expanded to
+ #
+ # eval "set_gcc_lib_path=XXX=path; export XXX;"
+ #
+ eval "set_gcc_lib_path=$SET_GCC_LIB_PATH_CMD"
+ # It will set set_gcc_lib_path to "export XXX=path" for GNU make.
+ set_gcc_lib_path="export $set_gcc_lib_path"
+else
+ set_gcc_lib_path=
+fi
+AC_SUBST(set_gcc_lib_path)
+])dnl
--- gcc/configure.in.ld-path 2004-09-21 08:47:27.000000000 -0700
+++ gcc/configure.in 2004-09-23 15:18:51.000000000 -0700
@@ -2297,4 +2297,24 @@ case ${enable_werror} in
esac
AC_SUBST(stage2_werror_flag)
+# If gcc is built natively with shared library enabled, set
+# $RPATH_ENVVAR to make sure the newly built gcc shared librares are
+# used.
+SET_GCC_LIB_PATH=
+if test -d ${srcdir}/gcc && test x${is_cross_compiler} = xno; then
+ case "${enable_shared}" in
+ no | "") ;;
+ *)
+ eval "d=\$$RPATH_ENVVAR"
+ if test x"$d" != x; then
+ d="$pwd/gcc:$d"
+ else
+ d="$pwd/gcc"
+ fi
+ SET_GCC_LIB_PATH="\$(RPATH_ENVVAR)=$d; export \$(RPATH_ENVVAR);"
+ ;;
+ esac
+fi
+AC_SUBST(SET_GCC_LIB_PATH)
+
AC_OUTPUT(Makefile)
--- gcc/gcc/Makefile.in.ld-path 2004-09-23 09:16:12.000000000 -0700
+++ gcc/gcc/Makefile.in 2004-09-23 15:18:51.000000000 -0700
@@ -1001,6 +1001,9 @@ LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udi
# language hooks, generated by configure
@language_hooks@
+# Set up library path if needed.
+@set_gcc_lib_path@
+
# per-language makefile fragments
ifneq ($(LANG_MAKEFRAGS),)
include $(LANG_MAKEFRAGS)
--- gcc/gcc/configure.ac.ld-path 2004-09-23 15:18:50.000000000 -0700
+++ gcc/gcc/configure.ac 2004-09-23 15:18:51.000000000 -0700
@@ -3274,6 +3274,9 @@ AC_SUBST(target_cpu_default)
AC_SUBST_FILE(language_hooks)
+sinclude(../config/gcc-lib-path.m4)
+TL_AC_GNU_MAKE_GCC_LIB_PATH
+
# Echo link setup.
if test x${build} = x${host} ; then
if test x${host} = x${target} ; then
-------------- next part --------------
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* Makefile.tpl (REALLY_SET_LIB_PATH): Add @SET_GCC_LIB_PATH@.
(configure-target-[+module+]): Add @SET_GCC_LIB_PATH@. Set and
export SET_GCC_LIB_PATH_CMD.
(configure-gcc): Likewise.
* Makefile.in: Regenerated.
* configure.in (SET_GCC_LIB_PATH): Set and substitute.
* configure: Regenerated.
config/
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* gcc-lib-path.m4: New file.
gcc/
2004-09-23 H.J. Lu <hongjiu.lu@intel.com>
* Makefile.in (@set_gcc_lib_path@): Added.
* configure.ac: Include ../config/gcc-lib-path.m4. Use
TL_AC_GNU_MAKE_GCC_LIB_PATH.
* configure: Regenerated.
--- gcc/Makefile.tpl.ld-path 2004-07-08 16:43:28.000000000 -0700
+++ gcc/Makefile.tpl 2004-09-23 15:09:49.000000000 -0700
@@ -103,6 +103,7 @@ SET_LIB_PATH = @SET_LIB_PATH@
# Some platforms don't like blank entries, so we remove duplicate,
# leading and trailing colons.
REALLY_SET_LIB_PATH = \
+ @SET_GCC_LIB_PATH@ \
$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH):$(TARGET_LIB_PATH):$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
# This is the list of directories to be built for the build system.
@@ -973,6 +974,8 @@ ENDIF raw_cxx +]
NM="$(NM_FOR_TARGET)"; export NM; \
RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ @SET_GCC_LIB_PATH@ \
echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
case $(srcdir) in \
@@ -1095,6 +1098,8 @@ configure-gcc:
WINDRES="$(WINDRES)"; export WINDRES; \
OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
+ SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ @SET_GCC_LIB_PATH@ \
echo Configuring in gcc; \
cd gcc || exit 1; \
case $(srcdir) in \
--- gcc/config/gcc-lib-path.m4.ld-path 2004-09-23 15:09:49.000000000 -0700
+++ gcc/config/gcc-lib-path.m4 2004-09-23 15:11:51.000000000 -0700
@@ -0,0 +1,15 @@
+AC_DEFUN([TL_AC_GNU_MAKE_GCC_LIB_PATH],
+[
+if test x"$SET_GCC_LIB_PATH_CMD" != x; then
+ # SET_GCC_LIB_PATH_CMD is "XXX=path; export XXX;". It is expanded to
+ #
+ # eval "set_gcc_lib_path=XXX=path; export XXX;"
+ #
+ eval "set_gcc_lib_path=$SET_GCC_LIB_PATH_CMD"
+ # It will set set_gcc_lib_path to "export XXX=path" for GNU make.
+ set_gcc_lib_path="export $set_gcc_lib_path"
+else
+ set_gcc_lib_path=
+fi
+AC_SUBST(set_gcc_lib_path)
+])dnl
--- gcc/configure.in.ld-path 2004-06-26 21:31:19.000000000 -0700
+++ gcc/configure.in 2004-09-23 15:09:49.000000000 -0700
@@ -2145,4 +2145,24 @@ fi
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl
+# If gcc is built natively with shared library enabled, set
+# $RPATH_ENVVAR to make sure the newly built gcc shared librares are
+# used.
+SET_GCC_LIB_PATH=
+if test -d ${srcdir}/gcc && test x${is_cross_compiler} = xno; then
+ case "${enable_shared}" in
+ no | "") ;;
+ *)
+ eval "d=\$$RPATH_ENVVAR"
+ if test x"$d" != x; then
+ d="$pwd/gcc:$d"
+ else
+ d="$pwd/gcc"
+ fi
+ SET_GCC_LIB_PATH="\$(RPATH_ENVVAR)=$d; export \$(RPATH_ENVVAR);"
+ ;;
+ esac
+fi
+AC_SUBST(SET_GCC_LIB_PATH)
+
AC_OUTPUT(Makefile)
--- gcc/gcc/Makefile.in.ld-path 2004-09-23 15:09:49.000000000 -0700
+++ gcc/gcc/Makefile.in 2004-09-23 15:09:49.000000000 -0700
@@ -951,6 +951,9 @@ LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udi
# language hooks, generated by configure
@language_hooks@
+# Set up library path if needed.
+@set_gcc_lib_path@
+
# per-language makefile fragments
ifneq ($(LANG_MAKEFRAGS),)
include $(LANG_MAKEFRAGS)
--- gcc/gcc/configure.ac.ld-path 2004-09-23 15:09:49.000000000 -0700
+++ gcc/gcc/configure.ac 2004-09-23 15:09:49.000000000 -0700
@@ -3139,6 +3139,9 @@ AC_SUBST(target_cpu_default)
AC_SUBST_FILE(language_hooks)
+sinclude(../config/gcc-lib-path.m4)
+TL_AC_GNU_MAKE_GCC_LIB_PATH
+
# If it doesn't already exist, create document directory
echo "checking for the document directory." 1>&2
if test -d doc ; then
More information about the Gcc-patches
mailing list