[v2] gdb: sim: handle target sysroot prefix
Commit Message
On 24 Jun 2015 14:46, Pedro Alves wrote:
> On 06/23/2015 04:29 PM, Mike Frysinger wrote:
> > --- a/gdb/remote-sim.c
> > +++ b/gdb/remote-sim.c
> > @@ -669,6 +670,7 @@ gdbsim_open (const char *args, int from_tty)
> > int len;
> > char *arg_buf;
> > struct sim_inferior_data *sim_data;
> > + const char *sysroot = gdb_sysroot;
> > SIM_DESC gdbsim_desc;
> >
> > if (remote_debug)
> > @@ -688,7 +690,7 @@ gdbsim_open (const char *args, int from_tty)
> > len = (7 + 1 /* gdbsim */
> > + strlen (" -E little")
> > + strlen (" --architecture=xxxxxxxxxx")
> > - + strlen (" --sysroot=") + strlen (gdb_sysroot) +
> > + + strlen (" --sysroot=") + strlen (sysroot) +
> > + (args ? strlen (args) : 0)
> > + 50) /* slack */ ;
> > arg_buf = (char *) alloca (len);
> > @@ -715,7 +717,9 @@ gdbsim_open (const char *args, int from_tty)
> > }
> > /* Pass along gdb's concept of the sysroot. */
> > strcat (arg_buf, " --sysroot=");
> > - strcat (arg_buf, gdb_sysroot);
> > + if (is_target_filename (sysroot))
> > + sysroot += strlen (TARGET_SYSROOT_PREFIX);
>
> Please do this skipping above the "len = " computation. As is
> we'll just oversize arg_bug, but there's no good reason
> for the discrepancy.
>
> OK with that change.
already pushed ;). i've committed the attached on top though.
> (it would be easy to get rid of all that using reconcat.)
hmm, maybe. would be nice if the argv could be built up incrementally.
maybe xstrprintf would be a simple stop gap.
-mike
From 87d1b30944783ae0efb49236c6d872d775a37417 Mon Sep 17 00:00:00 2001
From: Mike Frysinger <vapier@gentoo.org>
Date: Wed, 24 Jun 2015 21:23:12 +0700
Subject: [PATCH] gdb: sim: merge the sysroot update logic together
Initialize the local sysroot fully before we start using it.
This keeps it all a bit simpler.
---
gdb/ChangeLog | 4 ++++
gdb/remote-sim.c | 8 +++++---
2 files changed, 9 insertions(+), 3 deletions(-)
@@ -1,5 +1,9 @@
2015-06-24 Mike Frysinger <vapier@gentoo.org>
+ * remote-sim.c (gdbsim_open): Move sysroot update to the top.
+
+2015-06-24 Mike Frysinger <vapier@gentoo.org>
+
* remote-sim.c: Include gdb_bfd.h.
(gdbsim_open): Declare new local sysroot pointing to gdb_sysroot.
Skip TARGET_SYSROOT_PREFIX in gdb_sysroot when it is active.
@@ -670,9 +670,13 @@ gdbsim_open (const char *args, int from_tty)
int len;
char *arg_buf;
struct sim_inferior_data *sim_data;
- const char *sysroot = gdb_sysroot;
+ const char *sysroot;
SIM_DESC gdbsim_desc;
+ sysroot = gdb_sysroot;
+ if (is_target_filename (sysroot))
+ sysroot += strlen (TARGET_SYSROOT_PREFIX);
+
if (remote_debug)
fprintf_unfiltered (gdb_stdlog,
"gdbsim_open: args \"%s\"\n", args ? args : "(null)");
@@ -717,8 +721,6 @@ gdbsim_open (const char *args, int from_tty)
}
/* Pass along gdb's concept of the sysroot. */
strcat (arg_buf, " --sysroot=");
- if (is_target_filename (sysroot))
- sysroot += strlen (TARGET_SYSROOT_PREFIX);
strcat (arg_buf, sysroot);
/* finally, any explicit args */
if (args)
--
2.4.4