From 84e578fbe67910f19ed0bbbc4e8aebd0f87c462a Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 10 May 2011 16:53:23 +0000 Subject: [PATCH 1/1] * linux-thread-db.c (set_libthread_db_search_path): New function. (_initialize_thread_db): Add setter for libthread-db-search-path. gdbserver/ * thread-db.c (thread_db_handle_monitor_command): Handle elided path. doc/ * gdb.texinfo (Threads): If an empty path is provided for libthread-db-search-path it is reset to its default value. (Server): Ditto. --- gdb/ChangeLog | 5 +++++ gdb/doc/ChangeLog | 6 ++++++ gdb/doc/gdb.texinfo | 4 ++-- gdb/gdbserver/ChangeLog | 4 ++++ gdb/gdbserver/thread-db.c | 11 +++++++++-- gdb/linux-thread-db.c | 17 +++++++++++++++-- 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6a130b6..4cf559c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2011-05-10 Doug Evans + + * linux-thread-db.c (set_libthread_db_search_path): New function. + (_initialize_thread_db): Add setter for libthread-db-search-path. + 2011-05-09 Doug Evans * NEWS: Mention --with-iconv-bin. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index e9990c2..0dd6806 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2011-05-10 Doug Evans + + * gdb.texinfo (Threads): If an empty path is provided for + libthread-db-search-path it is reset to its default value. + (Server): Ditto. + 2011-05-09 Doug Evans * gdb.texinfo (Requirements): Fix typo. Mention --with-iconv-bin. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 65172b5..9ccc48a 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -2855,7 +2855,7 @@ watchpoints in programs with multiple threads. If this variable is set, @var{path} is a colon-separated list of directories @value{GDBN} will use to search for @code{libthread_db}. If you omit @var{path}, @samp{libthread-db-search-path} will be reset to -an empty list. +its default value. On @sc{gnu}/Linux and Solaris systems, @value{GDBN} uses a ``helper'' @code{libthread_db} library to obtain information about threads in the @@ -16369,7 +16369,7 @@ protocol (@pxref{Remote Protocol}). When this command is issued, @var{path} is a colon-separated list of directories to search for @code{libthread_db} (@pxref{Threads,,set libthread-db-search-path}). If you omit @var{path}, -@samp{libthread-db-search-path} will be reset to an empty list. +@samp{libthread-db-search-path} will be reset to its default value. @item monitor exit Tell gdbserver to exit immediately. This command should be followed by diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index a29ee23..bea804d 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,7 @@ +2011-05-10 Doug Evans + + * thread-db.c (thread_db_handle_monitor_command): Handle elided path. + 2011-05-04 Doug Evans * linux-low.c (linux_join): Skip process lookup. diff --git a/gdb/gdbserver/thread-db.c b/gdb/gdbserver/thread-db.c index 529516e..872151e 100644 --- a/gdb/gdbserver/thread-db.c +++ b/gdb/gdbserver/thread-db.c @@ -916,9 +916,14 @@ thread_db_mourn (struct process_info *proc) int thread_db_handle_monitor_command (char *mon) { - if (strncmp (mon, "set libthread-db-search-path ", 29) == 0) + const char *cmd = "set libthread-db-search-path"; + size_t cmd_len = strlen (cmd); + + if (strncmp (mon, cmd, cmd_len) == 0 + && (mon[cmd_len] == '\0' + || mon[cmd_len] == ' ')) { - const char *cp = mon + 29; + const char *cp = mon + cmd_len; if (libthread_db_search_path != NULL) free (libthread_db_search_path); @@ -927,6 +932,8 @@ thread_db_handle_monitor_command (char *mon) while (isspace (*cp)) ++cp; + if (*cp == '\0') + cp = LIBTHREAD_DB_SEARCH_PATH; libthread_db_search_path = xstrdup (cp); monitor_output ("libthread-db-search-path set to `"); diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index 2700a65..4203518 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -75,6 +75,17 @@ static char *libthread_db_search_path; +static void +set_libthread_db_search_path (char *ignored, int from_tty, + struct cmd_list_element *c) +{ + if (*libthread_db_search_path == '\0') + { + xfree (libthread_db_search_path); + libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH); + } +} + /* If non-zero, print details of libthread_db processing. */ static int libthread_db_debug; @@ -1719,8 +1730,10 @@ _initialize_thread_db (void) Set search path for libthread_db."), _("\ Show the current search path or libthread_db."), _("\ This path is used to search for libthread_db to be loaded into \ -gdb itself."), - NULL, +gdb itself.\n\ +Its value is a colon (':') separate list of directories to search.\n\ +Setting the search path to an empty list resets it to its default value."), + set_libthread_db_search_path, NULL, &setlist, &showlist); -- 2.7.4