summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2017-07-26 12:03:47 +0100
committerYao Qi <yao.qi@linaro.org>2017-07-26 12:03:47 +0100
commit8e2141c6fba6daea1555e042da9de49ec8b1977d (patch)
treed273c1f083bb0c1814017320201269bf22c59c9d
parentb468ff4cbf14744d512e464b4be9681d3e0302ad (diff)
downloadbinutils-gdb-8e2141c6fba6daea1555e042da9de49ec8b1977d.tar.gz
Add optional argument to command "maint prints c-tdesc"
Nowadays, we need two steps to print c files for xml target description, that is, 1) read xml target description in, update the current tdesc, 2) visit the current tdesc, print the c file. It is unnecessary to involve in current tdesc, and some validations in each gdbarch are performed unnecessarily, which will reject some target descriptions if they are missing some mandatory feature. This patch adds an optional argument to "maint print c-tdesc", which is an XML file target description, so that we can combine the two steps above into one step, and don't have to involve in global current tdesc. gdb: 2017-07-26 Yao Qi <yao.qi@linaro.org> * NEWS: Mention it. * features/Makefile (%.c: %.xml): Pass the xml file name to command "maint print c-tdesc". * target-descriptions.c (maint_print_c_tdesc_cmd): Get file name from 'arg'. gdb/doc: 2017-07-26 Yao Qi <yao.qi@linaro.org> * gdb.texinfo (Maintenance Commands): Document optional argument of "maint print c-tdesc".
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/NEWS3
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo14
-rw-r--r--gdb/features/Makefile3
-rw-r--r--gdb/target-descriptions.c25
6 files changed, 44 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index be39af654b7..05072ce93b5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2017-07-26 Yao Qi <yao.qi@linaro.org>
+ * NEWS: Mention it.
+ * features/Makefile (%.c: %.xml): Pass the xml file name to
+ command "maint print c-tdesc".
+ * target-descriptions.c (maint_print_c_tdesc_cmd): Get file
+ name from 'arg'.
+
+2017-07-26 Yao Qi <yao.qi@linaro.org>
+
* target-descriptions.c (target_desc): Add ctor and dtor. Do
in-class initialization.
(tdesc_create_feature): Call new instead of XCNEW.
diff --git a/gdb/NEWS b/gdb/NEWS
index 7c8a8f63de2..9cd1df1cfe2 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -17,6 +17,9 @@
QStartupWithShell
Indicates whether the inferior must be started with a shell or not.
+* The "maintenance print c-tdesc" command now takes an optional
+ argument which is the file name of XML target description.
+
* New commands
set debug separate-debug-file
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 2a4330bd7ac..e3a68d36728 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-26 Yao Qi <yao.qi@linaro.org>
+
+ * gdb.texinfo (Maintenance Commands): Document optional
+ argument of "maint print c-tdesc".
+
2017-07-18 Yao Qi <yao.qi@linaro.org>
* gdb.texinfo (Maintenance Commands): Improve the doc to
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 5f55a67b5d7..08a7681a496 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -34687,12 +34687,16 @@ checksum.
Print the entire architecture configuration. The optional argument
@var{file} names the file where the output goes.
-@kindex maint print c-tdesc
+@kindex maint print c-tdesc @r{[}@var{file}@r{]}
@item maint print c-tdesc
-Print the current target description (@pxref{Target Descriptions}) as
-a C source file. The created source file is built into @value{GDBN}
-when @value{GDBN} is built again. This command is used by developers
-after they add or modify XML target descriptions.
+Print the target description (@pxref{Target Descriptions}) as
+a C source file. By default, the target description is for the current
+target, but if the optional argument @var{file} is provided, that file
+is used to produce the description. The @var{file} should be an XML
+document, of the form described in @ref{Target Description Format}.
+The created source file is built into @value{GDBN} when @value{GDBN} is
+built again. This command is used by developers after they add or
+modify XML target descriptions.
@kindex maint print dummy-frames
@item maint print dummy-frames
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 75741acbe17..7ddb5781ffe 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -254,8 +254,7 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
cfiles: $(CFILES)
%.c: %.xml
- $(GDB) -nx -q -batch \
- -ex "set tdesc filename $<" -ex 'maint print c-tdesc' > $@.tmp
+ $(GDB) -nx -q -batch -ex 'maint print c-tdesc $<' > $@.tmp
sh ../../move-if-change $@.tmp $@
# Other dependencies.
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 9484f01c9a4..4129486cd1e 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -1729,18 +1729,29 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
int ix, ix2, ix3;
int printed_field_type = 0;
- /* Use the global target-supplied description, not the current
- architecture's. This lets a GDB for one architecture generate C
- for another architecture's description, even though the gdbarch
- initialization code will reject the new description. */
- tdesc = current_target_desc;
+ if (args == NULL)
+ {
+ /* Use the global target-supplied description, not the current
+ architecture's. This lets a GDB for one architecture generate C
+ for another architecture's description, even though the gdbarch
+ initialization code will reject the new description. */
+ tdesc = current_target_desc;
+ filename = target_description_filename;
+ }
+ else
+ {
+ /* Use the target description from the XML file. */
+ filename = args;
+ tdesc = file_read_description_xml (filename);
+ }
+
if (tdesc == NULL)
error (_("There is no target description to print."));
- if (target_description_filename == NULL)
+ if (filename == NULL)
error (_("The current target description did not come from an XML file."));
- filename = lbasename (target_description_filename);
+ filename = lbasename (filename);
function = (char *) alloca (strlen (filename) + 1);
for (inp = filename, outp = function; *inp != '\0'; inp++)
if (*inp == '.')