This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFC 22/32] convert to_extra_thread_info
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Cc: Tom Tromey <tromey at redhat dot com>
- Date: Mon, 13 Jan 2014 12:12:37 -0700
- Subject: [RFC 22/32] convert to_extra_thread_info
- Authentication-results: sourceware.org; auth=none
- References: <1389640367-5571-1-git-send-email-tromey at redhat dot com>
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_extra_thread_info.
* target.h (struct target_ops) <to_extra_thread_info>: Use
TARGET_DEFAULT_RETURN.
convert to_thread_name
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_thread_name.
(target_thread_name): Unconditionally delegate.
* target.h (struct target_ops) <to_thread_name>: Use
TARGET_DEFAULT_RETURN.
convert to_pid_to_exec_file
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_pid_to_exec_file.
* target.h (struct target_ops) <to_pid_to_exec_file>: Use
TARGET_DEFAULT_RETURN.
convert to_log_command
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_log_command.
* target.h (struct target_ops) <to_log_command>: Use
TARGET_DEFAULT_IGNORE.
(target_log_command): Unconditionally delegate.
convert to_find_memory_regions
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_find_memory_regions.
(init_dummy_target): Don't initialize to_find_memory_regions.
* target.h (struct target_ops) <to_find_memory_regions>: Use
TARGET_DEFAULT_FUNC.
convert to_make_corefile_notes
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_make_corefile_notes.
(init_dummy_target): Don't initialize to_make_corefile_notes.
* target.h (struct target_ops) <to_make_corefile_notes>: Use
TARGET_DEFAULT_FUNC.
convert to_get_bookmark
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_get_bookmark.
(dummy_get_bookmark): Remove.
(init_dummy_target): Don't inherit or default to_get_bookmark.
* target.h (struct target_ops) <to_get_bookmark>: Use
TARGET_DEFAULT_NORETURN
convert to_goto_bookmark
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_goto_bookmark.
(dummy_goto_bookmark): Remove.
(init_dummy_target): Don't inherit or default to_goto_bookmark.
* target.h (struct target_ops) <to_goto_bookmark>: Use
TARGET_DEFAULT_NORETURN.
convert to_can_execute_reverse
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_can_execute_reverse.
* target.h (struct target_ops) <to_can_execute_reverse>: Use
TARGET_DEFAULT_RETURN.
(target_can_execute_reverse): Unconditionally delegate.
convert to_execution_direction
2014-01-08 Tom Tromey <tromey@redhat.com>
* target-delegates.c : Rebuild.
* target.c (update_current_target): Don't inherit or default
to_execution_direction.
* target.h (struct target_ops) <to_execution_direction>: Use
TARGET_DEFAULT_FUNC.
---
gdb/ChangeLog | 89 +++++++++++++++++++++++++++++++
gdb/target-delegates.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++
gdb/target.c | 69 ++++++++----------------
gdb/target.h | 41 +++++++-------
4 files changed, 274 insertions(+), 66 deletions(-)
diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
index 7abb393..a2293c4 100644
--- a/gdb/target-delegates.c
+++ b/gdb/target-delegates.c
@@ -426,6 +426,32 @@ tdefault_has_exited (struct target_ops *self, int arg1, int arg2, int *arg3)
return 0;
}
+static char *
+delegate_extra_thread_info (struct target_ops *self, struct thread_info *arg1)
+{
+ self = self->beneath;
+ return self->to_extra_thread_info (self, arg1);
+}
+
+static char *
+tdefault_extra_thread_info (struct target_ops *self, struct thread_info *arg1)
+{
+ return 0;
+}
+
+static char *
+delegate_thread_name (struct target_ops *self, struct thread_info *arg1)
+{
+ self = self->beneath;
+ return self->to_thread_name (self, arg1);
+}
+
+static char *
+tdefault_thread_name (struct target_ops *self, struct thread_info *arg1)
+{
+ return 0;
+}
+
static void
delegate_rcmd (struct target_ops *self, char *arg1, struct ui_file *arg2)
{
@@ -433,6 +459,31 @@ delegate_rcmd (struct target_ops *self, char *arg1, struct ui_file *arg2)
self->to_rcmd (self, arg1, arg2);
}
+static char *
+delegate_pid_to_exec_file (struct target_ops *self, int arg1)
+{
+ self = self->beneath;
+ return self->to_pid_to_exec_file (self, arg1);
+}
+
+static char *
+tdefault_pid_to_exec_file (struct target_ops *self, int arg1)
+{
+ return 0;
+}
+
+static void
+delegate_log_command (struct target_ops *self, const char *arg1)
+{
+ self = self->beneath;
+ self->to_log_command (self, arg1);
+}
+
+static void
+tdefault_log_command (struct target_ops *self, const char *arg1)
+{
+}
+
static int
delegate_can_async_p (struct target_ops *self)
{
@@ -460,6 +511,46 @@ tdefault_async (struct target_ops *self, async_callback_ftype *arg1, void *arg2)
tcomplain ();
}
+static int
+delegate_find_memory_regions (struct target_ops *self, find_memory_region_ftype arg1, void *arg2)
+{
+ self = self->beneath;
+ return self->to_find_memory_regions (self, arg1, arg2);
+}
+
+static char *
+delegate_make_corefile_notes (struct target_ops *self, bfd *arg1, int *arg2)
+{
+ self = self->beneath;
+ return self->to_make_corefile_notes (self, arg1, arg2);
+}
+
+static gdb_byte *
+delegate_get_bookmark (struct target_ops *self, char *arg1, int arg2)
+{
+ self = self->beneath;
+ return self->to_get_bookmark (self, arg1, arg2);
+}
+
+static gdb_byte *
+tdefault_get_bookmark (struct target_ops *self, char *arg1, int arg2)
+{
+ tcomplain ();
+}
+
+static void
+delegate_goto_bookmark (struct target_ops *self, gdb_byte *arg1, int arg2)
+{
+ self = self->beneath;
+ self->to_goto_bookmark (self, arg1, arg2);
+}
+
+static void
+tdefault_goto_bookmark (struct target_ops *self, gdb_byte *arg1, int arg2)
+{
+ tcomplain ();
+}
+
static LONGEST
delegate_xfer_partial (struct target_ops *self, enum target_object arg1, const char *arg2, gdb_byte *arg3, const gdb_byte *arg4, ULONGEST arg5, LONGEST arg6)
{
@@ -474,6 +565,26 @@ tdefault_xfer_partial (struct target_ops *self, enum target_object arg1, const
}
static int
+delegate_can_execute_reverse (struct target_ops *self)
+{
+ self = self->beneath;
+ return self->to_can_execute_reverse (self);
+}
+
+static int
+tdefault_can_execute_reverse (struct target_ops *self)
+{
+ return 0;
+}
+
+static enum exec_direction_kind
+delegate_execution_direction (struct target_ops *self)
+{
+ self = self->beneath;
+ return self->to_execution_direction (self);
+}
+
+static int
delegate_supports_btrace (struct target_ops *self)
{
self = self->beneath;
@@ -561,16 +672,36 @@ install_delegators (struct target_ops *ops)
ops->to_set_syscall_catchpoint = delegate_set_syscall_catchpoint;
if (ops->to_has_exited == NULL)
ops->to_has_exited = delegate_has_exited;
+ if (ops->to_extra_thread_info == NULL)
+ ops->to_extra_thread_info = delegate_extra_thread_info;
+ if (ops->to_thread_name == NULL)
+ ops->to_thread_name = delegate_thread_name;
if (ops->to_rcmd == NULL)
ops->to_rcmd = delegate_rcmd;
+ if (ops->to_pid_to_exec_file == NULL)
+ ops->to_pid_to_exec_file = delegate_pid_to_exec_file;
+ if (ops->to_log_command == NULL)
+ ops->to_log_command = delegate_log_command;
if (ops->to_can_async_p == NULL)
ops->to_can_async_p = delegate_can_async_p;
if (ops->to_is_async_p == NULL)
ops->to_is_async_p = delegate_is_async_p;
if (ops->to_async == NULL)
ops->to_async = delegate_async;
+ if (ops->to_find_memory_regions == NULL)
+ ops->to_find_memory_regions = delegate_find_memory_regions;
+ if (ops->to_make_corefile_notes == NULL)
+ ops->to_make_corefile_notes = delegate_make_corefile_notes;
+ if (ops->to_get_bookmark == NULL)
+ ops->to_get_bookmark = delegate_get_bookmark;
+ if (ops->to_goto_bookmark == NULL)
+ ops->to_goto_bookmark = delegate_goto_bookmark;
if (ops->to_xfer_partial == NULL)
ops->to_xfer_partial = delegate_xfer_partial;
+ if (ops->to_can_execute_reverse == NULL)
+ ops->to_can_execute_reverse = delegate_can_execute_reverse;
+ if (ops->to_execution_direction == NULL)
+ ops->to_execution_direction = delegate_execution_direction;
if (ops->to_supports_btrace == NULL)
ops->to_supports_btrace = delegate_supports_btrace;
}
@@ -614,10 +745,20 @@ install_dummy_methods (struct target_ops *ops)
ops->to_remove_exec_catchpoint = tdefault_remove_exec_catchpoint;
ops->to_set_syscall_catchpoint = tdefault_set_syscall_catchpoint;
ops->to_has_exited = tdefault_has_exited;
+ ops->to_extra_thread_info = tdefault_extra_thread_info;
+ ops->to_thread_name = tdefault_thread_name;
ops->to_rcmd = default_rcmd;
+ ops->to_pid_to_exec_file = tdefault_pid_to_exec_file;
+ ops->to_log_command = tdefault_log_command;
ops->to_can_async_p = find_default_can_async_p;
ops->to_is_async_p = find_default_is_async_p;
ops->to_async = tdefault_async;
+ ops->to_find_memory_regions = dummy_find_memory_regions;
+ ops->to_make_corefile_notes = dummy_make_corefile_notes;
+ ops->to_get_bookmark = tdefault_get_bookmark;
+ ops->to_goto_bookmark = tdefault_goto_bookmark;
ops->to_xfer_partial = tdefault_xfer_partial;
+ ops->to_can_execute_reverse = tdefault_can_execute_reverse;
+ ops->to_execution_direction = default_execution_direction;
ops->to_supports_btrace = tdefault_supports_btrace;
}
diff --git a/gdb/target.c b/gdb/target.c
index 076e4be..604469c 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -80,10 +80,20 @@ static LONGEST default_xfer_partial (struct target_ops *ops,
static struct gdbarch *default_thread_architecture (struct target_ops *ops,
ptid_t ptid);
+static int dummy_find_memory_regions (struct target_ops *self,
+ find_memory_region_ftype ignore1,
+ void *ignore2);
+
+static char *dummy_make_corefile_notes (struct target_ops *self,
+ bfd *ignore1, int *ignore2);
+
static int find_default_can_async_p (struct target_ops *ignore);
static int find_default_is_async_p (struct target_ops *ignore);
+static enum exec_direction_kind default_execution_direction
+ (struct target_ops *self);
+
#include "target-delegates.c"
static void init_dummy_target (void);
@@ -640,13 +650,13 @@ update_current_target (void)
/* Do not inherit to_thread_alive. */
/* Do not inherit to_find_new_threads. */
/* Do not inherit to_pid_to_str. */
- INHERIT (to_extra_thread_info, t);
- INHERIT (to_thread_name, t);
+ /* Do not inherit to_extra_thread_info. */
+ /* Do not inherit to_thread_name. */
INHERIT (to_stop, t);
/* Do not inherit to_xfer_partial. */
/* Do not inherit to_rcmd. */
- INHERIT (to_pid_to_exec_file, t);
- INHERIT (to_log_command, t);
+ /* Do not inherit to_pid_to_exec_file. */
+ /* Do not inherit to_log_command. */
INHERIT (to_stratum, t);
/* Do not inherit to_has_all_memory. */
/* Do not inherit to_has_memory. */
@@ -657,13 +667,13 @@ update_current_target (void)
/* Do not inherit to_can_async_p. */
/* Do not inherit to_is_async_p. */
/* Do not inherit to_async. */
- INHERIT (to_find_memory_regions, t);
- INHERIT (to_make_corefile_notes, t);
- INHERIT (to_get_bookmark, t);
- INHERIT (to_goto_bookmark, t);
+ /* Do not inherit to_find_memory_regions. */
+ /* Do not inherit to_make_corefile_notes. */
+ /* Do not inherit to_get_bookmark. */
+ /* Do not inherit to_goto_bookmark. */
/* Do not inherit to_get_thread_local_address. */
- INHERIT (to_can_execute_reverse, t);
- INHERIT (to_execution_direction, t);
+ /* Do not inherit to_can_execute_reverse. */
+ /* Do not inherit to_execution_direction. */
INHERIT (to_thread_architecture, t);
/* Do not inherit to_read_description. */
INHERIT (to_get_ada_task_ptid, t);
@@ -731,18 +741,9 @@ update_current_target (void)
de_fault (to_can_run,
(int (*) (struct target_ops *))
return_zero);
- de_fault (to_extra_thread_info,
- (char *(*) (struct target_ops *, struct thread_info *))
- return_zero);
- de_fault (to_thread_name,
- (char *(*) (struct target_ops *, struct thread_info *))
- return_zero);
de_fault (to_stop,
(void (*) (struct target_ops *, ptid_t))
target_ignore);
- de_fault (to_pid_to_exec_file,
- (char *(*) (struct target_ops *, int))
- return_zero);
de_fault (to_thread_architecture,
default_thread_architecture);
current_target.to_read_description = NULL;
@@ -859,7 +860,6 @@ update_current_target (void)
de_fault (to_augmented_libraries_svr4_read,
(int (*) (struct target_ops *))
return_zero);
- de_fault (to_execution_direction, default_execution_direction);
#undef de_fault
@@ -2603,15 +2603,7 @@ target_pid_to_str (ptid_t ptid)
char *
target_thread_name (struct thread_info *info)
{
- struct target_ops *t;
-
- for (t = current_target.beneath; t != NULL; t = t->beneath)
- {
- if (t->to_thread_name != NULL)
- return (*t->to_thread_name) (t, info);
- }
-
- return NULL;
+ return current_target.to_thread_name (¤t_target, info);
}
void
@@ -3611,21 +3603,6 @@ dummy_make_corefile_notes (struct target_ops *self,
return NULL;
}
-/* Error-catcher for target_get_bookmark. */
-static gdb_byte *
-dummy_get_bookmark (struct target_ops *self, char *ignore1, int ignore2)
-{
- tcomplain ();
- return NULL;
-}
-
-/* Error-catcher for target_goto_bookmark. */
-static void
-dummy_goto_bookmark (struct target_ops *self, gdb_byte *ignore, int from_tty)
-{
- tcomplain ();
-}
-
/* Set up the handful of non-empty slots needed by the dummy target
vector. */
@@ -3641,10 +3618,6 @@ init_dummy_target (void)
= find_default_supports_disable_randomization;
dummy_target.to_pid_to_str = dummy_pid_to_str;
dummy_target.to_stratum = dummy_stratum;
- dummy_target.to_find_memory_regions = dummy_find_memory_regions;
- dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
- dummy_target.to_get_bookmark = dummy_get_bookmark;
- dummy_target.to_goto_bookmark = dummy_goto_bookmark;
dummy_target.to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
dummy_target.to_has_memory = (int (*) (struct target_ops *)) return_zero;
dummy_target.to_has_stack = (int (*) (struct target_ops *)) return_zero;
diff --git a/gdb/target.h b/gdb/target.h
index 6a563f7..bc2dc6a 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -537,14 +537,18 @@ struct target_ops
int (*to_thread_alive) (struct target_ops *, ptid_t ptid);
void (*to_find_new_threads) (struct target_ops *);
char *(*to_pid_to_str) (struct target_ops *, ptid_t);
- char *(*to_extra_thread_info) (struct target_ops *, struct thread_info *);
- char *(*to_thread_name) (struct target_ops *, struct thread_info *);
+ char *(*to_extra_thread_info) (struct target_ops *, struct thread_info *)
+ TARGET_DEFAULT_RETURN (0);
+ char *(*to_thread_name) (struct target_ops *, struct thread_info *)
+ TARGET_DEFAULT_RETURN (0);
void (*to_stop) (struct target_ops *, ptid_t);
void (*to_rcmd) (struct target_ops *,
char *command, struct ui_file *output)
TARGET_DEFAULT_FUNC (default_rcmd);
- char *(*to_pid_to_exec_file) (struct target_ops *, int pid);
- void (*to_log_command) (struct target_ops *, const char *);
+ char *(*to_pid_to_exec_file) (struct target_ops *, int pid)
+ TARGET_DEFAULT_RETURN (0);
+ void (*to_log_command) (struct target_ops *, const char *)
+ TARGET_DEFAULT_IGNORE ();
struct target_section_table *(*to_get_section_table) (struct target_ops *);
enum strata to_stratum;
int (*to_has_all_memory) (struct target_ops *);
@@ -564,13 +568,17 @@ struct target_ops
int (*to_supports_non_stop) (struct target_ops *);
/* find_memory_regions support method for gcore */
int (*to_find_memory_regions) (struct target_ops *,
- find_memory_region_ftype func, void *data);
+ find_memory_region_ftype func, void *data)
+ TARGET_DEFAULT_FUNC (dummy_find_memory_regions);
/* make_corefile_notes support method for gcore */
- char * (*to_make_corefile_notes) (struct target_ops *, bfd *, int *);
+ char * (*to_make_corefile_notes) (struct target_ops *, bfd *, int *)
+ TARGET_DEFAULT_FUNC (dummy_make_corefile_notes);
/* get_bookmark support method for bookmarks */
- gdb_byte * (*to_get_bookmark) (struct target_ops *, char *, int);
+ gdb_byte * (*to_get_bookmark) (struct target_ops *, char *, int)
+ TARGET_DEFAULT_NORETURN (tcomplain ());
/* goto_bookmark support method for bookmarks */
- void (*to_goto_bookmark) (struct target_ops *, gdb_byte *, int);
+ void (*to_goto_bookmark) (struct target_ops *, gdb_byte *, int)
+ TARGET_DEFAULT_NORETURN (tcomplain ());
/* Return the thread-local address at OFFSET in the
thread-local storage for the thread PTID and the shared library
or executable file given by OBJFILE. If that block of
@@ -675,12 +683,14 @@ struct target_ops
CORE_ADDR *found_addrp);
/* Can target execute in reverse? */
- int (*to_can_execute_reverse) (struct target_ops *);
+ int (*to_can_execute_reverse) (struct target_ops *)
+ TARGET_DEFAULT_RETURN (0);
/* The direction the target is currently executing. Must be
implemented on targets that support reverse execution and async
mode. The default simply returns forward execution. */
- enum exec_direction_kind (*to_execution_direction) (struct target_ops *);
+ enum exec_direction_kind (*to_execution_direction) (struct target_ops *)
+ TARGET_DEFAULT_FUNC (default_execution_direction);
/* Does this target support debugging multiple processes
simultaneously? */
@@ -1711,8 +1721,7 @@ extern int target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask);
/* Target can execute in reverse? */
#define target_can_execute_reverse \
- (current_target.to_can_execute_reverse ? \
- current_target.to_can_execute_reverse (¤t_target) : 0)
+ current_target.to_can_execute_reverse (¤t_target)
extern const struct target_desc *target_read_description (struct target_ops *);
@@ -1887,12 +1896,8 @@ extern char *target_fileio_read_stralloc (const char *filename);
/* Command logging facility. */
-#define target_log_command(p) \
- do \
- if (current_target.to_log_command) \
- (*current_target.to_log_command) (¤t_target, \
- p); \
- while (0)
+#define target_log_command(p) \
+ (*current_target.to_log_command) (¤t_target, p)
extern int target_core_of_thread (ptid_t ptid);
--
1.8.1.4