Remove cleanups from check_fast_tracepoint_sals
This changes the gdbarch fast_tracepoint_valid_at method to use a std::string as its out parameter, and then updates all the uses. This allows removing a cleanup from breakpoint.c. Regression tested by the buildbot. ChangeLog 2018-02-24 Tom Tromey <tom@tromey.com> * i386-tdep.c (i386_fast_tracepoint_valid_at): "msg" now a std::string. * gdbarch.sh (fast_tracepoint_valid_at): Change "msg" to a std::string*. * gdbarch.c: Rebuild. * gdbarch.h: Rebuild. * breakpoint.c (check_fast_tracepoint_sals): Use std::string. * arch-utils.h (default_fast_tracepoint_valid_at): Update. * arch-utils.c (default_fast_tracepoint_valid_at): "msg" now a std::string*.
This commit is contained in:
parent
d4333bab0a
commit
281d762b1a
@ -1,3 +1,16 @@
|
|||||||
|
2018-02-24 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* i386-tdep.c (i386_fast_tracepoint_valid_at): "msg" now a
|
||||||
|
std::string.
|
||||||
|
* gdbarch.sh (fast_tracepoint_valid_at): Change "msg" to a
|
||||||
|
std::string*.
|
||||||
|
* gdbarch.c: Rebuild.
|
||||||
|
* gdbarch.h: Rebuild.
|
||||||
|
* breakpoint.c (check_fast_tracepoint_sals): Use std::string.
|
||||||
|
* arch-utils.h (default_fast_tracepoint_valid_at): Update.
|
||||||
|
* arch-utils.c (default_fast_tracepoint_valid_at): "msg" now a
|
||||||
|
std::string*.
|
||||||
|
|
||||||
2018-02-23 Simon Marchi <simon.marchi@polymtl.ca>
|
2018-02-23 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* gdbtypes.h (sect_offset): Change type to uint64_t.
|
* gdbtypes.h (sect_offset): Change type to uint64_t.
|
||||||
|
@ -813,12 +813,12 @@ default_has_shared_address_space (struct gdbarch *gdbarch)
|
|||||||
|
|
||||||
int
|
int
|
||||||
default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
|
default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
|
||||||
char **msg)
|
std::string *msg)
|
||||||
{
|
{
|
||||||
/* We don't know if maybe the target has some way to do fast
|
/* We don't know if maybe the target has some way to do fast
|
||||||
tracepoints that doesn't need gdbarch, so always say yes. */
|
tracepoints that doesn't need gdbarch, so always say yes. */
|
||||||
if (msg)
|
if (msg)
|
||||||
*msg = NULL;
|
msg->clear ();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ extern struct gdbarch *get_current_arch (void);
|
|||||||
extern int default_has_shared_address_space (struct gdbarch *);
|
extern int default_has_shared_address_space (struct gdbarch *);
|
||||||
|
|
||||||
extern int default_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
|
extern int default_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
|
||||||
CORE_ADDR addr, char **msg);
|
CORE_ADDR addr, std::string *msg);
|
||||||
|
|
||||||
extern const gdb_byte *default_breakpoint_from_pc (struct gdbarch *gdbarch,
|
extern const gdb_byte *default_breakpoint_from_pc (struct gdbarch *gdbarch,
|
||||||
CORE_ADDR *pcptr,
|
CORE_ADDR *pcptr,
|
||||||
|
@ -9177,10 +9177,6 @@ static void
|
|||||||
check_fast_tracepoint_sals (struct gdbarch *gdbarch,
|
check_fast_tracepoint_sals (struct gdbarch *gdbarch,
|
||||||
gdb::array_view<const symtab_and_line> sals)
|
gdb::array_view<const symtab_and_line> sals)
|
||||||
{
|
{
|
||||||
int rslt;
|
|
||||||
char *msg;
|
|
||||||
struct cleanup *old_chain;
|
|
||||||
|
|
||||||
for (const auto &sal : sals)
|
for (const auto &sal : sals)
|
||||||
{
|
{
|
||||||
struct gdbarch *sarch;
|
struct gdbarch *sarch;
|
||||||
@ -9190,14 +9186,10 @@ check_fast_tracepoint_sals (struct gdbarch *gdbarch,
|
|||||||
associated with SAL. */
|
associated with SAL. */
|
||||||
if (sarch == NULL)
|
if (sarch == NULL)
|
||||||
sarch = gdbarch;
|
sarch = gdbarch;
|
||||||
rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal.pc, &msg);
|
std::string msg;
|
||||||
old_chain = make_cleanup (xfree, msg);
|
if (!gdbarch_fast_tracepoint_valid_at (sarch, sal.pc, &msg))
|
||||||
|
|
||||||
if (!rslt)
|
|
||||||
error (_("May not have a fast tracepoint at %s%s"),
|
error (_("May not have a fast tracepoint at %s%s"),
|
||||||
paddress (sarch, sal.pc), (msg ? msg : ""));
|
paddress (sarch, sal.pc), msg.c_str ());
|
||||||
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4650,7 +4650,7 @@ set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg)
|
gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg)
|
||||||
{
|
{
|
||||||
gdb_assert (gdbarch != NULL);
|
gdb_assert (gdbarch != NULL);
|
||||||
gdb_assert (gdbarch->fast_tracepoint_valid_at != NULL);
|
gdb_assert (gdbarch->fast_tracepoint_valid_at != NULL);
|
||||||
|
@ -1366,8 +1366,8 @@ extern void set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch, gdbar
|
|||||||
|
|
||||||
/* True if a fast tracepoint can be set at an address. */
|
/* True if a fast tracepoint can be set at an address. */
|
||||||
|
|
||||||
typedef int (gdbarch_fast_tracepoint_valid_at_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg);
|
typedef int (gdbarch_fast_tracepoint_valid_at_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg);
|
||||||
extern int gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg);
|
extern int gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg);
|
||||||
extern void set_gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at);
|
extern void set_gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at);
|
||||||
|
|
||||||
/* Guess register state based on tracepoint location. Used for tracepoints
|
/* Guess register state based on tracepoint location. Used for tracepoints
|
||||||
|
@ -1045,7 +1045,7 @@ v;int;has_global_breakpoints;;;0;0;;0
|
|||||||
m;int;has_shared_address_space;void;;;default_has_shared_address_space;;0
|
m;int;has_shared_address_space;void;;;default_has_shared_address_space;;0
|
||||||
|
|
||||||
# True if a fast tracepoint can be set at an address.
|
# True if a fast tracepoint can be set at an address.
|
||||||
m;int;fast_tracepoint_valid_at;CORE_ADDR addr, char **msg;addr, msg;;default_fast_tracepoint_valid_at;;0
|
m;int;fast_tracepoint_valid_at;CORE_ADDR addr, std::string *msg;addr, msg;;default_fast_tracepoint_valid_at;;0
|
||||||
|
|
||||||
# Guess register state based on tracepoint location. Used for tracepoints
|
# Guess register state based on tracepoint location. Used for tracepoints
|
||||||
# where no registers have been collected, but there's only one location,
|
# where no registers have been collected, but there's only one location,
|
||||||
|
@ -8111,7 +8111,7 @@ static const int i386_record_regmap[] =
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
|
i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
|
||||||
char **msg)
|
std::string *msg)
|
||||||
{
|
{
|
||||||
int len, jumplen;
|
int len, jumplen;
|
||||||
|
|
||||||
@ -8144,15 +8144,15 @@ i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
|
|||||||
/* Return a bit of target-specific detail to add to the caller's
|
/* Return a bit of target-specific detail to add to the caller's
|
||||||
generic failure message. */
|
generic failure message. */
|
||||||
if (msg)
|
if (msg)
|
||||||
*msg = xstrprintf (_("; instruction is only %d bytes long, "
|
*msg = string_printf (_("; instruction is only %d bytes long, "
|
||||||
"need at least %d bytes for the jump"),
|
"need at least %d bytes for the jump"),
|
||||||
len, jumplen);
|
len, jumplen);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (msg)
|
if (msg)
|
||||||
*msg = NULL;
|
msg->clear ();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user