From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp001-out.apm-internet.net (smtp001-out.apm-internet.net [85.119.248.222]) by sourceware.org (Postfix) with ESMTPS id 1F7BD3857C48 for ; Sun, 4 Jul 2021 20:22:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1F7BD3857C48 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sandoe.co.uk Authentication-Results: sourceware.org; spf=none smtp.mailfrom=sandoe.co.uk Received: (qmail 51611 invoked from network); 4 Jul 2021 20:21:58 -0000 X-APM-Out-ID: 16254301185160 X-APM-Authkey: 257869/1(257869/1) 10 Received: from unknown (HELO ?192.168.1.214?) (81.138.1.83) by smtp001.apm-internet.net with SMTP; 4 Jul 2021 20:21:58 -0000 From: Iain Sandoe Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.21\)) Subject: [PATCH] Darwin, configury : Allow for specification and detection of dsymutil. Message-Id: <2905A42D-F5C1-4AF9-A2A5-A69E2A692710@sandoe.co.uk> Date: Sun, 4 Jul 2021 21:21:58 +0100 Cc: Joseph Myers To: GCC Patches X-Mailer: Apple Mail (2.3445.104.21) X-Spam-Status: No, score=-16.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_COUK, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Jul 2021 20:22:04 -0000 Hi, IMO this was an omission when the dsymutil program was added (before my time). Essentially, we have been =E2=80=98getting away with = it=E2=80=99 on Darwin because of (a) restrictions in DWARF versions and (b) that the installed tools handle a wide range of platform versions and archs. However, (a) is a barrier to moving Darwin to DWARF-4 or greater and (b) is no longer true for people who might build cross- toolchains for older Darwin (or, the motiovating case, for brand new Arm64 Darwin). In order to support necessary tests for (a) we produce a version record that can be tested. This replicates the logic used for =E2=80=98as=E2=80=99 and =E2=80=98ld=E2= =80=99 and now correctly reports for =E2=80=98-v=E2=80=99 and works with discovery of installed = =E2=80=9Cbinutils=E2=80=9D in the target dir (or for specific paths given). tested across the Darwin range and on crosses and canadian (native) crosses to powerpc and Arm64 darwin. Also tested on x86_64=20 and powerpc64 linux. OK for master? thanks Iain =3D=3D=3D In order to enable DWARF versions > 2 we need a sufficiently modern version of dsymutil (in addition to the assembler / linker). This allows the user to configure a different path from the installed one. In addition, there are several sources of dsymutil so we differentiate these in order to be get accurate version information. Signed-off-by: Iain Sandoe gcc/ChangeLog: * configure.ac: Handle --with-dsymutil in the same way as we do for the assembler and linker. (DEFAULT_DSYMUTIL): New. Extract the type and version for the dsymutil configured or found by the default searches. * config.in: Regenerated. * configure: Regenerated. * collect2.c (do_dsymutil): Handle locating dsymutil in the same way as for the assembler and linker. * config/darwin.h (DSYMUTIL): Delete. * gcc.c: Report a configured dsymutil correctly. ChangeLog: * Makefile.def: Add dsymutil defs. * Makefile.in: Regenerated. * Makefile.tpl: Add dsymutil to flags. * configure: Regenerated. * configure.ac: Add dsymutil to target and build recipes. --- Makefile.def | 1 + Makefile.in | 10 ++ Makefile.tpl | 9 + configure | 413 ++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 6 + gcc/collect2.c | 40 ++++- gcc/config.in | 12 ++ gcc/config/darwin.h | 2 - gcc/configure | 166 +++++++++++++++++- gcc/configure.ac | 96 +++++++++- gcc/exec-tool.in | 8 + gcc/gcc.c | 5 + 12 files changed, 757 insertions(+), 11 deletions(-) diff --git a/Makefile.def b/Makefile.def index c83d9c4a813..fbfdb6fee08 100644 --- a/Makefile.def +++ b/Makefile.def @@ -291,6 +291,7 @@ flags_to_pass =3D { flag=3D CFLAGS_FOR_TARGET ; }; flags_to_pass =3D { flag=3D CPPFLAGS_FOR_TARGET ; }; flags_to_pass =3D { flag=3D CXXFLAGS_FOR_TARGET ; }; flags_to_pass =3D { flag=3D DLLTOOL_FOR_TARGET ; }; +flags_to_pass =3D { flag=3D DSYMUTIL_FOR_TARGET ; }; flags_to_pass =3D { flag=3D FLAGS_FOR_TARGET ; }; flags_to_pass =3D { flag=3D GFORTRAN_FOR_TARGET ; }; flags_to_pass =3D { flag=3D GOC_FOR_TARGET ; }; diff --git a/Makefile.tpl b/Makefile.tpl index 6e0337fb48f..bffd85bd68e 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -162,6 +162,7 @@ BUILD_EXPORTS =3D \ GDC=3D"$(GDC_FOR_BUILD)"; export GDC; \ GDCFLAGS=3D"$(GDCFLAGS_FOR_BUILD)"; export GDCFLAGS; \ DLLTOOL=3D"$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ + DSYMUTIL=3D"$(DSYMUTIL_FOR_BUILD)"; export DSYMUTIL; \ LD=3D"$(LD_FOR_BUILD)"; export LD; \ LDFLAGS=3D"$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ NM=3D"$(NM_FOR_BUILD)"; export NM; \ @@ -203,6 +204,7 @@ HOST_EXPORTS =3D \ CC_FOR_BUILD=3D"$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ CXX_FOR_BUILD=3D"$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \ DLLTOOL=3D"$(DLLTOOL)"; export DLLTOOL; \ + DSYMUTIL=3D"$(DSYMUTIL)"; export DSYMUTIL; \ LD=3D"$(LD)"; export LD; \ LDFLAGS=3D"$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \ NM=3D"$(NM)"; export NM; \ @@ -215,6 +217,7 @@ HOST_EXPORTS =3D \ READELF=3D"$(READELF)"; export READELF; \ AR_FOR_TARGET=3D"$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \ AS_FOR_TARGET=3D"$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \ + DSYMUTIL_FOR_TARGET=3D"$(DSYMUTIL_FOR_TARGET)"; export = DSYMUTIL_FOR_TARGET; \ GCC_FOR_TARGET=3D"$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \ LD_FOR_TARGET=3D"$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \ NM_FOR_TARGET=3D"$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \ @@ -297,6 +300,7 @@ BASE_TARGET_EXPORTS =3D \ GOC=3D"$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; = export GOC; \ GDC=3D"$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; = export GDC; \ DLLTOOL=3D"$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ + DSYMUTIL=3D"$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL; \ LD=3D"$(COMPILER_LD_FOR_TARGET)"; export LD; \ LDFLAGS=3D"$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ LIPO=3D"$(LIPO_FOR_TARGET)"; export LIPO; \ @@ -359,6 +363,7 @@ CFLAGS_FOR_BUILD =3D @CFLAGS_FOR_BUILD@ CXXFLAGS_FOR_BUILD =3D @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD =3D @CXX_FOR_BUILD@ DLLTOOL_FOR_BUILD =3D @DLLTOOL_FOR_BUILD@ +DSYMUTIL_FOR_BUILD =3D @DSYMUTIL_FOR_BUILD@ GFORTRAN_FOR_BUILD =3D @GFORTRAN_FOR_BUILD@ GOC_FOR_BUILD =3D @GOC_FOR_BUILD@ GDC_FOR_BUILD =3D @GDC_FOR_BUILD@ @@ -409,6 +414,7 @@ AR_FLAGS =3D rc CC =3D @CC@ CXX =3D @CXX@ DLLTOOL =3D @DLLTOOL@ +DSYMUTIL =3D @DSYMUTIL@ LD =3D @LD@ LIPO =3D @LIPO@ NM =3D @NM@ @@ -519,6 +525,7 @@ GFORTRAN_FOR_TARGET=3D$(STAGE_CC_WRAPPER) = @GFORTRAN_FOR_TARGET@ GOC_FOR_TARGET=3D$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@ GDC_FOR_TARGET=3D$(STAGE_CC_WRAPPER) @GDC_FOR_TARGET@ DLLTOOL_FOR_TARGET=3D@DLLTOOL_FOR_TARGET@ +DSYMUTIL_FOR_TARGET=3D@DSYMUTIL_FOR_TARGET@ LD_FOR_TARGET=3D@LD_FOR_TARGET@ =20 LIPO_FOR_TARGET=3D@LIPO_FOR_TARGET@ @@ -644,6 +651,7 @@ EXTRA_HOST_FLAGS =3D \ 'CC=3D$(CC)' \ 'CXX=3D$(CXX)' \ 'DLLTOOL=3D$(DLLTOOL)' \ + 'DSYMUTIL=3D$(DSYMUTIL)' \ 'GFORTRAN=3D$(GFORTRAN)' \ 'GOC=3D$(GOC)' \ 'GDC=3D$(GDC)' \ @@ -702,6 +710,7 @@ EXTRA_TARGET_FLAGS =3D \ $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'CXXFLAGS=3D$$(CXXFLAGS_FOR_TARGET)' \ 'DLLTOOL=3D$$(DLLTOOL_FOR_TARGET)' \ + 'DSYMUTIL=3D$$(DSYMUTIL_FOR_TARGET)' \ 'GFORTRAN=3D$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) = $$(TFLAGS)' \ 'GOC=3D$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' = \ 'GOCFLAGS=3D$$(GOCFLAGS_FOR_TARGET)=E2=80=99 \ diff --git a/configure.ac b/configure.ac index 66d637d70dc..041ee249bac 100644 --- a/configure.ac +++ b/configure.ac @@ -1335,6 +1335,7 @@ if test "${build}" !=3D "${host}" ; then AS_FOR_BUILD=3D${AS_FOR_BUILD-as} CC_FOR_BUILD=3D${CC_FOR_BUILD-gcc} CXX_FOR_BUILD=3D${CXX_FOR_BUILD-g++} + DSYMUTIL_FOR_BUILD=3D${DSYMUTIL_FOR_BUILD-dsymutil} GFORTRAN_FOR_BUILD=3D${GFORTRAN_FOR_BUILD-gfortran} GOC_FOR_BUILD=3D${GOC_FOR_BUILD-gccgo} GDC_FOR_BUILD=3D${GDC_FOR_BUILD-gdc} @@ -1349,6 +1350,7 @@ else AS_FOR_BUILD=3D"\$(AS)" CC_FOR_BUILD=3D"\$(CC)" CXX_FOR_BUILD=3D"\$(CXX)" + DSYMUTIL_FOR_BUILD=3D"\$(DSYMUTIL)" GFORTRAN_FOR_BUILD=3D"\$(GFORTRAN)" GOC_FOR_BUILD=3D"\$(GOC)" GDC_FOR_BUILD=3D"\$(GDC)" @@ -3380,6 +3382,7 @@ AC_SUBST(CFLAGS_FOR_BUILD) AC_SUBST(CXXFLAGS_FOR_BUILD) AC_SUBST(CXX_FOR_BUILD) AC_SUBST(DLLTOOL_FOR_BUILD) +AC_SUBST(DSYMUTIL_FOR_BUILD) AC_SUBST(GFORTRAN_FOR_BUILD) AC_SUBST(GOC_FOR_BUILD) AC_SUBST(GDC_FOR_BUILD) @@ -3459,6 +3462,7 @@ esac NCN_STRICT_CHECK_TOOLS(AR, ar) NCN_STRICT_CHECK_TOOLS(AS, as) NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool) +NCN_STRICT_CHECK_TOOLS(DSYMUTIL, dsymutil) NCN_STRICT_CHECK_TOOLS(LD, ld) NCN_STRICT_CHECK_TOOLS(LIPO, lipo) NCN_STRICT_CHECK_TOOLS(NM, nm) @@ -3498,6 +3502,7 @@ NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc) ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar) ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as) ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool) +ACX_CHECK_INSTALLED_TARGET_TOOL(DSYMUTIL_FOR_TARGET, dsymutil) ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld) ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo) ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm) @@ -3523,6 +3528,7 @@ GCC_TARGET_TOOL(c++ for libstdc++, = RAW_CXX_FOR_TARGET, CXX, [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc = -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src = -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs = -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs], c++) GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, = [binutils/dlltool]) +GCC_TARGET_TOOL(dsymutil, DSYMUTIL_FOR_TARGET, DSYMUTIL) GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc = -B$$r/$(HOST_SUBDIR)/gcc/]) GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN, [gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran) diff --git a/gcc/collect2.c b/gcc/collect2.c index b08c6e7afae..07092c2733a 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -3040,15 +3040,49 @@ process_args (int *argcp, char **argv) { =20 static void do_dsymutil (const char *output_file) { - const char *dsymutil =3D DSYMUTIL + 1; + const char *dsymutil =3D 0; struct pex_obj *pex; - char **real_argv =3D XCNEWVEC (char *, 3); + char **real_argv =3D XCNEWVEC (char *, verbose ? 4 : 3); const char ** argv =3D CONST_CAST2 (const char **, char **, real_argv); +/* For cross-builds search the PATH using target-qualified name if we + have not already found a suitable dsymutil. In practice, all modern + versions of dsymutil handle all supported archs, however the = approach + here is consistent with the way other installations work (and one = can + always symlink a multitarget dsymutil with a target-specific name). = */ + const char *dsname =3D "dsymutil"; +#ifdef CROSS_DIRECTORY_STRUCTURE + const char *qname =3D concat (target_machine, "-", dsname, NULL); +#else + const char *qname =3D dsname; +#endif +#ifdef DEFAULT_DSYMUTIL + /* Configured default takes priority. */ + if (dsymutil =3D=3D 0 && access (DEFAULT_DSYMUTIL, X_OK) =3D=3D 0) + dsymutil =3D DEFAULT_DSYMUTIL; + if (dsymutil =3D=3D 0) +#endif +#ifdef DSYMUTIL + /* Followed by one supplied in the target header, somewhat like the + REAL_XX_NAME used elsewhere. */ + dsymutil =3D find_a_file (&cpath, DSYMUTIL, X_OK); + if (dsymutil =3D=3D 0) + dsymutil =3D find_a_file (&path, DSYMUTIL, X_OK); + if (dsymutil =3D=3D 0) +#endif + dsymutil =3D find_a_file (&cpath, dsname, X_OK); + if (dsymutil =3D=3D 0) + dsymutil =3D find_a_file (&path, qname, X_OK); =20 argv[0] =3D dsymutil; argv[1] =3D output_file; - argv[2] =3D (char *) 0; + if (verbose) + { + argv[2] =3D "-v"; + argv[3] =3D (char *) 0; + } + else + argv[2] =3D (char *) 0; =20 pex =3D collect_execute (dsymutil, real_argv, NULL, NULL, PEX_LAST | PEX_SEARCH, false, NULL); diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 5f119789973..20d6b1e9c05 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -240,8 +240,6 @@ extern GTY(()) int darwin_ms_struct; DARWIN_NOCOMPACT_UNWIND \ "}}}}}}} %&1`; then + dsymutil_flag=3Dyes + fi + fi + AC_DEFINE_UNQUOTED(DEFAULT_DSYMUTIL,"$DEFAULT_DSYMUTIL", + [Define to enable the use of a default debug linker.]) +fi + +AC_MSG_CHECKING([whether a default dsymutil was specified]) +if test x"${DEFAULT_DSYMUTIL+set}" =3D x"set"; then + AC_MSG_RESULT([yes ($DEFAULT_DSYMUTIL)]) +else + AC_MSG_RESULT(no) +fi + # ---------------------- # Find default assembler # ---------------------- @@ -2852,6 +2883,27 @@ else AC_MSG_RESULT($gcc_cv_otool) fi =20 +# Figure out the dsymutil we will use. +AS_VAR_SET_IF(gcc_cv_dsymutil,, [ +if test -x "$DEFAULT_DSYMUTIL"; then + gcc_cv_dsymutil=3D"$DEFAULT_DSYMUTIL" +elif test -x dsymutil$build_exeext; then + gcc_cv_dsymutil=3D./dsymutil$build_exeext +elif ( set dummy $DSYMUTIL_FOR_TARGET; test -x $[2] ); then + gcc_cv_dsymutil=3D$DSYMUTIL_FOR_TARGET +elif ( set dummy $DSYMUTIL; test -x $[2] ); then + gcc_cv_dsymutil=3D$DSYMUTIL +else + AC_PATH_PROG(gcc_cv_dsymutil, $DSYMUTIL_FOR_TARGET) +fi]) + +ORIGINAL_DSYMUTIL_FOR_TARGET=3D$gcc_cv_dsymutil +AC_SUBST(ORIGINAL_DSYMUTIL_FOR_TARGET) +case "$ORIGINAL_DSYMUTIL_FOR_TARGET" in + ./dsymutil | ./dsymutil$build_exeext) ;; + *) AC_CONFIG_FILES(dsymutil:exec-tool.in, [chmod +x dsymutil]) ;; +esac=20 + # Figure out what assembler alignment features are present. gcc_GAS_CHECK_FEATURE([.balign and .p2align], = gcc_cv_as_balign_and_p2align, [2,6,0],, @@ -6240,6 +6292,46 @@ if test x"$ld64_flag" =3D x"yes"; then [Define to 1 if ld64 supports '-export_dynamic'.]) fi =20 +if test x"$dsymutil_flag" =3D x"yes"; then + + # If the user specified a dsymutil path, then we will already have = the + # version string, otherwise, pick it up. + if test x"$gcc_cv_dsymutil" =3D x; then + AC_MSG_WARN([dsymutil is a required tool for this system, but = not found]) + dsymutil_vers=3D"tool unspecified" + elif test x"$dsymutil_vers" =3D x; then + dsymutil_vers=3D`$gcc_cv_dsymutil -v /dev/null 2>&1` + fi + + dsymutil_temp=3D`echo $dsymutil_vers | sed 1q` + AC_MSG_CHECKING(dsymutil version "$dsymutil_temp") + if echo $dsymutil_temp | grep dwarfutils- > /dev/null; then + dsymutil_kind=3DDWARFUTILS + dsymutil_vers=3D`echo $dsymutil_temp | sed = 's/.*dwarfutils-\([[0-9\.]]*\).*/\1/'` + elif echo $dsymutil_temp | grep clang- > /dev/null; then + dsymutil_kind=3DCLANG + dsymutil_vers=3D`echo $dsymutil_temp | sed = 's/.*clang-\([[0-9\.]]*\).*/\1/'` + elif echo $dsymutil_temp | grep 'LLVM version ' > /dev/null; then + dsymutil_kind=3DLLVM + dsymutil_vers=3D`echo $dsymutil_temp | sed 's/.*LLVM\ version\ = \([[0-9\.]]*\).*/\1/'` + else + dsymutil_kind=3DUNKNOWN + dsymutil_vers=3D"0.0" + fi + dsymutil_major=3D`expr "$dsymutil_vers" : '\([[0-9]]*\)'` + dsymutil_minor=3D`expr "$dsymutil_vers" : '[[0-9]]*\.\([[0-9]]*\)'` + dsymutil_tiny=3D`expr "$dsymutil_vers" : = '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test x"${dsymutil_minor}" =3D x; then + dsymutil_minor=3D0 + fi + if test x"${dsymutil_tiny}" =3D x; then + dsymutil_tiny=3D0 + fi + AC_DEFINE_UNQUOTED(DSYMUTIL_VERSION, = [$dsymutil_kind,${dsymutil_major},${dsymutil_minor},${dsymutil_tiny}], + [Define to the dsymutil version.]) + AC_MSG_RESULT($dsymutil_vers : $dsymutil_kind ${dsymutil_major} = ${dsymutil_minor} ${dsymutil_tiny} ) +fi + case $target_os in win32 | pe | cygwin* | mingw32*) AC_MSG_CHECKING(broken PE linker dwarf5 support) diff --git a/gcc/exec-tool.in b/gcc/exec-tool.in index 9884601c13e..c206a254d51 100644 --- a/gcc/exec-tool.in +++ b/gcc/exec-tool.in @@ -25,6 +25,7 @@ = ORIGINAL_LD_BFD_FOR_TARGET=3D"@ORIGINAL_LD_BFD_FOR_TARGET@" ORIGINAL_LD_GOLD_FOR_TARGET=3D"@ORIGINAL_LD_GOLD_FOR_TARGET@" ORIGINAL_PLUGIN_LD_FOR_TARGET=3D"@ORIGINAL_PLUGIN_LD_FOR_TARGET@" ORIGINAL_NM_FOR_TARGET=3D"@ORIGINAL_NM_FOR_TARGET@" +ORIGINAL_DSYMUTIL_FOR_TARGET=3D"@ORIGINAL_DSYMUTIL_FOR_TARGET@" exeext=3D@host_exeext@ fast_install=3D@enable_fast_install@ objdir=3D@objdir@ @@ -71,6 +72,13 @@ case "$invoked" in prog=3Dnm-new$exeext dir=3Dbinutils ;; + dsymutil) + original=3D$ORIGINAL_DSYMUTIL_FOR_TARGET + # We do not build this in tree - but still want to be able to = execute + # a configured version from the build dir. + prog=3D + dir=3D + ;; esac =20 case "$original" in diff --git a/gcc/gcc.c b/gcc/gcc.c index c8dbff61307..36a88fc99b0 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -3062,6 +3062,11 @@ find_a_file (const struct path_prefix *pprefix, = const char *name, int mode, return xstrdup (DEFAULT_LINKER); #endif =20 +#ifdef DEFAULT_DSYMUTIL + if (! strcmp (name, "dsymutil") && access (DEFAULT_DSYMUTIL, mode) =3D=3D= 0) + return xstrdup (DEFAULT_DSYMUTIL); +#endif + /* Determine the filename to execute (special case for absolute = paths). */ =20 if (IS_ABSOLUTE_PATH (name)) --=20 2.24.1