Right now, "help target" will include this line:
target multi-thread -- Threads and pthreads support
However, it doesn't make sense to invoke "target multi-thread".
This patch fixes the problem by not registering the multi-thread
target. add_target does some needed initialization of the target_ops,
so I broke this out into a new function.
It isn't clear to me whether this patch requires a test case or not.
I'm not sure whether there are other unregistered targets; but if
there are, it seems unlikely that we test for their absence from the
help.
Built and regtested on x86-64 Fedora 18.
* linux-thread-db.c (init_thread_db_ops): Call
complete_target_initialization.
(_initialize_thread_db): Don't call add_target.
* target.c (complete_target_initialization): New function.
(add_target_with_completer): Call it.
* target.h (complete_target_initialization): Declare.
+2013-07-25 Tom Tromey <tromey@redhat.com>
+
+ * linux-thread-db.c (init_thread_db_ops): Call
+ complete_target_initialization.
+ (_initialize_thread_db): Don't call add_target.
+ * target.c (complete_target_initialization): New function.
+ (add_target_with_completer): Call it.
+ * target.h (complete_target_initialization): Declare.
+
2013-07-25 Mark Kettenis <kettenis@gnu.org>
* hppa-tdep.h (enum hppa_regnum): Add members for all space registers.
2013-07-25 Mark Kettenis <kettenis@gnu.org>
* hppa-tdep.h (enum hppa_regnum): Add members for all space registers.
thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
thread_db_ops.to_magic = OPS_MAGIC;
thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
thread_db_ops.to_magic = OPS_MAGIC;
+
+ complete_target_initialization (&thread_db_ops);
}
/* Provide a prototype to silence -Wmissing-prototypes. */
}
/* Provide a prototype to silence -Wmissing-prototypes. */
_initialize_thread_db (void)
{
init_thread_db_ops ();
_initialize_thread_db (void)
{
init_thread_db_ops ();
- add_target (&thread_db_ops);
/* Defer loading of libthread_db.so until inferior is running.
This allows gdb to load correct libthread_db for a given
/* Defer loading of libthread_db.so until inferior is running.
This allows gdb to load correct libthread_db for a given
return target_has_execution_1 (inferior_ptid);
}
return target_has_execution_1 (inferior_ptid);
}
-/* Add possible target architecture T to the list and add a new
- command 'target T->to_shortname'. Set COMPLETER as the command's
- completer if not NULL. */
+/* Complete initialization of T. This ensures that various fields in
+ T are set, if needed by the target implementation. */
-add_target_with_completer (struct target_ops *t,
- completer_ftype *completer)
+complete_target_initialization (struct target_ops *t)
- struct cmd_list_element *c;
-
/* Provide default values for all "must have" methods. */
if (t->to_xfer_partial == NULL)
t->to_xfer_partial = default_xfer_partial;
/* Provide default values for all "must have" methods. */
if (t->to_xfer_partial == NULL)
t->to_xfer_partial = default_xfer_partial;
if (t->to_has_execution == NULL)
t->to_has_execution = (int (*) (struct target_ops *, ptid_t)) return_zero;
if (t->to_has_execution == NULL)
t->to_has_execution = (int (*) (struct target_ops *, ptid_t)) return_zero;
+}
+
+/* Add possible target architecture T to the list and add a new
+ command 'target T->to_shortname'. Set COMPLETER as the command's
+ completer if not NULL. */
+
+void
+add_target_with_completer (struct target_ops *t,
+ completer_ftype *completer)
+{
+ struct cmd_list_element *c;
+
+ complete_target_initialization (t);
/* Routines for maintenance of the target structures...
/* Routines for maintenance of the target structures...
+ complete_target_initialization: Finalize a target_ops by filling in
+ any fields needed by the target implementation.
+
add_target: Add a target to the list of all possible targets.
push_target: Make this target the top of the stack of currently used
add_target: Add a target to the list of all possible targets.
push_target: Make this target the top of the stack of currently used
extern void add_target_with_completer (struct target_ops *t,
completer_ftype *completer);
extern void add_target_with_completer (struct target_ops *t,
completer_ftype *completer);
+extern void complete_target_initialization (struct target_ops *t);
+
/* Adds a command ALIAS for target T and marks it deprecated. This is useful
for maintaining backwards compatibility when renaming targets. */
/* Adds a command ALIAS for target T and marks it deprecated. This is useful
for maintaining backwards compatibility when renaming targets. */