diff options
-rw-r--r-- | gdb/ChangeLog | 19 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 9 | ||||
-rw-r--r-- | gdb/features/Makefile | 4 | ||||
-rw-r--r-- | gdb/features/rx.c | 2 | ||||
-rw-r--r-- | gdb/features/rx.xml | 130 | ||||
-rw-r--r-- | gdb/target-descriptions.c | 85 |
7 files changed, 173 insertions, 81 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e78a717..b24fdb5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2020-11-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * features/Makefile (XMLTOC): Add rx.xml. + (FEATURE_XMLFILES): Remove rx.xml. + (FEATURE_CFILES rule): Pass '-single-feature' flag. + * features/rx.c: Regenerate. + * features/rx.xml: Wrap in `target` tags, and reindent. + * target-descriptions.c (struct maint_print_c_tdesc_options): New + structure. + (maint_print_c_tdesc_opt_def): New typedef. + (maint_print_c_tdesc_opt_defs): New static global. + (make_maint_print_c_tdesc_options_def_group): New function. + (maint_print_c_tdesc_cmd): Make use of command line flags, only + print single feature C file for target descriptions containing a + single feature. + (maint_print_c_tdesc_cmd_completer): New function. + (_initialize_target_descriptions): Update call to register command + completer, and include command line flag in help text. + 2020-11-11 Andrew Burgess <andrew.burgess@embecosm.com> * riscv-tdep.c (riscv_dwarf_reg_to_regnum): Decode DWARF CSR diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index a57a36a..e7cec1a 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2020-11-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (Maintenance Commands): Update description of 'maint + print c-tdesc'. + 2020-11-02 Andrew Burgess <andrew.burgess@embecosm.com> * gdb.texinfo (Mode Options): Descriptions of initialization files diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 5270156..7092331 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -38716,8 +38716,8 @@ checksum. Print the entire architecture configuration. The optional argument @var{file} names the file where the output goes. -@kindex maint print c-tdesc @r{[}@var{file}@r{]} -@item maint print c-tdesc +@kindex maint print c-tdesc +@item maint print c-tdesc @r{[}-single-feature@r{]} @r{[}@var{file}@r{]} 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 @@ -38727,6 +38727,11 @@ 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. +When the optional flag @samp{-single-feature} is provided then the +target description being processed (either the default, or from +@var{file}) must only contain a single feature. The source file +produced is different in this case. + @kindex maint print xml-tdesc @item maint print xml-tdesc @r{[}@var{file}@r{]} Print the target description (@pxref{Target Descriptions}) as an XML diff --git a/gdb/features/Makefile b/gdb/features/Makefile index 6896038..d5b3236 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -153,6 +153,7 @@ XMLTOC = \ rs6000/powerpc-vsx64.xml \ rs6000/powerpc-vsx64l.xml \ rs6000/rs6000.xml \ + rx.xml \ s390-linux32.xml \ s390-linux32v1.xml \ s390-linux32v2.xml \ @@ -232,7 +233,6 @@ FEATURE_XMLFILES = aarch64-core.xml \ riscv/32bit-fpu.xml \ riscv/64bit-cpu.xml \ riscv/64bit-fpu.xml \ - rx.xml \ tic6x-c6xp.xml \ tic6x-core.xml \ tic6x-gp.xml @@ -247,7 +247,7 @@ $(TDESC_CFILES): %.c: %.xml $(FEATURE_CFILES): %.c: %.xml.tmp $(GDB) -nx -q -batch \ - -ex 'maint print c-tdesc $<' > $@.tmp + -ex 'maint print c-tdesc -single-feature $<' > $@.tmp sh ../../move-if-change $@.tmp $@ rm $< diff --git a/gdb/features/rx.c b/gdb/features/rx.c index ebbc504..dd765c2 100644 --- a/gdb/features/rx.c +++ b/gdb/features/rx.c @@ -1,5 +1,5 @@ /* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: rx.xml.tmp */ + Original: rx.xml */ #include "defs.h" #include "osabi.h" diff --git a/gdb/features/rx.xml b/gdb/features/rx.xml index d19b536..35348e8 100644 --- a/gdb/features/rx.xml +++ b/gdb/features/rx.xml @@ -5,70 +5,72 @@ are permitted in any medium without royalty provided the copyright notice and this notice are preserved. --> -<!DOCTYPE feature SYSTEM "gdb-target.dtd"> -<feature name="org.gnu.gdb.rx.core"> - <reg name="r0" bitsize="32" type="data_ptr"/> - <reg name="r1" bitsize="32" type="uint32"/> - <reg name="r2" bitsize="32" type="uint32"/> - <reg name="r3" bitsize="32" type="uint32"/> - <reg name="r4" bitsize="32" type="uint32"/> - <reg name="r5" bitsize="32" type="uint32"/> - <reg name="r6" bitsize="32" type="uint32"/> - <reg name="r7" bitsize="32" type="uint32"/> - <reg name="r8" bitsize="32" type="uint32"/> - <reg name="r9" bitsize="32" type="uint32"/> - <reg name="r10" bitsize="32" type="uint32"/> - <reg name="r11" bitsize="32" type="uint32"/> - <reg name="r12" bitsize="32" type="uint32"/> - <reg name="r13" bitsize="32" type="uint32"/> - <reg name="r14" bitsize="32" type="uint32"/> - <reg name="r15" bitsize="32" type="uint32"/> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <feature name="org.gnu.gdb.rx.core"> + <reg name="r0" bitsize="32" type="data_ptr"/> + <reg name="r1" bitsize="32" type="uint32"/> + <reg name="r2" bitsize="32" type="uint32"/> + <reg name="r3" bitsize="32" type="uint32"/> + <reg name="r4" bitsize="32" type="uint32"/> + <reg name="r5" bitsize="32" type="uint32"/> + <reg name="r6" bitsize="32" type="uint32"/> + <reg name="r7" bitsize="32" type="uint32"/> + <reg name="r8" bitsize="32" type="uint32"/> + <reg name="r9" bitsize="32" type="uint32"/> + <reg name="r10" bitsize="32" type="uint32"/> + <reg name="r11" bitsize="32" type="uint32"/> + <reg name="r12" bitsize="32" type="uint32"/> + <reg name="r13" bitsize="32" type="uint32"/> + <reg name="r14" bitsize="32" type="uint32"/> + <reg name="r15" bitsize="32" type="uint32"/> - <flags id="psw_flags" size="4"> - <field name="C" start="0" end="0"/> - <field name="Z" start="1" end="1"/> - <field name="S" start="2" end="2"/> - <field name="O" start="3" end="3"/> - <field name="I" start="16" end="16"/> - <field name="U" start="17" end="17"/> - <field name="PM" start="20" end="20"/> - <field name="IPL0" start="24" end="24"/> - <field name="IPL1" start="25" end="25"/> - <field name="IPL2" start="26" end="26"/> - <field name="IPL3" start="27" end="27"/> - </flags> + <flags id="psw_flags" size="4"> + <field name="C" start="0" end="0"/> + <field name="Z" start="1" end="1"/> + <field name="S" start="2" end="2"/> + <field name="O" start="3" end="3"/> + <field name="I" start="16" end="16"/> + <field name="U" start="17" end="17"/> + <field name="PM" start="20" end="20"/> + <field name="IPL0" start="24" end="24"/> + <field name="IPL1" start="25" end="25"/> + <field name="IPL2" start="26" end="26"/> + <field name="IPL3" start="27" end="27"/> + </flags> - <flags id="fpsw_flags" size="4"> - <field name="RM0" start="0" end="0"/> - <field name="RM1" start="1" end="1"/> - <field name="CV" start="2" end="2"/> - <field name="CO" start="3" end="3"/> - <field name="CZ" start="4" end="4"/> - <field name="CU" start="5" end="5"/> - <field name="CX" start="6" end="6"/> - <field name="CE" start="7" end="7"/> - <field name="DN" start="8" end="8"/> - <field name="EV" start="10" end="10"/> - <field name="EO" start="11" end="11"/> - <field name="EZ" start="12" end="12"/> - <field name="EU" start="13" end="13"/> - <field name="EX" start="14" end="14"/> - <field name="FV" start="26" end="26"/> - <field name="FO" start="27" end="27"/> - <field name="FZ" start="28" end="28"/> - <field name="FU" start="29" end="29"/> - <field name="FX" start="30" end="30"/> - <field name="FS" start="31" end="31"/> - </flags> + <flags id="fpsw_flags" size="4"> + <field name="RM0" start="0" end="0"/> + <field name="RM1" start="1" end="1"/> + <field name="CV" start="2" end="2"/> + <field name="CO" start="3" end="3"/> + <field name="CZ" start="4" end="4"/> + <field name="CU" start="5" end="5"/> + <field name="CX" start="6" end="6"/> + <field name="CE" start="7" end="7"/> + <field name="DN" start="8" end="8"/> + <field name="EV" start="10" end="10"/> + <field name="EO" start="11" end="11"/> + <field name="EZ" start="12" end="12"/> + <field name="EU" start="13" end="13"/> + <field name="EX" start="14" end="14"/> + <field name="FV" start="26" end="26"/> + <field name="FO" start="27" end="27"/> + <field name="FZ" start="28" end="28"/> + <field name="FU" start="29" end="29"/> + <field name="FX" start="30" end="30"/> + <field name="FS" start="31" end="31"/> + </flags> - <reg name="usp" bitsize="32" type="data_ptr"/> - <reg name="isp" bitsize="32" type="data_ptr"/> - <reg name="psw" bitsize="32" type="psw_flags"/> - <reg name="pc" bitsize="32" type="code_ptr"/> - <reg name="intb" bitsize="32" type="data_ptr"/> - <reg name="bpsw" bitsize="32" type="psw_flags"/> - <reg name="bpc" bitsize="32" type="code_ptr"/> - <reg name="fintv" bitsize="32" type="code_ptr"/> - <reg name="fpsw" bitsize="32" type="fpsw_flags"/> - <reg name="acc" bitsize="64" type="uint64"/> -</feature> + <reg name="usp" bitsize="32" type="data_ptr"/> + <reg name="isp" bitsize="32" type="data_ptr"/> + <reg name="psw" bitsize="32" type="psw_flags"/> + <reg name="pc" bitsize="32" type="code_ptr"/> + <reg name="intb" bitsize="32" type="data_ptr"/> + <reg name="bpsw" bitsize="32" type="psw_flags"/> + <reg name="bpc" bitsize="32" type="code_ptr"/> + <reg name="fintv" bitsize="32" type="code_ptr"/> + <reg name="fpsw" bitsize="32" type="fpsw_flags"/> + <reg name="acc" bitsize="64" type="uint64"/> + </feature> +</target> diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 6d0905b..d21f6fd 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -1731,12 +1731,45 @@ tdesc_get_features_xml (const target_desc *tdesc) return tdesc->xmltarget; } +/* Data structures and functions to setup the option flags for 'maintenance + print c-tdesc command. */ + +struct maint_print_c_tdesc_options +{ + /* True when the '-single-feature' flag was passed. */ + bool single_feature = false; +}; + +using maint_print_c_tdesc_opt_def + = gdb::option::flag_option_def<maint_print_c_tdesc_options>; + +static const gdb::option::option_def maint_print_c_tdesc_opt_defs[] = { + maint_print_c_tdesc_opt_def { + "single-feature", + [] (maint_print_c_tdesc_options *opt) { return &opt->single_feature; }, + N_("Print C description of just a single feature.") + }, +}; + +static inline gdb::option::option_def_group +make_maint_print_c_tdesc_options_def_group (maint_print_c_tdesc_options *opts) +{ + return {{maint_print_c_tdesc_opt_defs}, opts}; +} + +/* Implement 'maintenance print c-tdesc' command. */ + static void maint_print_c_tdesc_cmd (const char *args, int from_tty) { const struct target_desc *tdesc; const char *filename; + maint_print_c_tdesc_options opts; + auto grp = make_maint_print_c_tdesc_options_def_group (&opts); + gdb::option::process_options + (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp); + if (args == NULL) { /* Use the global target-supplied description, not the current @@ -1768,15 +1801,12 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) /* Print c files for target features instead of target descriptions, because c files got from target features are more flexible than the counterparts. */ - if (startswith (filename_after_features.c_str (), "i386/32bit-") - || startswith (filename_after_features.c_str (), "i386/64bit-") - || startswith (filename_after_features.c_str (), "i386/x32-core.xml") - || startswith (filename_after_features.c_str (), "riscv/") - || startswith (filename_after_features.c_str (), "tic6x-") - || startswith (filename_after_features.c_str (), "aarch64") - || startswith (filename_after_features.c_str (), "arm/") - || startswith (filename_after_features.c_str (), "arc/")) + if (opts.single_feature) { + if (tdesc->features.size () != 1) + error (_("only target descriptions with 1 feature can be used " + "with -single-feature option")); + print_c_feature v (filename_after_features); tdesc->accept (v); @@ -1789,6 +1819,22 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) } } +/* Completer for the "backtrace" command. */ + +static void +maint_print_c_tdesc_cmd_completer (struct cmd_list_element *ignore, + completion_tracker &tracker, + const char *text, const char *word) +{ + auto grp = make_maint_print_c_tdesc_options_def_group (nullptr); + if (gdb::option::complete_options + (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp)) + return; + + word = advance_to_filename_complete_word_point (tracker, text); + filename_completer (ignore, tracker, text, word); +} + /* Implement the maintenance print xml-tdesc command. */ static void @@ -1951,10 +1997,25 @@ Unset the file to read for an XML target description.\n\ When unset, GDB will read the description from the target."), &tdesc_unset_cmdlist); - cmd = add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\ -Print the current target description as a C source file."), - &maintenanceprintlist); - set_cmd_completer (cmd, filename_completer); + auto grp = make_maint_print_c_tdesc_options_def_group (nullptr); + static std::string help_text + = gdb::option::build_help (_("\ +Print the current target description as a C source file.\n\ +Usage: maintenance print c-tdesc [OPTION] [FILENAME]\n\ +\n\ +Options:\n\ +%OPTIONS%\n\ +\n\ +When FILENAME is not provided then print the current target\n\ +description, otherwise an XML target description is read from\n\ +FILENAME and printed as a C function.\n\ +\n\ +When '-single-feature' is used then the target description should\n\ +contain a single feature and the generated C code will only create\n\ +that feature within an already existing target_desc object."), grp); + cmd = add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, + help_text.c_str (), &maintenanceprintlist); + set_cmd_completer_handle_brkchars (cmd, maint_print_c_tdesc_cmd_completer); cmd = add_cmd ("xml-tdesc", class_maintenance, maint_print_xml_tdesc_cmd, _("\ Print the current target description as an XML file."), |