From: Doug Evans <dje@google.com>
To: Eli Zaretskii <eliz@gnu.org>, gdb-patches <gdb-patches@sourceware.org>
Subject: [PATCH, doc RFA] New option -D: alias for --data-directory
Date: Mon, 28 Apr 2014 22:35:00 -0000 [thread overview]
Message-ID: <21342.55221.571685.3007@ruffy.mtv.corp.google.com> (raw)
In-Reply-To: <CADPb22TsWPeusEAPNvZRx6uTQ-tpxryaviyxvBDh=214_3BrJw@mail.gmail.com>
Hi Eli.
Doc RFA please. :-)
2014-04-28 Doug Evans <dje@google.com>
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);
}
next prev parent reply other threads:[~2014-04-28 22:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-27 19:42 [RFC] New option -B: simplify running gdb from build directory Doug Evans
2013-12-27 19:54 ` Doug Evans
2013-12-27 20:15 ` Eli Zaretskii
2013-12-27 20:51 ` Doug Evans
2014-03-06 21:41 ` [PATCH, doc RFA] " Doug Evans
2014-03-07 7:10 ` Eli Zaretskii
[not found] ` <CADPb22RKaBx1p2vF4-wGODZVe-QqdGc93Ax-bD82xb9Adr5EJw@mail.gmail.com>
2014-03-07 18:41 ` Eli Zaretskii
2014-03-07 18:54 ` Doug Evans
2014-03-25 1:02 ` Doug Evans
2014-03-25 1:20 ` Doug Evans
2014-03-25 1:28 ` Doug Evans
2014-04-28 22:35 ` Doug Evans [this message]
2014-04-29 2:37 ` [PATCH, doc RFA] New option -D: alias for --data-directory Eli Zaretskii
2014-05-16 19:17 ` Doug Evans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=21342.55221.571685.3007@ruffy.mtv.corp.google.com \
--to=dje@google.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox