Don't pass empty options to GCC

On aarch64-linux, I noticed the compile command didn't work at all.  It
always gave the following error:

aarch64-linux-gnu-g++: error: : No such file or directory

Turns out we're passing an empty argv entry to GCC (because aarch64 doesn't
have a -m64 option), and GCC's behavior is to think that is a file it needs
to open.  One can reproduce it like so:

gcc "" "" "" ""
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: fatal error: no input files
compilation terminated.

The solution is to check for an empty string and skip adding that to argv.

Regression tested on aarch64-linux/Ubuntu 18.04/20.04.

gdb/ChangeLog:

2021-03-29  Luis Machado  <luis.machado@linaro.org>

	* compile/compile.c (get_args): Don't add empty argv entries.
This commit is contained in:
Luis Machado 2021-03-24 11:12:46 -03:00
parent fa167b002f
commit 9b8ffbf410
2 changed files with 11 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2021-03-29 Luis Machado <luis.machado@linaro.org>
* compile/compile.c (get_args): Don't add empty argv entries.
2021-03-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
gdb:

View File

@ -600,8 +600,14 @@ static gdb_argv
get_args (const compile_instance *compiler, struct gdbarch *gdbarch)
{
const char *cs_producer_options;
gdb_argv result;
gdb_argv result (gdbarch_gcc_target_options (gdbarch).c_str ());
std::string gcc_options = gdbarch_gcc_target_options (gdbarch);
/* Make sure we have a non-empty set of options, otherwise GCC will
error out trying to look for a filename that is an empty string. */
if (!gcc_options.empty ())
result = gdb_argv (gcc_options.c_str ());
cs_producer_options = get_selected_pc_producer_options ();
if (cs_producer_options != NULL)