From 73ede76585a987a07fbd67a7474b193e4ca05517 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 26 Nov 2015 09:49:03 -0500 Subject: [PATCH] Constify thread name return path Since this code path returns a string owned by the target (we don't know how it's allocated, could be a static read-only string), it's safer if we return a constant string. If, for some reasons, the caller wishes to modify the string, it should make itself a copy. gdb/ChangeLog: * linux-nat.c (linux_nat_thread_name): Constify return value. * target.h (struct target_ops) : Likewise. (target_thread_name): Likewise. * target.c (target_thread_name): Likewise. * target-delegates.c (debug_thread_name): Regenerate. * python/py-infthread.c (thpy_get_name): Constify local variables. * thread.c (print_thread_info): Likewise. (thread_find_command): Likewise. --- gdb/ChangeLog | 11 +++++++++++ gdb/linux-nat.c | 2 +- gdb/python/py-infthread.c | 2 +- gdb/target-delegates.c | 10 +++++----- gdb/target.c | 2 +- gdb/target.h | 4 ++-- gdb/thread.c | 4 ++-- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9c8b9e7..1d9cb4f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2015-11-26 Simon Marchi + + * linux-nat.c (linux_nat_thread_name): Constify return value. + * target.h (struct target_ops) : Likewise. + (target_thread_name): Likewise. + * target.c (target_thread_name): Likewise. + * target-delegates.c (debug_thread_name): Regenerate. + * python/py-infthread.c (thpy_get_name): Constify local variables. + * thread.c (print_thread_info): Likewise. + (thread_find_command): Likewise. + 2015-11-26 Markus Metzger PR 19297 diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 841ec39..2421687 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -4097,7 +4097,7 @@ linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid) return normal_pid_to_str (ptid); } -static char * +static const char * linux_nat_thread_name (struct target_ops *self, struct thread_info *thr) { int pid = ptid_get_pid (thr->ptid); diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c index 4d0a020..e5db354 100644 --- a/gdb/python/py-infthread.c +++ b/gdb/python/py-infthread.c @@ -62,7 +62,7 @@ static PyObject * thpy_get_name (PyObject *self, void *ignore) { thread_object *thread_obj = (thread_object *) self; - char *name; + const char *name; THPY_REQUIRE_VALID (thread_obj); diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 253c9d7..b41b316 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -1530,23 +1530,23 @@ debug_extra_thread_info (struct target_ops *self, struct thread_info *arg1) return result; } -static char * +static const char * delegate_thread_name (struct target_ops *self, struct thread_info *arg1) { self = self->beneath; return self->to_thread_name (self, arg1); } -static char * +static const char * tdefault_thread_name (struct target_ops *self, struct thread_info *arg1) { return NULL; } -static char * +static const char * debug_thread_name (struct target_ops *self, struct thread_info *arg1) { - char * result; + const char * result; fprintf_unfiltered (gdb_stdlog, "-> %s->to_thread_name (...)\n", debug_target.to_shortname); result = debug_target.to_thread_name (&debug_target, arg1); fprintf_unfiltered (gdb_stdlog, "<- %s->to_thread_name (", debug_target.to_shortname); @@ -1554,7 +1554,7 @@ debug_thread_name (struct target_ops *self, struct thread_info *arg1) fputs_unfiltered (", ", gdb_stdlog); target_debug_print_struct_thread_info_p (arg1); fputs_unfiltered (") = ", gdb_stdlog); - target_debug_print_char_p (result); + target_debug_print_const_char_p (result); fputs_unfiltered ("\n", gdb_stdlog); return result; } diff --git a/gdb/target.c b/gdb/target.c index 2365cd3..b43c12a 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2265,7 +2265,7 @@ target_pid_to_str (ptid_t ptid) return (*current_target.to_pid_to_str) (¤t_target, ptid); } -char * +const char * target_thread_name (struct thread_info *info) { return current_target.to_thread_name (¤t_target, info); diff --git a/gdb/target.h b/gdb/target.h index e80bee5..ac28a41 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -639,7 +639,7 @@ struct target_ops TARGET_DEFAULT_FUNC (default_pid_to_str); char *(*to_extra_thread_info) (struct target_ops *, struct thread_info *) TARGET_DEFAULT_RETURN (NULL); - char *(*to_thread_name) (struct target_ops *, struct thread_info *) + const char *(*to_thread_name) (struct target_ops *, struct thread_info *) TARGET_DEFAULT_RETURN (NULL); void (*to_stop) (struct target_ops *, ptid_t) TARGET_DEFAULT_IGNORE (); @@ -1823,7 +1823,7 @@ extern char *normal_pid_to_str (ptid_t ptid); /* Return the thread's name. A NULL result means that the target could not determine this thread's name. */ -extern char *target_thread_name (struct thread_info *); +extern const char *target_thread_name (struct thread_info *); /* Attempts to find the pathname of the executable file that was run to create a specified process. diff --git a/gdb/thread.c b/gdb/thread.c index b47d990..f8103bd 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -1122,7 +1122,7 @@ print_thread_info (struct ui_out *uiout, char *requested_threads, int pid) struct thread_info *tp; ptid_t current_ptid; struct cleanup *old_chain; - char *extra_info, *name, *target_id; + const char *extra_info, *name, *target_id; int current_thread = -1; update_thread_list (); @@ -1781,7 +1781,7 @@ static void thread_find_command (char *arg, int from_tty) { struct thread_info *tp; - char *tmp; + const char *tmp; unsigned long match = 0; if (arg == NULL || *arg == '\0') -- 2.7.4