On Sun, Jul 4, 2021 at 10:22 PM Iain Sandoe <i...@sandoe.co.uk> wrote: > > Hi, > > IMO this was an omission when the dsymutil program was added > (before my time). Essentially, we have been ‘getting away with it’ > 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 ‘as’ and ‘ld’ and now correctly > reports for ‘-v’ and works with discovery of installed “binutils” 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 > and powerpc64 linux. > > OK for master?
OK. Thanks, Richard. > thanks > Iain > > === > > 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 <i...@sandoe.co.uk> > > 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 = { flag= CFLAGS_FOR_TARGET ; }; > flags_to_pass = { flag= CPPFLAGS_FOR_TARGET ; }; > flags_to_pass = { flag= CXXFLAGS_FOR_TARGET ; }; > flags_to_pass = { flag= DLLTOOL_FOR_TARGET ; }; > +flags_to_pass = { flag= DSYMUTIL_FOR_TARGET ; }; > flags_to_pass = { flag= FLAGS_FOR_TARGET ; }; > flags_to_pass = { flag= GFORTRAN_FOR_TARGET ; }; > flags_to_pass = { flag= 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 = \ > GDC="$(GDC_FOR_BUILD)"; export GDC; \ > GDCFLAGS="$(GDCFLAGS_FOR_BUILD)"; export GDCFLAGS; \ > DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ > + DSYMUTIL="$(DSYMUTIL_FOR_BUILD)"; export DSYMUTIL; \ > LD="$(LD_FOR_BUILD)"; export LD; \ > LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ > NM="$(NM_FOR_BUILD)"; export NM; \ > @@ -203,6 +204,7 @@ HOST_EXPORTS = \ > CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ > CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \ > DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \ > + DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \ > LD="$(LD)"; export LD; \ > LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \ > NM="$(NM)"; export NM; \ > @@ -215,6 +217,7 @@ HOST_EXPORTS = \ > READELF="$(READELF)"; export READELF; \ > AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \ > AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \ > + DSYMUTIL_FOR_TARGET="$(DSYMUTIL_FOR_TARGET)"; export > DSYMUTIL_FOR_TARGET; \ > GCC_FOR_TARGET="$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \ > LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \ > NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \ > @@ -297,6 +300,7 @@ BASE_TARGET_EXPORTS = \ > GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export > GOC; \ > GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export > GDC; \ > DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ > + DSYMUTIL="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL; \ > LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ > LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ > LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \ > @@ -359,6 +363,7 @@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ > CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ > CXX_FOR_BUILD = @CXX_FOR_BUILD@ > DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@ > +DSYMUTIL_FOR_BUILD = @DSYMUTIL_FOR_BUILD@ > GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@ > GOC_FOR_BUILD = @GOC_FOR_BUILD@ > GDC_FOR_BUILD = @GDC_FOR_BUILD@ > @@ -409,6 +414,7 @@ AR_FLAGS = rc > CC = @CC@ > CXX = @CXX@ > DLLTOOL = @DLLTOOL@ > +DSYMUTIL = @DSYMUTIL@ > LD = @LD@ > LIPO = @LIPO@ > NM = @NM@ > @@ -519,6 +525,7 @@ GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) > @GFORTRAN_FOR_TARGET@ > GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@ > GDC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GDC_FOR_TARGET@ > DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@ > +DSYMUTIL_FOR_TARGET=@DSYMUTIL_FOR_TARGET@ > LD_FOR_TARGET=@LD_FOR_TARGET@ > > LIPO_FOR_TARGET=@LIPO_FOR_TARGET@ > @@ -644,6 +651,7 @@ EXTRA_HOST_FLAGS = \ > 'CC=$(CC)' \ > 'CXX=$(CXX)' \ > 'DLLTOOL=$(DLLTOOL)' \ > + 'DSYMUTIL=$(DSYMUTIL)' \ > 'GFORTRAN=$(GFORTRAN)' \ > 'GOC=$(GOC)' \ > 'GDC=$(GDC)' \ > @@ -702,6 +710,7 @@ EXTRA_TARGET_FLAGS = \ > $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ > 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \ > 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \ > + 'DSYMUTIL=$$(DSYMUTIL_FOR_TARGET)' \ > 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) > $$(TFLAGS)' \ > 'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ > 'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)’ \ > > 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}" != "${host}" ; then > AS_FOR_BUILD=${AS_FOR_BUILD-as} > CC_FOR_BUILD=${CC_FOR_BUILD-gcc} > CXX_FOR_BUILD=${CXX_FOR_BUILD-g++} > + DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil} > GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran} > GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo} > GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc} > @@ -1349,6 +1350,7 @@ else > AS_FOR_BUILD="\$(AS)" > CC_FOR_BUILD="\$(CC)" > CXX_FOR_BUILD="\$(CXX)" > + DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)" > GFORTRAN_FOR_BUILD="\$(GFORTRAN)" > GOC_FOR_BUILD="\$(GOC)" > GDC_FOR_BUILD="\$(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) { > > static void > do_dsymutil (const char *output_file) { > - const char *dsymutil = DSYMUTIL + 1; > + const char *dsymutil = 0; > struct pex_obj *pex; > - char **real_argv = XCNEWVEC (char *, 3); > + char **real_argv = XCNEWVEC (char *, verbose ? 4 : 3); > const char ** argv = 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 = "dsymutil"; > +#ifdef CROSS_DIRECTORY_STRUCTURE > + const char *qname = concat (target_machine, "-", dsname, NULL); > +#else > + const char *qname = dsname; > +#endif > +#ifdef DEFAULT_DSYMUTIL > + /* Configured default takes priority. */ > + if (dsymutil == 0 && access (DEFAULT_DSYMUTIL, X_OK) == 0) > + dsymutil = DEFAULT_DSYMUTIL; > + if (dsymutil == 0) > +#endif > +#ifdef DSYMUTIL > + /* Followed by one supplied in the target header, somewhat like the > + REAL_XX_NAME used elsewhere. */ > + dsymutil = find_a_file (&cpath, DSYMUTIL, X_OK); > + if (dsymutil == 0) > + dsymutil = find_a_file (&path, DSYMUTIL, X_OK); > + if (dsymutil == 0) > +#endif > + dsymutil = find_a_file (&cpath, dsname, X_OK); > + if (dsymutil == 0) > + dsymutil = find_a_file (&path, qname, X_OK); > > argv[0] = dsymutil; > argv[1] = output_file; > - argv[2] = (char *) 0; > + if (verbose) > + { > + argv[2] = "-v"; > + argv[3] = (char *) 0; > + } > + else > + argv[2] = (char *) 0; > > pex = 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 \ > "}}}}}}} %<pie %<no-pie %<rdynamic %<X " > > -#define DSYMUTIL "\ndsymutil" > - > /* Spec that controls whether the debug linker is run automatically for > a link step. This needs to be done if there is a source file on the > command line which will result in a temporary object (and debug is > > diff --git a/gcc/configure.ac b/gcc/configure.ac > index 70089394429..26da07325e7 100644 > --- a/gcc/configure.ac > +++ b/gcc/configure.ac > @@ -316,8 +316,14 @@ gnu_ld_flag="$with_gnu_ld", > gnu_ld_flag=no) > > case $target in > - *darwin*) ld64_flag=yes;; # Darwin can only use a ld64-compatible linker. > - *) ld64_flag=no;; > + *darwin*) > + ld64_flag=yes # Darwin can only use a ld64-compatible linker. > + dsymutil_flag=yes # Darwin uses dsymutil to link debug. > + ;; > + *) > + ld64_flag=no > + dsymutil_flag=no > + ;; > esac > > # With pre-defined ld > @@ -353,6 +359,31 @@ AC_ARG_WITH(demangler-in-ld, > demangler_in_ld="$with_demangler_in_ld", > demangler_in_ld=yes) > > +# Allow the user to specify a dsymutil executable (used on Darwin only, so > far) > +AC_ARG_WITH(dsymutil, > +[AS_HELP_STRING([--with-dsymutil], [arrange to use the specified dsymutil > (full pathname)])], > +DEFAULT_DSYMUTIL="$with_dsymutil") > + > +dsymutil_vers= > +if test x"${DEFAULT_DSYMUTIL+set}" = x"set"; then > + if test ! -x "$DEFAULT_DSYMUTIL"; then > + AC_MSG_ERROR([cannot execute: $DEFAULT_DSYMUTIL: check --with-dsymutil > or env. var. DEFAULT_DSYMUTIL]) > + else > + if dsymutil_vers=`$DEFAULT_DSYMUTIL -v /dev/null 2>&1`; then > + dsymutil_flag=yes > + 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}" = 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 > > +# Figure out the dsymutil we will use. > +AS_VAR_SET_IF(gcc_cv_dsymutil,, [ > +if test -x "$DEFAULT_DSYMUTIL"; then > + gcc_cv_dsymutil="$DEFAULT_DSYMUTIL" > +elif test -x dsymutil$build_exeext; then > + gcc_cv_dsymutil=./dsymutil$build_exeext > +elif ( set dummy $DSYMUTIL_FOR_TARGET; test -x $[2] ); then > + gcc_cv_dsymutil=$DSYMUTIL_FOR_TARGET > +elif ( set dummy $DSYMUTIL; test -x $[2] ); then > + gcc_cv_dsymutil=$DSYMUTIL > +else > + AC_PATH_PROG(gcc_cv_dsymutil, $DSYMUTIL_FOR_TARGET) > +fi]) > + > +ORIGINAL_DSYMUTIL_FOR_TARGET=$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 > + > # 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" = x"yes"; then > [Define to 1 if ld64 supports '-export_dynamic'.]) > fi > > +if test x"$dsymutil_flag" = 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" = x; then > + AC_MSG_WARN([dsymutil is a required tool for this system, but not > found]) > + dsymutil_vers="tool unspecified" > + elif test x"$dsymutil_vers" = x; then > + dsymutil_vers=`$gcc_cv_dsymutil -v /dev/null 2>&1` > + fi > + > + dsymutil_temp=`echo $dsymutil_vers | sed 1q` > + AC_MSG_CHECKING(dsymutil version "$dsymutil_temp") > + if echo $dsymutil_temp | grep dwarfutils- > /dev/null; then > + dsymutil_kind=DWARFUTILS > + dsymutil_vers=`echo $dsymutil_temp | sed > 's/.*dwarfutils-\([[0-9\.]]*\).*/\1/'` > + elif echo $dsymutil_temp | grep clang- > /dev/null; then > + dsymutil_kind=CLANG > + dsymutil_vers=`echo $dsymutil_temp | sed > 's/.*clang-\([[0-9\.]]*\).*/\1/'` > + elif echo $dsymutil_temp | grep 'LLVM version ' > /dev/null; then > + dsymutil_kind=LLVM > + dsymutil_vers=`echo $dsymutil_temp | sed 's/.*LLVM\ version\ > \([[0-9\.]]*\).*/\1/'` > + else > + dsymutil_kind=UNKNOWN > + dsymutil_vers="0.0" > + fi > + dsymutil_major=`expr "$dsymutil_vers" : '\([[0-9]]*\)'` > + dsymutil_minor=`expr "$dsymutil_vers" : '[[0-9]]*\.\([[0-9]]*\)'` > + dsymutil_tiny=`expr "$dsymutil_vers" : > '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` > + if test x"${dsymutil_minor}" = x; then > + dsymutil_minor=0 > + fi > + if test x"${dsymutil_tiny}" = x; then > + dsymutil_tiny=0 > + 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="@ORIGINAL_LD_BFD_FOR_TARGET@" > ORIGINAL_LD_GOLD_FOR_TARGET="@ORIGINAL_LD_GOLD_FOR_TARGET@" > ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@" > ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@" > +ORIGINAL_DSYMUTIL_FOR_TARGET="@ORIGINAL_DSYMUTIL_FOR_TARGET@" > exeext=@host_exeext@ > fast_install=@enable_fast_install@ > objdir=@objdir@ > @@ -71,6 +72,13 @@ case "$invoked" in > prog=nm-new$exeext > dir=binutils > ;; > + dsymutil) > + original=$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= > + dir= > + ;; > esac > > 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 > > +#ifdef DEFAULT_DSYMUTIL > + if (! strcmp (name, "dsymutil") && access (DEFAULT_DSYMUTIL, mode) == 0) > + return xstrdup (DEFAULT_DSYMUTIL); > +#endif > + > /* Determine the filename to execute (special case for absolute paths). */ > > if (IS_ABSOLUTE_PATH (name)) > -- > 2.24.1 > >