From 9b8ffbf410f4482a51a443872758aa51ae20426f Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Wed, 24 Mar 2021 11:12:46 -0300 Subject: [PATCH] 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 * compile/compile.c (get_args): Don't add empty argv entries. --- gdb/ChangeLog | 4 ++++ gdb/compile/compile.c | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3e353b399a2..938b0ac43fb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2021-03-29 Luis Machado + + * compile/compile.c (get_args): Don't add empty argv entries. + 2021-03-29 Rainer Orth gdb: diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c index d9c99bf4328..5c5d51782c9 100644 --- a/gdb/compile/compile.c +++ b/gdb/compile/compile.c @@ -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) -- 2.30.2