Bootstrapped on x86_64-linux and for msp430-elf cross with and without
binutils for the target to verify the error is printed as expected.

The $invoked variable will be one of as, collect-ld, nm, or dsymutil,
i.e. the tool that the script is invoking and wants to exec.

OK for trunk?

-- >8 --

When users try to build a cross-compiler without first installing
binutils they get confusing errors like:
/tmp/gcc-obj/./gcc/as: line 114: exec: -m: invalid option

This is an incredibly common source of questions on gcc-help and IRC,
and bogus bug reports e.g. see PR 116119 for the latest example.

This change adds an explicit check for an empty $original variable and
exits with a user-friendly error.

gcc/ChangeLog:

        * exec-tool.in: Exit with an error if $original is empty.
---
 gcc/exec-tool.in | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/gcc/exec-tool.in b/gcc/exec-tool.in
index 7d152e083a7..2767e1019b8 100644
--- a/gcc/exec-tool.in
+++ b/gcc/exec-tool.in
@@ -81,6 +81,14 @@ case "$invoked" in
     ;;
 esac
 
+if test -z "$original"
+then
+  echo "$0: \$original is unset" >&2
+  echo "This probably means there is no '$invoked' for the target." >&2
+  echo "For a cross-compiler, you probably need to install Binutils first." >&2
+  exit 1
+fi
+
 case "$original" in
   ../*)
     # compute absolute path of the location of this script
-- 
2.45.2

Reply via email to