From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13626 invoked by alias); 10 May 2011 16:59:41 -0000 Received: (qmail 13612 invoked by uid 22791); 10 May 2011 16:59:39 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 10 May 2011 16:59:21 +0000 Received: from wpaz17.hot.corp.google.com (wpaz17.hot.corp.google.com [172.24.198.81]) by smtp-out.google.com with ESMTP id p4AGxJRP011128 for ; Tue, 10 May 2011 09:59:20 -0700 Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.18.118.116]) by wpaz17.hot.corp.google.com with ESMTP id p4AGxILo028558 for ; Tue, 10 May 2011 09:59:19 -0700 Received: by ruffy.mtv.corp.google.com (Postfix, from userid 67641) id 8488B246196; Tue, 10 May 2011 09:59:18 -0700 (PDT) To: gdb-patches@sourceware.org Subject: [patch] Fix handling of elided libthread-db-search-path values. Message-Id: <20110510165918.8488B246196@ruffy.mtv.corp.google.com> Date: Tue, 10 May 2011 16:59:00 -0000 From: dje@google.com (Doug Evans) X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00250.txt.bz2 Hi. This patch addresses a couple of issues. 1) "monitor set libthread-db-search-path" doesn't work. gdbserver assumes it will receive "set libthread-db-search-path " which is wrong. 2) There's an assumption that the default value for libthread-db-search-path is always an empty list. That's true, but only because no one overrides LIBTHREAD_DB_SEARCH_PATH. At least not in FSF trees, or not yet in FSF trees. Committed. 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. 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. Index: linux-thread-db.c =================================================================== RCS file: /cvs/src/src/gdb/linux-thread-db.c,v retrieving revision 1.82 diff -u -p -r1.82 linux-thread-db.c --- linux-thread-db.c 17 Apr 2011 19:11:07 -0000 1.82 +++ linux-thread-db.c 10 May 2011 16:51:53 -0000 @@ -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); Index: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.831 diff -u -p -r1.831 gdb.texinfo --- doc/gdb.texinfo 9 May 2011 21:49:57 -0000 1.831 +++ doc/gdb.texinfo 10 May 2011 16:51:53 -0000 @@ -2855,7 +2855,7 @@ watchpoints in programs with multiple th 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 the its value. @item monitor exit Tell gdbserver to exit immediately. This command should be followed by Index: gdbserver/thread-db.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/thread-db.c,v retrieving revision 1.39 diff -u -p -r1.39 thread-db.c --- gdbserver/thread-db.c 6 Jan 2011 00:14:09 -0000 1.39 +++ gdbserver/thread-db.c 10 May 2011 16:51:53 -0000 @@ -916,9 +916,14 @@ thread_db_mourn (struct process_info *pr 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 * 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 `");