diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8009cb6c33..e80562d857 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2014-02-19 Tom Tromey + + * common/linux-btrace.c (linux_supports_btrace): Add "ops" + argument. + * common/linux-btrace.h (linux_supports_btrace): Update. + * remote.c (remote_supports_btrace): Add "self" argument. + * target-delegates.c: Rebuild. + * target.c (target_supports_btrace): Remove. + * target.h (struct target_ops) : Add + target_ops argument. + (target_supports_btrace): New define. + 2014-02-19 Tom Tromey * record-full.c (record_full_beneath_to_resume_ops) diff --git a/gdb/common/linux-btrace.c b/gdb/common/linux-btrace.c index 218e0cee13..188220b651 100644 --- a/gdb/common/linux-btrace.c +++ b/gdb/common/linux-btrace.c @@ -407,7 +407,7 @@ cpu_supports_btrace (void) /* See linux-btrace.h. */ int -linux_supports_btrace (void) +linux_supports_btrace (struct target_ops *ops) { static int cached; @@ -600,7 +600,7 @@ linux_read_btrace (VEC (btrace_block_s) **btrace, /* See linux-btrace.h. */ int -linux_supports_btrace (void) +linux_supports_btrace (struct target_ops *ops) { return 0; } diff --git a/gdb/common/linux-btrace.h b/gdb/common/linux-btrace.h index a97b697932..12e9b6067b 100644 --- a/gdb/common/linux-btrace.h +++ b/gdb/common/linux-btrace.h @@ -62,7 +62,7 @@ struct btrace_target_info }; /* See to_supports_btrace in target.h. */ -extern int linux_supports_btrace (void); +extern int linux_supports_btrace (struct target_ops *); /* See to_enable_btrace in target.h. */ extern struct btrace_target_info *linux_enable_btrace (ptid_t ptid); diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 1786bfbbeb..9231f07378 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2014-02-19 Tom Tromey + + * target.h (struct target_ops) : Add target_ops + argument. + (target_supports_btrace): Update. + 2014-02-14 Yao Qi * Makefile.in (IPA_OBJS): Append rsp-low-ipa.o. diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h index ae48cd776d..7374d584c2 100644 --- a/gdb/gdbserver/target.h +++ b/gdb/gdbserver/target.h @@ -350,7 +350,7 @@ struct target_ops int (*supports_agent) (void); /* Check whether the target supports branch tracing. */ - int (*supports_btrace) (void); + int (*supports_btrace) (struct target_ops *); /* Enable branch tracing for @ptid and allocate a branch trace target information struct for reading and for disabling branch trace. */ @@ -491,8 +491,9 @@ int kill_inferior (int); (the_target->supports_agent ? \ (*the_target->supports_agent) () : 0) -#define target_supports_btrace() \ - (the_target->supports_btrace ? (*the_target->supports_btrace) () : 0) +#define target_supports_btrace() \ + (the_target->supports_btrace \ + ? (*the_target->supports_btrace) (the_target) : 0) #define target_enable_btrace(ptid) \ (*the_target->enable_btrace) (ptid) diff --git a/gdb/remote.c b/gdb/remote.c index e6fd8b3517..e5bddb7385 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -11199,7 +11199,7 @@ struct btrace_target_info /* Check whether the target supports branch tracing. */ static int -remote_supports_btrace (void) +remote_supports_btrace (struct target_ops *self) { if (remote_protocol_packets[PACKET_Qbtrace_off].support != PACKET_ENABLE) return 0; diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 2d6ce79be1..06857299fd 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -122,6 +122,19 @@ tdefault_xfer_partial (struct target_ops *self, enum target_object arg1, const return TARGET_XFER_E_IO; } +static int +delegate_supports_btrace (struct target_ops *self) +{ + self = self->beneath; + return self->to_supports_btrace (self); +} + +static int +tdefault_supports_btrace (struct target_ops *self) +{ + return 0; +} + static void install_delegators (struct target_ops *ops) { @@ -147,6 +160,8 @@ install_delegators (struct target_ops *ops) ops->to_async = delegate_async; if (ops->to_xfer_partial == NULL) ops->to_xfer_partial = delegate_xfer_partial; + if (ops->to_supports_btrace == NULL) + ops->to_supports_btrace = delegate_supports_btrace; } static void @@ -163,4 +178,5 @@ install_dummy_methods (struct target_ops *ops) ops->to_is_async_p = find_default_is_async_p; ops->to_async = tdefault_async; ops->to_xfer_partial = tdefault_xfer_partial; + ops->to_supports_btrace = tdefault_supports_btrace; } diff --git a/gdb/target.c b/gdb/target.c index 76f4c150e4..7ac87283e6 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -4170,20 +4170,6 @@ target_ranged_break_num_registers (void) /* See target.h. */ -int -target_supports_btrace (void) -{ - struct target_ops *t; - - for (t = current_target.beneath; t != NULL; t = t->beneath) - if (t->to_supports_btrace != NULL) - return t->to_supports_btrace (); - - return 0; -} - -/* See target.h. */ - struct btrace_target_info * target_enable_btrace (ptid_t ptid) { diff --git a/gdb/target.h b/gdb/target.h index 25b54d9f43..7709c16301 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -872,7 +872,8 @@ struct target_ops int (*to_can_use_agent) (void); /* Check whether the target supports branch tracing. */ - int (*to_supports_btrace) (void); + int (*to_supports_btrace) (struct target_ops *) + TARGET_DEFAULT_RETURN (0); /* Enable branch tracing for PTID and allocate a branch trace target information struct for reading and for disabling branch trace. */ @@ -2032,7 +2033,8 @@ extern void update_target_permissions (void); void target_ignore (void); /* See to_supports_btrace in struct target_ops. */ -extern int target_supports_btrace (void); +#define target_supports_btrace() \ + (current_target.to_supports_btrace (¤t_target)) /* See to_enable_btrace in struct target_ops. */ extern struct btrace_target_info *target_enable_btrace (ptid_t ptid);