binutils-gdb/gdb/mi
Andrew Burgess 1fb1ce02fc gdb/mi: add new --group-by-objfile flag for -file-list-exec-source-files
This commit adds a new option '--group-by-objfile' to the MI command
-file-list-exec-source-files.  With this option the output format is
changed; instead of a single list of source files the results are now
a list of objfiles.  For each objfile all of the source files
associated with that objfile are listed.

Here is an example of the new output format taken from the
documentation (the newlines are added just for readability):

  -file-list-exec-source-files --group-by-objfile
  ^done,files=[{filename="/tmp/info-sources/test.x",
                debug-info="fully-read",
                sources=[{file="test.c",
                          fullname="/tmp/info-sources/test.c",
                          debug-fully-read="true"},
                         {file="/usr/include/stdc-predef.h",
                          fullname="/usr/include/stdc-predef.h",
                          debug-fully-read="true"},
                         {file="header.h",
                          fullname="/tmp/info-sources/header.h",
                          debug-fully-read="true"}]},
               {filename="/lib64/ld-linux-x86-64.so.2",
                debug-info="none",
                sources=[]},
               {filename="system-supplied DSO at 0x7ffff7fcf000",
                debug-info="none",
                sources=[]},
               {filename="/tmp/info-sources/libhelper.so",
                debug-info="fully-read",
                sources=[{file="helper.c",
                          fullname="/tmp/info-sources/helper.c",
                          debug-fully-read="true"},
                         {file="/usr/include/stdc-predef.h",
                          fullname="/usr/include/stdc-predef.h",
                          debug-fully-read="true"},
                         {file="header.h",
                          fullname="/tmp/info-sources/header.h",
                          debug-fully-read="true"}]},
               {filename="/lib64/libc.so.6",
                debug-info="none",
                sources=[]}]

In the above output the 'debug-info' field associated with each
objfile will have one of the values 'none', 'partially-read', or
'fully-read'.  For example, /lib64/libc.so.6 has the value 'none',
this indicates that this object file has no debug information
associated with it, unsurprisingly then, the sources list of this
object file is empty.

An object file that was compiled with debug, for example
/tmp/info-sources/libhelper.so, has the value 'fully-read' above
indicating that this object file does have debug information, and the
information is fully read into GDB.  At different times this field
might have the value 'partially-read' indicating that that the object
file has debug information, but it has not been fully read into GDB
yet.

Source files can appear at most once for any single objfile, but can
appear multiple times in total, if the same source file is part of
multiple objfiles, for example /tmp/info-sources/header.h in the above
output.

The new output format is hidden behind a command option to ensure that
the default output is unchanged, this ensures backward compatibility.

The behaviour of the CLI "info sources" command is unchanged after
this commit.

gdb/ChangeLog:

	* NEWS: Mention additions to -file-list-exec-source-files.
	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Add
	--group-by-objfile option.
	* symtab.c (isrc_flag_option_def): Rename to...
	(isrc_match_flag_option_def): ...this.
	(info_sources_option_defs): Rename to...
	(info_sources_match_option_defs): ...this, and update to rename of
	isrc_flag_option_def.
	(struct filename_grouping_opts): New struct.
	(isrc_grouping_flag_option_def): New type.
	(info_sources_grouping_option_defs): New static global.
	(make_info_sources_options_def_group): Update to return two option
	groups.
	(info_sources_command_completer): Update for changes to
	make_info_sources_options_def_group.
	(info_sources_worker): Add extra parameter, use this to display
	alternative output format.
	(info_sources_command): Pass extra parameter to
	info_sources_worker.
	(_initialize_symtab): Update for changes to
	make_info_sources_options_def_group.
	* symtab.h (info_sources_worker): Add extra parameter.

gdb/doc/ChangeLog:

	* gdb.texinfo (GDB/MI File Commands): Document --group-by-objfile
	extension for -file-list-exec-source-files.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-info-sources.exp: Add additional tests.
2021-06-25 20:54:29 +01:00
..
ChangeLog-1999-2003
mi-cmd-break.c gdb/mi: add a '--force' flag to the '-break-condition' command 2021-05-06 10:46:40 +02:00
mi-cmd-break.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-catch.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-disas.c gdb: fix tab after space indentation issues 2021-05-27 15:18:49 -04:00
mi-cmd-env.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-file.c gdb/mi: add new --group-by-objfile flag for -file-list-exec-source-files 2021-06-25 20:54:29 +01:00
mi-cmd-info.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-stack.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-target.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-cmd-var.c gdb: fix tab after space indentation issues 2021-05-27 15:18:49 -04:00
mi-cmds.c gdb/mi: add a '--force' flag to the '-break-condition' command 2021-05-06 10:46:40 +02:00
mi-cmds.h gdb/mi: add a '--force' flag to the '-break-condition' command 2021-05-06 10:46:40 +02:00
mi-common.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-common.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-console.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-console.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-getopt.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-getopt.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-interp.c gdbsupport, gdb: give names to observers 2021-04-24 19:26:41 -04:00
mi-interp.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-main.c gdb: remove unnecessary lookup_cmd when deprecating commands 2021-05-27 14:00:07 -04:00
mi-main.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-out.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-out.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-parse.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-parse.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
mi-symbol-cmds.c gdb: fix some indentation issues 2021-05-27 15:01:28 -04:00