aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <luis.machado@linaro.org>2021-03-24 11:12:46 -0300
committerLuis Machado <luis.machado@linaro.org>2021-03-29 11:59:50 -0300
commit9b8ffbf410f4482a51a443872758aa51ae20426f (patch)
tree54122f29d46d8d7dbc38f0f67ebf8f8e3f6c136b
parentfa167b002fd7c02adf63bf7b5dbf60ca625ec9b5 (diff)
downloadgdb-9b8ffbf410f4482a51a443872758aa51ae20426f.zip
gdb-9b8ffbf410f4482a51a443872758aa51ae20426f.tar.gz
gdb-9b8ffbf410f4482a51a443872758aa51ae20426f.tar.bz2
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.
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/compile/compile.c8
2 files changed, 11 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3e353b3..938b0ac 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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:
diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c
index d9c99bf..5c5d517 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)