From: H.J. Lu Date: Wed, 7 Jul 2004 20:29:13 +0000 (+0000) Subject: collect2.c (dump_file): Don't call cplus_demangle if HAVE_LD_DEMANGLE is defined. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d594623ade98699f505a959c91f8f58fc9828255;p=gcc.git collect2.c (dump_file): Don't call cplus_demangle if HAVE_LD_DEMANGLE is defined. 2004-07-07 H.J. Lu * collect2.c (dump_file): Don't call cplus_demangle if HAVE_LD_DEMANGLE is defined. (main): Pass "--demangle" to ld if no_demangle is not 0 and HAVE_LD_DEMANGLE is defined. Don't set current_demangling_style if HAVE_LD_DEMANGLE is defined. * configure.ac (--with-demangler-in-ld): Added (HAVE_LD_DEMANGLE): Define if ld supports --demangle when --with-demangler-in-ld is used. * config.in: Regenerated. * configure: Likewise. From-SVN: r84227 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f16f998e848..5d5cef42c0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2004-07-07 H.J. Lu + + * collect2.c (dump_file): Don't call cplus_demangle if + HAVE_LD_DEMANGLE is defined. + (main): Pass "--demangle" to ld if no_demangle is not 0 and + HAVE_LD_DEMANGLE is defined. Don't set current_demangling_style + if HAVE_LD_DEMANGLE is defined. + + * configure.ac (--with-demangler-in-ld): Added + (HAVE_LD_DEMANGLE): Define if ld supports --demangle when + --with-demangler-in-ld is used. + * config.in: Regenerated. + * configure: Likewise. + 2004-07-07 Roger Sayle * config/rs6000/rs6000.c (struct processor_costs): Add new fields diff --git a/gcc/collect2.c b/gcc/collect2.c index b9c7cae8a5e..79f7885e6e7 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -491,10 +491,14 @@ dump_file (const char *name) if (!strncmp (p, USER_LABEL_PREFIX, strlen (USER_LABEL_PREFIX))) p += strlen (USER_LABEL_PREFIX); +#ifdef HAVE_LD_DEMANGLE + result = 0; +#else if (no_demangle) result = 0; else result = cplus_demangle (p, DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE); +#endif if (result) { @@ -841,8 +845,8 @@ main (int argc, char **argv) /* Do not invoke xcalloc before this point, since locale needs to be set first, in case a diagnostic is issued. */ - ld1 = (const char **)(ld1_argv = xcalloc(sizeof (char *), argc+3)); - ld2 = (const char **)(ld2_argv = xcalloc(sizeof (char *), argc+10)); + ld1 = (const char **)(ld1_argv = xcalloc(sizeof (char *), argc+4)); + ld2 = (const char **)(ld2_argv = xcalloc(sizeof (char *), argc+11)); object = (const char **)(object_lst = xcalloc(sizeof (char *), argc)); #ifdef DEBUG @@ -873,7 +877,9 @@ main (int argc, char **argv) obstack_begin (&temporary_obstack, 0); temporary_firstobj = obstack_alloc (&temporary_obstack, 0); +#ifndef HAVE_LD_DEMANGLE current_demangling_style = auto_demangling; +#endif p = getenv ("COLLECT_GCC_OPTIONS"); while (p && *p) { @@ -1063,6 +1069,10 @@ main (int argc, char **argv) /* After the first file, put in the c++ rt0. */ first_file = 1; +#ifdef HAVE_LD_DEMANGLE + if (!no_demangle) + *ld1++ = *ld2++ = "--demangle"; +#endif while ((arg = *++argv) != (char *) 0) { *ld1++ = *ld2++ = arg; diff --git a/gcc/config.in b/gcc/config.in index 39d9e535f99..ab3a6708329 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -341,6 +341,9 @@ /* Define if your linker supports --as-needed and --no-as-needed options. */ #undef HAVE_LD_AS_NEEDED +/* Define if your linker supports --demangle option. */ +#undef HAVE_LD_DEMANGLE + /* Define if your linker supports --eh-frame-hdr option. */ #undef HAVE_LD_EH_FRAME_HDR diff --git a/gcc/configure b/gcc/configure index be9f4bd8fdf..3f5a180148c 100755 --- a/gcc/configure +++ b/gcc/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP strict1_warn warn_cflags WERROR nocommon_flag TREEBROWSER EGREP valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR onestep SET_MAKE AWK LN_S LN RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON stage1_cflags COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file FORBUILD PACKAGE VERSION USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS CROSS ALL SYSTEM_HEADER_DIR inhibit_libc BUILD_PREFIX BUILD_PREFIX_1 CC_FOR_BUILD BUILD_CFLAGS STMP_FIXINC STMP_FIXPROTO collect2 libgcc_visibility GGC zlibdir zlibinc MAINT ANDER BANSHEEINC BANSHEELIB gcc_tooldir dollar slibdir objdir subdirs srcdir all_boot_languages all_compilers all_gtfiles all_gtfiles_files_langs all_gtfiles_files_files all_lang_makefrags all_lang_makefiles all_languages all_stagestuff build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines check_languages cc_set_by_configure quoted_cc_set_by_configure cpp_install_dir xmake_file tmake_file extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir libstdcxx_incdir gcc_version gcc_version_full gcc_version_trigger host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file stage_prefix_set_by_configure quoted_stage_prefix_set_by_configure symbolic_link thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines target_noncanonical c_target_objs cxx_target_objs target_cpu_default GMPLIBS GMPINC LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP strict1_warn warn_cflags WERROR nocommon_flag TREEBROWSER EGREP valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR onestep SET_MAKE AWK LN_S RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON stage1_cflags COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file FORBUILD PACKAGE VERSION USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS CROSS ALL SYSTEM_HEADER_DIR inhibit_libc BUILD_PREFIX BUILD_PREFIX_1 CC_FOR_BUILD BUILD_CFLAGS STMP_FIXINC STMP_FIXPROTO collect2 libgcc_visibility GGC zlibdir zlibinc MAINT ANDER BANSHEEINC BANSHEELIB gcc_tooldir dollar slibdir objdir subdirs srcdir all_boot_languages all_compilers all_gtfiles all_gtfiles_files_langs all_gtfiles_files_files all_lang_makefrags all_lang_makefiles all_languages all_stagestuff build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines check_languages cc_set_by_configure quoted_cc_set_by_configure cpp_install_dir xmake_file tmake_file extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir libstdcxx_incdir gcc_version gcc_version_full gcc_version_trigger host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file stage_prefix_set_by_configure quoted_stage_prefix_set_by_configure symbolic_link thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines target_noncanonical c_target_objs cxx_target_objs target_cpu_default GMPLIBS GMPINC LIBOBJS LTLIBOBJS' ac_subst_files='language_hooks' # Initialize some variables set by options. @@ -915,6 +915,7 @@ Optional Packages: (relative to PREFIX) as well as PREFIX/bin --with-gnu-ld arrange to work with GNU ld. --with-ld arrange to use the specified ld (full pathname) + --with-demangler-in-ld try to use demangler in GNU ld. --with-gnu-as arrange to work with GNU as --with-as arrange to use the specified as (full pathname) --with-stabs arrange to use stabs instead of host debug format @@ -1734,6 +1735,16 @@ else echo "${ECHO_T}no" >&6 fi +# With demangler in GNU ld + +# Check whether --with-demangler-in-ld or --without-demangler-in-ld was given. +if test "${with_demangler_in_ld+set}" = set; then + withval="$with_demangler_in_ld" + demangler_in_ld="$with_demangler_in_ld" +else + demangler_in_ld=no +fi; + # ---------------------- # Find default assembler # ---------------------- @@ -4949,32 +4960,7 @@ echo "${ECHO_T}no, and neither does ln, so using cp" >&6 fi fi -echo "$as_me:$LINENO: checking whether ln works" >&5 -echo $ECHO_N "checking whether ln works... $ECHO_C" >&6 -if test "${acx_cv_prog_LN+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f conftestdata_t -echo >conftestdata_f -if ln conftestdata_f conftestdata_t 2>/dev/null -then - acx_cv_prog_LN=ln -else - acx_cv_prog_LN=no -fi -rm -f conftestdata_f conftestdata_t - -fi -if test $acx_cv_prog_LN = no; then - LN="$LN_S" - echo "$as_me:$LINENO: result: no, using $LN" >&5 -echo "${ECHO_T}no, using $LN" >&6 -else - LN="$acx_cv_prog_LN" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -fi - +ACX_PROG_LN($LN_S) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 @@ -5255,7 +5241,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` - echo "configure:5258: version of makeinfo is $ac_prog_version" >&5 + echo "configure:5244: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[2-9]*) @@ -5687,68 +5673,7 @@ _ACEOF fi -echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 -echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6 -if test "${gcc_cv_header_string+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - gcc_cv_header_string=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -gcc_cv_header_string=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 -echo "${ECHO_T}$gcc_cv_header_string" >&6 -if test $gcc_cv_header_string = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STRING_WITH_STRINGS 1 -_ACEOF - -fi - +ACX_HEADER_STRING echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 if test "${ac_cv_header_sys_wait_h+set}" = set; then @@ -10928,6 +10853,31 @@ fi # Target-specific assembler checks. +if test x"$demangler_in_ld" = xyes; then + echo "$as_me:$LINENO: checking linker --demangle support" >&5 +echo $ECHO_N "checking linker --demangle support... $ECHO_C" >&6 + gcc_cv_ld_demangle=no + if test $in_tree_ld = yes; then + if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \ + gcc_cv_ld_demangle=yes + fi + elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then + # Check if the GNU linker supports --demangle option + if $gcc_cv_ld --help 2>/dev/null | grep no-demangle > /dev/null; then + gcc_cv_ld_demangle=yes + fi + fi + if test x"$gcc_cv_ld_demangle" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LD_DEMANGLE 1 +_ACEOF + + fi + echo "$as_me:$LINENO: result: $gcc_cv_ld_demangle" >&5 +echo "${ECHO_T}$gcc_cv_ld_demangle" >&6 +fi + case "$target" in # All TARGET_ABI_OSF targets. alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) @@ -12903,7 +12853,6 @@ s,@onestep@,$onestep,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@AWK@,$AWK,;t t s,@LN_S@,$LN_S,;t t -s,@LN@,$LN,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@ranlib_flags@,$ranlib_flags,;t t diff --git a/gcc/configure.ac b/gcc/configure.ac index 50dc9f3b226..d965c1147b3 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -211,6 +211,12 @@ else AC_MSG_RESULT(no) fi +# With demangler in GNU ld +AC_ARG_WITH(demangler-in-ld, +[ --with-demangler-in-ld try to use demangler in GNU ld.], +demangler_in_ld="$with_demangler_in_ld", +demangler_in_ld=no) + # ---------------------- # Find default assembler # ---------------------- @@ -2454,6 +2460,26 @@ fi # Target-specific assembler checks. +if test x"$demangler_in_ld" = xyes; then + AC_MSG_CHECKING(linker --demangle support) + gcc_cv_ld_demangle=no + if test $in_tree_ld = yes; then + if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \ + gcc_cv_ld_demangle=yes + fi + elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then + # Check if the GNU linker supports --demangle option + if $gcc_cv_ld --help 2>/dev/null | grep no-demangle > /dev/null; then + gcc_cv_ld_demangle=yes + fi + fi + if test x"$gcc_cv_ld_demangle" = xyes; then + AC_DEFINE(HAVE_LD_DEMANGLE, 1, +[Define if your linker supports --demangle option.]) + fi + AC_MSG_RESULT($gcc_cv_ld_demangle) +fi + case "$target" in # All TARGET_ABI_OSF targets. alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)