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".
This commit is contained in:
Yao Qi 2017-07-26 12:03:47 +01:00
parent b468ff4cbf
commit 8e2141c6fb
6 changed files with 44 additions and 14 deletions

View File

@ -1,3 +1,11 @@
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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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 == '.')