From patchwork Mon Apr 28 22:35:33 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 742 Return-Path: X-Original-To: siddhesh@wilcox.dreamhost.com Delivered-To: siddhesh@wilcox.dreamhost.com Received: from homiemail-mx22.g.dreamhost.com (mx2.sub5.homie.mail.dreamhost.com [208.113.200.128]) by wilcox.dreamhost.com (Postfix) with ESMTP id 7CC0036007A for ; Mon, 28 Apr 2014 15:35:41 -0700 (PDT) Received: by homiemail-mx22.g.dreamhost.com (Postfix, from userid 14314964) id 3B6F5514BB0E; Mon, 28 Apr 2014 15:35:41 -0700 (PDT) X-Original-To: gdb@patchwork.siddhesh.in Delivered-To: x14314964@homiemail-mx22.g.dreamhost.com Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by homiemail-mx22.g.dreamhost.com (Postfix) with ESMTPS id 15D70514BB0B for ; Mon, 28 Apr 2014 15:35:41 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:mime-version:content-type :content-transfer-encoding:message-id:date:to:subject :in-reply-to:references; q=dns; s=default; b=eA6ASV8+7joiFgNPxUw A/3eabE+HHENWHnArNd/TwfYVTsEdMp71fscDc6ASox9AKn1stSaB9UkXwqES0fz 5bsCK76rd1hEPtUPXDM9UCt1hgs6CXAlMmcNtTEjRbbOnSKZ42u5ycLXUtsh7ZLB 5bArEKd/OPweMwSjwQb1brqk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:mime-version:content-type :content-transfer-encoding:message-id:date:to:subject :in-reply-to:references; s=default; bh=4fYqwFFey4I5ReUhTavAx3iMK Sk=; b=wR0DljD2L+z7JOBw6r0EB8zzK3MZAdW/jPwBX3BhMqVDpXZ8nWs/zP/dN Ptk0M47m+6CK4EdBm4bdBtDU7iiH0dYkwEenMtv8Dnfl7x8BqBvMuCKrF5n7Gluc r7Fv1IScc6nCxdnZg9WyrO4cDEXoQg3EJXnu4BSSDZH+MZ1sV8= Received: (qmail 15049 invoked by alias); 28 Apr 2014 22:35:38 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 15029 invoked by uid 89); 28 Apr 2014 22:35:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pa0-f74.google.com Received: from mail-pa0-f74.google.com (HELO mail-pa0-f74.google.com) (209.85.220.74) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 28 Apr 2014 22:35:36 +0000 Received: by mail-pa0-f74.google.com with SMTP id rd3so718396pab.5 for ; Mon, 28 Apr 2014 15:35:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:mime-version:content-type :content-transfer-encoding:message-id:date:to:subject:in-reply-to :references; bh=MFiob+SliDMMl6JZ4JJwtQxUPqUUhQFYPzTfi2DfTpE=; b=bzZ9fjvvzOIOCogEij7QqHcNeyCxOWCAgXu4/nO+SOVpmEIZ5a6SiraxDJW1mibgvB QhqzUPTBwUDtY/naJtdbFdsZ/ehY9THUayYkpDtFNMHWlGSqaFTfVPaFaXANmySHXa8+ /e3phdQKZ/usfz5QDNk/9p+xiSG7LBbmlzMc0i9Sw2tC+8Cdz3ydArsibhKVM92pLMqR HJe14DGBVErQEbzOgjn1nqhMARO2sN1NYNcJOCv6kk5jcCBbqiw6uEv2DcxjswHVI6rK R0QA+K8J7IcxDvE3IQTJLUdyDH9vYlteR0uioSioSp2Mus+ERNgWm8dSYxiRuCG9Cefx k+mQ== X-Gm-Message-State: ALoCoQkdvq+OXLCeG36S7Kl/O+W7/ZS/QgPNqHmJ15cd+aWdmmBsR4bTkphU5vBppR6YbZimOLJm91n/Uq7T9tLjx7omQEZfu0GB/s+kgNO7I1JH1Yd12wS1a8ODumFo0HLnp7aDcnRHGFAMTRUTQNH8CEbx9HR9zc60pztQt7WIhkK3Fj+CF9ElTq8cB0o0j7Iyi+wsQVs2SLjKPLRmNNnTBQb/LFUvGw== X-Received: by 10.66.148.10 with SMTP id to10mr12898975pab.12.1398724534682; Mon, 28 Apr 2014 15:35:34 -0700 (PDT) Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id y50si2343503yhk.4.2014.04.28.15.35.34 for (version=TLSv1.1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Apr 2014 15:35:34 -0700 (PDT) Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.17.128.44]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id 1F6B85A41EE; Mon, 28 Apr 2014 15:35:33 -0700 (PDT) From: Doug Evans MIME-Version: 1.0 Message-ID: <21342.55221.571685.3007@ruffy.mtv.corp.google.com> Date: Mon, 28 Apr 2014 15:35:33 -0700 To: Eli Zaretskii , gdb-patches Subject: [PATCH, doc RFA] New option -D: alias for --data-directory In-Reply-To: References: <21272.60289.723000.990365@ruffy.mtv.corp.google.com> <834n3aqyaa.fsf@gnu.org> <83y50lq2b8.fsf@gnu.org> X-IsSubscribed: yes X-DH-Original-To: gdb@patchwork.siddhesh.in Hi Eli. Doc RFA please. :-) 2014-04-28 Doug Evans New command line option -D. * NEWS: Mention it. * main.c (set_gdb_data_directory): New function. (captured_main): Recognize -D. Flag error for --data-directory "". Call set_gdb_data_directory. * main.h (set_gdb_data_directory): Declare. * top.c (staged_gdb_datadir): New static global. (set_gdb_datadir): Call set_gdb_data_directory (show_gdb_datadir): New function. (init_main): Update init of data-directory parameter. testsuite/ * gdb.base/catch-syscall.exp (test_catch_syscall_fail_nodatadir): Update. (do_syscall_tests_without_xml): Update. doc/ * gdb.texinfo (Mode Options): Add -D. diff --git a/gdb/NEWS b/gdb/NEWS index d0c44ea..00ec8b9 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,11 @@ *** Changes since GDB 7.7 +* New command line options + +-D data-directory + This is an alias for the --data-directory option. + * GDB supports printing and modifying of variable length automatic arrays as specified in ISO C99. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9d91075..7795964 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -1164,7 +1164,9 @@ Run @value{GDBN} using @var{directory} as its working directory, instead of the current directory. @item -data-directory @var{directory} +@itemx -D @var{directory} @cindex @code{--data-directory} +@cindex @code{-D} Run @value{GDBN} using @var{directory} as its data directory. The data directory is where @value{GDBN} searches for its auxiliary files. @xref{Data Files}. diff --git a/gdb/main.c b/gdb/main.c index 59015f5..9652cba 100644 --- a/gdb/main.c +++ b/gdb/main.c @@ -106,6 +106,41 @@ get_gdb_program_name (void) static void print_gdb_help (struct ui_file *); +/* Set the data-directory parameter to NEW_DATADIR. + If NEW_DATADIR is not a directory then a warning is printed. + We don't signal an error for backward compatibility. */ + +void +set_gdb_data_directory (const char *new_datadir) +{ + struct stat st; + + if (stat (new_datadir, &st) < 0) + { + int save_errno = errno; + + fprintf_unfiltered (gdb_stderr, "Warning: "); + print_sys_errmsg (new_datadir, save_errno); + } + else if (!S_ISDIR (st.st_mode)) + warning (_("%s is not a directory."), new_datadir); + + xfree (gdb_datadir); + gdb_datadir = gdb_realpath (new_datadir); + + /* gdb_realpath won't return an absolute path if the path doesn't exist, + but we still want to record an absolute path here. If the user entered + "../foo" and "../foo" doesn't exist then we'll record $(pwd)/../foo which + isn't canonical, but that's ok. */ + if (!IS_ABSOLUTE_PATH (gdb_datadir)) + { + char *abs_datadir = gdb_abspath (gdb_datadir); + + xfree (gdb_datadir); + gdb_datadir = abs_datadir; + } +} + /* Relocate a file or directory. PROGNAME is the name by which gdb was invoked (i.e., argv[0]). INITIAL is the default value for the file or directory. FLAG is true if the value is relocatable, false @@ -517,6 +552,7 @@ captured_main (void *data) {"directory", required_argument, 0, 'd'}, {"d", required_argument, 0, 'd'}, {"data-directory", required_argument, 0, 'D'}, + {"D", required_argument, 0, 'D'}, {"cd", required_argument, 0, OPT_CD}, {"tty", required_argument, 0, 't'}, {"baud", required_argument, 0, 'b'}, @@ -641,8 +677,15 @@ captured_main (void *data) gdb_stdout = ui_file_new(); break; case 'D': - xfree (gdb_datadir); - gdb_datadir = xstrdup (optarg); + if (optarg[0] == '\0') + { + fprintf_unfiltered (gdb_stderr, + _("%s: empty path for" + " `--data-directory'\n"), + argv[0]); + exit (1); + } + set_gdb_data_directory (optarg); gdb_datadir_provided = 1; break; #ifdef GDBTK diff --git a/gdb/main.h b/gdb/main.h index 089e1c8..502ca30 100644 --- a/gdb/main.h +++ b/gdb/main.h @@ -47,4 +47,6 @@ extern char *windows_get_absolute_argv0 (const char *argv0); parse the argv array. */ extern const char *get_gdb_program_name (void); +extern void set_gdb_data_directory (const char *new_data_dir); + #endif diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp index da838f7..a70534c 100644 --- a/gdb/testsuite/gdb.base/catch-syscall.exp +++ b/gdb/testsuite/gdb.base/catch-syscall.exp @@ -256,7 +256,8 @@ proc test_catch_syscall_fail_nodatadir {} { # Make sure GDB doesn't load the syscalls xml from the system # data directory. - gdb_test_no_output "set data-directory /the/path/to/nowhere" + gdb_test "set data-directory /the/path/to/nowhere" \ + "Warning: /the/path/to/nowhere: .*" # Testing to see if we receive a warning when calling "catch # syscall" without XML support (without datadir). @@ -374,7 +375,8 @@ proc test_catch_syscall_with_wrong_args_noxml {} { proc do_syscall_tests_without_xml {} { # Make sure GDB doesn't load the syscalls xml from the system data # directory. - gdb_test_no_output "set data-directory /the/path/to/nowhere" + gdb_test "set data-directory /the/path/to/nowhere" \ + "Warning: /the/path/to/nowhere: .*" # Let's test if we can catch syscalls without XML support. # We should succeed, but GDB is not supposed to print syscall names. diff --git a/gdb/top.c b/gdb/top.c index fa20025..186b05f 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -1668,14 +1668,28 @@ show_exec_done_display_p (struct ui_file *file, int from_tty, value); } +/* New values of the "data-directory" parameter are staged here. */ +static char *staged_gdb_datadir; + /* "set" command for the gdb_datadir configuration variable. */ static void set_gdb_datadir (char *args, int from_tty, struct cmd_list_element *c) { + set_gdb_data_directory (staged_gdb_datadir); observer_notify_gdb_datadir_changed (); } +/* "show" command for the gdb_datadir configuration variable. */ + +static void +show_gdb_datadir (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("GDB's data directory is \"%s\".\n"), + gdb_datadir); +} + static void set_history_filename (char *args, int from_tty, struct cmd_list_element *c) { @@ -1793,11 +1807,11 @@ Use \"on\" to enable the notification, and \"off\" to disable it."), &setlist, &showlist); add_setshow_filename_cmd ("data-directory", class_maintenance, - &gdb_datadir, _("Set GDB's data directory."), + &staged_gdb_datadir, _("Set GDB's data directory."), _("Show GDB's data directory."), _("\ When set, GDB uses the specified path to search for data files."), - set_gdb_datadir, NULL, + set_gdb_datadir, show_gdb_datadir, &setlist, &showlist); }