mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-26 12:23:59 +08:00
gcc.c (init_gcc_specs): If HAVE_LD_AS_NEEDED, link with -lgcc --as-needed -lgcc_s --no-as-needed by default.
* gcc.c (init_gcc_specs): If HAVE_LD_AS_NEEDED, link with -lgcc --as-needed -lgcc_s --no-as-needed by default. * configure.ac (HAVE_LD_AS_NEEDED): Check for ld --as-needed. * configure: Rebuilt. * config.in: Rebuilt. * Makefile.in (stage1-start): Copy also libgcc_s*$(SHLIB_EXT). (stage2-start, stage3-start, stage4-start): Likewise. (stageprofile-start, stagefeedback-start): Likewise. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r80302
This commit is contained in:
parent
45dcc026e5
commit
765f1bf9e4
@ -1,3 +1,15 @@
|
||||
2004-04-01 Alan Modra <amodra@bigpond.net.au>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c (init_gcc_specs): If HAVE_LD_AS_NEEDED, link with
|
||||
-lgcc --as-needed -lgcc_s --no-as-needed by default.
|
||||
* configure.ac (HAVE_LD_AS_NEEDED): Check for ld --as-needed.
|
||||
* configure: Rebuilt.
|
||||
* config.in: Rebuilt.
|
||||
* Makefile.in (stage1-start): Copy also libgcc_s*$(SHLIB_EXT).
|
||||
(stage2-start, stage3-start, stage4-start): Likewise.
|
||||
(stageprofile-start, stagefeedback-start): Likewise.
|
||||
|
||||
2004-04-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/sparc/sparc.h (DITF_CONVERSION_LIBFUNCS): Define to 0.
|
||||
|
@ -3639,6 +3639,7 @@ stage1-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stage1/libgcc.a stage1/libgcc_eh.a stage1/libgcov.a
|
||||
-rm -f stage1/libgcc_s*$(SHLIB_EXT)
|
||||
-cp libgcc.a stage1
|
||||
-$(RANLIB_FOR_TARGET) stage1/libgcc.a
|
||||
-cp libgcov.a stage1
|
||||
@ -3646,6 +3647,7 @@ stage1-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage1; \
|
||||
$(RANLIB_FOR_TARGET) stage1/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stage1
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stage1/$${f} . ; \
|
||||
else true; \
|
||||
@ -3672,6 +3674,7 @@ stage2-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stage2/libgcc.a stage2/libgcov.a stage2/libgcc_eh.a
|
||||
-rm -f stage2/libgcc_s*$(SHLIB_EXT)
|
||||
-cp libgcc.a stage2
|
||||
-$(RANLIB_FOR_TARGET) stage2/libgcc.a
|
||||
-cp libgcov.a stage2
|
||||
@ -3679,6 +3682,7 @@ stage2-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage2; \
|
||||
$(RANLIB_FOR_TARGET) stage2/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stage2
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stage2/$${f} . ; \
|
||||
else true; \
|
||||
@ -3701,6 +3705,7 @@ stage3-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stage3/libgcc.a stage3/libgcov.a stage3/libgcc_eh.a
|
||||
-rm -f stage3/libgcc_s*$(SHLIB_EXT)
|
||||
-cp libgcc.a stage3
|
||||
-$(RANLIB_FOR_TARGET) stage3/libgcc.a
|
||||
-cp libgcov.a stage3
|
||||
@ -3708,6 +3713,7 @@ stage3-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage3; \
|
||||
$(RANLIB_FOR_TARGET) stage3/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stage3
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stage3/$${f} . ; \
|
||||
else true; \
|
||||
@ -3730,6 +3736,7 @@ stage4-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stage4/libgcc.a stage4/libgcov.a stage4/libgcc_eh.a
|
||||
-rm -f stage4/libgcc_s*$(SHLIB_EXT)
|
||||
-cp libgcc.a stage4
|
||||
-$(RANLIB_FOR_TARGET) stage4/libgcc.a
|
||||
-cp libgcov.a stage4
|
||||
@ -3737,6 +3744,7 @@ stage4-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage4; \
|
||||
$(RANLIB_FOR_TARGET) stage4/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stage4
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stage4/$${f} . ; \
|
||||
else true; \
|
||||
@ -3757,6 +3765,7 @@ stageprofile-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stageprofile && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stageprofile && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stageprofile/libgcc.a stageprofile/libgcov.a stageprofile/libgcc_eh.a
|
||||
-rm -f stageprofile/libgcc_s*$(SHLIB_EXT)
|
||||
-cp libgcc.a stageprofile
|
||||
-$(RANLIB_FOR_TARGET) stageprofile/libgcc.a
|
||||
-cp libgcov.a stageprofile
|
||||
@ -3764,6 +3773,7 @@ stageprofile-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stageprofile; \
|
||||
$(RANLIB_FOR_TARGET) stageprofile/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stageprofile
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stageprofile/$${f} . ; \
|
||||
else true; \
|
||||
@ -3784,6 +3794,7 @@ stagefeedback-start:
|
||||
-if [ -f ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../ld$(exeext) .) ; else true ; fi
|
||||
-if [ -f collect-ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||
-rm -f stagefeedback/libgcc.a stagefeedback/libgcov.a stagefeedback/libgcc_eh.a
|
||||
-rm -f stagefeedback/libgcc_s*$(SHLIB_EXT)
|
||||
-rm -f *.da
|
||||
-for dir in fixinc po testsuite $(SUBDIRS); \
|
||||
do \
|
||||
@ -3796,6 +3807,7 @@ stagefeedback-start:
|
||||
-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stagefeedback; \
|
||||
$(RANLIB_FOR_TARGET) stagefeedback/libgcc_eh.a; \
|
||||
fi
|
||||
-cp libgcc_s*$(SHLIB_EXT) stagefeedback
|
||||
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
|
||||
cp stagefeedback/$${f} . ; \
|
||||
else true; \
|
||||
|
@ -306,6 +306,9 @@
|
||||
/* Define to 1 if you have the <ldfcn.h> header file. */
|
||||
#undef HAVE_LDFCN_H
|
||||
|
||||
/* Define if your linker supports --as-needed and --no-as-needed options. */
|
||||
#undef HAVE_LD_AS_NEEDED
|
||||
|
||||
/* Define if your linker supports --eh-frame-hdr option. */
|
||||
#undef HAVE_LD_EH_FRAME_HDR
|
||||
|
||||
|
24
gcc/configure
vendored
24
gcc/configure
vendored
@ -11916,6 +11916,30 @@ echo "${ECHO_T}$gcc_cv_ld_pie" >&6
|
||||
# UNSORTED
|
||||
# --------
|
||||
|
||||
echo "$as_me:$LINENO: checking linker --as-needed support" >&5
|
||||
echo $ECHO_N "checking linker --as-needed support... $ECHO_C" >&6
|
||||
gcc_cv_ld_as_needed=no
|
||||
if test $in_tree_ld = yes ; then
|
||||
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
|
||||
&& test $in_tree_ld_is_elf = yes; then
|
||||
gcc_cv_ld_as_needed=yes
|
||||
fi
|
||||
elif test x$gcc_cv_ld != x; then
|
||||
# Check if linker supports --as-needed and --no-as-needed options
|
||||
if $gcc_cv_ld --help 2>/dev/null | grep as-needed > /dev/null; then
|
||||
gcc_cv_ld_as_needed=yes
|
||||
fi
|
||||
fi
|
||||
if test x"$gcc_cv_ld_as_needed" = xyes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_LD_AS_NEEDED 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $gcc_cv_ld_as_needed" >&5
|
||||
echo "${ECHO_T}$gcc_cv_ld_as_needed" >&6
|
||||
|
||||
if test x$with_sysroot = x && test x$host = x$target \
|
||||
&& test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then
|
||||
|
||||
|
@ -2744,6 +2744,25 @@ AC_MSG_RESULT($gcc_cv_ld_pie)
|
||||
# UNSORTED
|
||||
# --------
|
||||
|
||||
AC_MSG_CHECKING(linker --as-needed support)
|
||||
gcc_cv_ld_as_needed=no
|
||||
if test $in_tree_ld = yes ; then
|
||||
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
|
||||
&& test $in_tree_ld_is_elf = yes; then
|
||||
gcc_cv_ld_as_needed=yes
|
||||
fi
|
||||
elif test x$gcc_cv_ld != x; then
|
||||
# Check if linker supports --as-needed and --no-as-needed options
|
||||
if $gcc_cv_ld --help 2>/dev/null | grep as-needed > /dev/null; then
|
||||
gcc_cv_ld_as_needed=yes
|
||||
fi
|
||||
fi
|
||||
if test x"$gcc_cv_ld_as_needed" = xyes; then
|
||||
AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
|
||||
[Define if your linker supports --as-needed and --no-as-needed options.])
|
||||
fi
|
||||
AC_MSG_RESULT($gcc_cv_ld_as_needed)
|
||||
|
||||
if test x$with_sysroot = x && test x$host = x$target \
|
||||
&& test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then
|
||||
AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
|
||||
|
@ -1533,6 +1533,12 @@ init_gcc_specs (struct obstack *obstack, const char *shared_name,
|
||||
|
||||
buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name,
|
||||
"}%{!static:%{!static-libgcc:",
|
||||
#ifdef HAVE_LD_AS_NEEDED
|
||||
"%{!shared-libgcc:", static_name,
|
||||
" --as-needed ", shared_name, " --no-as-needed}"
|
||||
"%{shared-libgcc:", shared_name, "%{!shared: ", static_name,
|
||||
"}",
|
||||
#else
|
||||
"%{!shared:%{!shared-libgcc:", static_name, " ",
|
||||
eh_name, "}%{shared-libgcc:", shared_name, " ",
|
||||
static_name, "}}%{shared:",
|
||||
@ -1541,6 +1547,7 @@ init_gcc_specs (struct obstack *obstack, const char *shared_name,
|
||||
"}%{!shared-libgcc:", static_name, "}",
|
||||
#else
|
||||
shared_name,
|
||||
#endif
|
||||
#endif
|
||||
"}}}", NULL);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user