* ada-lang.c (is_known_support_routine): New variable fullname.  Use
	access call to verify the symtab_to_fullname result.
	* breakpoint.c (print_breakpoint_location, update_static_tracepoint):
	Remove NULL check of symtab_to_fullname result.
	* cli/cli-cmds.c (edit_command): Likewise.
	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
	(mi_cmd_file_list_exec_source_files): Likewise.
	* python/py-symtab.c (stpy_fullname): Likewise.
	* source.c (symtab_to_fullname): Update function comment.  Rename
	variable r to fd, move it to inner block.  Always provide non-NULL
	result.
	(print_source_lines_base): Remove NULL check of symtab_to_fullname
	result.
	* stack.c (print_frame): Likewise.
	* symtab.c (iterate_over_some_symtabs, find_line_symtab, sources_info):
	Likewise.
	* tracepoint.c (print_one_static_tracepoint_marker): Likewise.

gdb/doc/
	* gdb.texinfo (GDB/MI Data Manipulation) (fullname): Make it always
	present.
	(GDB/MI File Commands) (-file-list-exec-source-files): Make the
	fullname output always present.

gdb/testsuite/
	* gdb.mi/mi-fullname-deleted.exp: New file.
This commit is contained in:
Jan Kratochvil 2012-12-25 08:03:33 +00:00
parent c2c899ab4b
commit f35a17b542
14 changed files with 124 additions and 85 deletions

View File

@ -1,3 +1,23 @@
2012-12-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* ada-lang.c (is_known_support_routine): New variable fullname. Use
access call to verify the symtab_to_fullname result.
* breakpoint.c (print_breakpoint_location, update_static_tracepoint):
Remove NULL check of symtab_to_fullname result.
* cli/cli-cmds.c (edit_command): Likewise.
* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
(mi_cmd_file_list_exec_source_files): Likewise.
* python/py-symtab.c (stpy_fullname): Likewise.
* source.c (symtab_to_fullname): Update function comment. Rename
variable r to fd, move it to inner block. Always provide non-NULL
result.
(print_source_lines_base): Remove NULL check of symtab_to_fullname
result.
* stack.c (print_frame): Likewise.
* symtab.c (iterate_over_some_symtabs, find_line_symtab, sources_info):
Likewise.
* tracepoint.c (print_one_static_tracepoint_marker): Likewise.
2012-12-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanup.

View File

@ -11084,6 +11084,7 @@ is_known_support_routine (struct frame_info *frame)
const char *func_name;
enum language func_lang;
int i;
const char *fullname;
/* If this code does not have any debugging information (no symtab),
This cannot be any user code. */
@ -11098,7 +11099,8 @@ is_known_support_routine (struct frame_info *frame)
for the user. This should also take care of case such as VxWorks
where the kernel has some debugging info provided for a few units. */
if (symtab_to_fullname (sal.symtab) == NULL)
fullname = symtab_to_fullname (sal.symtab);
if (access (fullname, R_OK) != 0)
return 1;
/* Check the unit filename againt the Ada runtime file naming.

View File

@ -5694,8 +5694,7 @@ print_breakpoint_location (struct breakpoint *b,
struct symtab_and_line sal = find_pc_line (loc->address, 0);
const char *fullname = symtab_to_fullname (sal.symtab);
if (fullname)
ui_out_field_string (uiout, "fullname", fullname);
ui_out_field_string (uiout, "fullname", fullname);
}
ui_out_field_int (uiout, "line", loc->line_number);
@ -13870,8 +13869,7 @@ update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
{
const char *fullname = symtab_to_fullname (sal2.symtab);
if (fullname)
ui_out_field_string (uiout, "fullname", fullname);
ui_out_field_string (uiout, "fullname", fullname);
}
ui_out_field_int (uiout, "line", sal2.line);

View File

@ -840,16 +840,7 @@ edit_command (char *arg, int from_tty)
if ((editor = (char *) getenv ("EDITOR")) == NULL)
editor = "/bin/ex";
/* If we don't already know the full absolute file name of the
source file, find it now. */
if (!sal.symtab->fullname)
{
fn = symtab_to_fullname (sal.symtab);
if (!fn)
fn = "unknown";
}
else
fn = sal.symtab->fullname;
fn = symtab_to_fullname (sal.symtab);
/* Quote the file name, in case it has whitespace or other special
characters. */

View File

@ -1,3 +1,10 @@
2012-12-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.texinfo (GDB/MI Data Manipulation) (fullname): Make it always
present.
(GDB/MI File Commands) (-file-list-exec-source-files): Make the
fullname output always present.
2012-12-23 Pierre Muller <muller@sourceware.org>
* gdbint.texinfo (Function prototypes): Require use of "extern"

View File

@ -31086,9 +31086,13 @@ file name or a relative file name depending on the compile command
used.
@item fullname
This field is optional. If it is present it will contain an absolute
file name of @samp{file}. If this field is not present then
@value{GDBN} was unable to determine the absolute file name.
Absolute file name of @samp{file}. It is converted to a canonical form
using the source file search path
(@pxref{Source Path, ,Specifying Source Directories})
and after resolving all the symbolic links.
If the source file is not found this field will contain the path as
present in the debug information.
@item line_asm_insn
This is a list of tuples containing the disassembly for @samp{line} in
@ -32269,8 +32273,8 @@ The @value{GDBN} equivalent is @samp{info source}
List the source files for the current executable.
It will always output the filename, but only when @value{GDBN} can find
the absolute file name of a source file, will it output the fullname.
It will always output both the filename and fullname (absolute file
name) of a source file.
@subsubheading @value{GDBN} Command

View File

@ -48,16 +48,11 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
if (!st.symtab)
error (_("-file-list-exec-source-file: No symtab"));
/* Extract the fullname if it is not known yet. */
symtab_to_fullname (st.symtab);
/* Print to the user the line, filename and fullname. */
ui_out_field_int (uiout, "line", st.line);
ui_out_field_string (uiout, "file", st.symtab->filename);
/* We may not be able to open the file (not available). */
if (st.symtab->fullname)
ui_out_field_string (uiout, "fullname", st.symtab->fullname);
ui_out_field_string (uiout, "fullname", symtab_to_fullname (st.symtab));
ui_out_field_int (uiout, "macro-info", st.symtab->macro_table ? 1 : 0);
}
@ -99,12 +94,7 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
ui_out_begin (uiout, ui_out_type_tuple, NULL);
ui_out_field_string (uiout, "file", s->filename);
/* Extract the fullname if it is not known yet. */
symtab_to_fullname (s);
if (s->fullname)
ui_out_field_string (uiout, "fullname", s->fullname);
ui_out_field_string (uiout, "fullname", symtab_to_fullname (s));
ui_out_end (uiout, ui_out_type_tuple);
}

View File

@ -132,11 +132,8 @@ stpy_fullname (PyObject *self, PyObject *args)
STPY_REQUIRE_VALID (self, symtab);
fullname = symtab_to_fullname (symtab);
if (fullname)
return PyString_Decode (fullname, strlen (fullname),
host_charset (), NULL);
Py_RETURN_NONE;
return PyString_Decode (fullname, strlen (fullname), host_charset (), NULL);
}
/* Implementation of gdb.Symtab.is_valid (self) -> Boolean.

View File

@ -1075,35 +1075,32 @@ open_source_file (struct symtab *s)
/* Finds the fullname that a symtab represents.
If this functions finds the fullname, it will save it in s->fullname
and it will also return the value.
This functions finds the fullname and saves it in s->fullname.
It will also return the value.
If this function fails to find the file that this symtab represents,
NULL will be returned and s->fullname will be set to NULL. */
the expected fullname is used. Therefore the files does not have to
exist. */
const char *
symtab_to_fullname (struct symtab *s)
{
int r;
if (!s)
return NULL;
/* Use cached copy if we have it.
We rely on forget_cached_source_info being called appropriately
to handle cases like the file being moved. */
if (s->fullname)
return s->fullname;
r = find_and_open_source (s->filename, s->dirname, &s->fullname);
if (r >= 0)
if (s->fullname == NULL)
{
close (r);
return s->fullname;
}
int fd = find_and_open_source (s->filename, s->dirname, &s->fullname);
return NULL;
if (fd >= 0)
close (fd);
else if (s->dirname == NULL)
s->fullname = xstrdup (s->filename);
else
s->fullname = concat (s->dirname, SLASH_STRING, s->filename, NULL);
}
return s->fullname;
}
/* Create and initialize the table S->line_charpos that records
@ -1306,8 +1303,7 @@ print_source_lines_base (struct symtab *s, int line, int stopline,
{
const char *fullname = symtab_to_fullname (s);
if (fullname != NULL)
ui_out_field_string (uiout, "fullname", fullname);
ui_out_field_string (uiout, "fullname", fullname);
}
ui_out_text (uiout, "\n");
}

View File

@ -1189,8 +1189,7 @@ print_frame (struct frame_info *frame, int print_level,
{
const char *fullname = symtab_to_fullname (sal.symtab);
if (fullname != NULL)
ui_out_field_string (uiout, "fullname", fullname);
ui_out_field_string (uiout, "fullname", fullname);
}
annotate_frame_source_file_end ();
ui_out_text (uiout, ":");

View File

@ -224,13 +224,13 @@ iterate_over_some_symtabs (const char *name,
{
const char *fp = symtab_to_fullname (s);
if (fp != NULL && FILENAME_CMP (full_path, fp) == 0)
if (FILENAME_CMP (full_path, fp) == 0)
{
if (callback (s, data))
return 1;
}
if (fp != NULL && !is_abs && compare_filenames_for_search (fp, name))
if (!is_abs && compare_filenames_for_search (fp, name))
{
if (callback (s, data))
return 1;
@ -240,24 +240,20 @@ iterate_over_some_symtabs (const char *name,
if (real_path != NULL)
{
const char *fullname = symtab_to_fullname (s);
char *rp = gdb_realpath (fullname);
if (fullname != NULL)
{
char *rp = gdb_realpath (fullname);
make_cleanup (xfree, rp);
if (FILENAME_CMP (real_path, rp) == 0)
{
if (callback (s, data))
return 1;
}
make_cleanup (xfree, rp);
if (FILENAME_CMP (real_path, rp) == 0)
{
if (callback (s, data))
return 1;
}
if (!is_abs && compare_filenames_for_search (rp, name))
{
if (callback (s, data))
return 1;
}
}
if (!is_abs && compare_filenames_for_search (rp, name))
{
if (callback (s, data))
return 1;
}
}
}
@ -2551,9 +2547,6 @@ find_line_symtab (struct symtab *symtab, int line,
symtab->filename);
}
/* Get symbol full file name if possible. */
symtab_to_fullname (symtab);
ALL_SYMTABS (objfile, s)
{
struct linetable *l;
@ -2561,9 +2554,7 @@ find_line_symtab (struct symtab *symtab, int line,
if (FILENAME_CMP (symtab->filename, s->filename) != 0)
continue;
if (symtab->fullname != NULL
&& symtab_to_fullname (s) != NULL
&& FILENAME_CMP (symtab->fullname, s->fullname) != 0)
if (FILENAME_CMP (symtab->fullname, symtab_to_fullname (s)) != 0)
continue;
l = LINETABLE (s);
ind = find_line_common (l, line, &exact, 0);
@ -3294,7 +3285,7 @@ sources_info (char *ignore, int from_tty)
{
const char *fullname = symtab_to_fullname (s);
output_source_filename (fullname ? fullname : s->filename, &data);
output_source_filename (fullname, &data);
}
printf_filtered ("\n\n");

View File

@ -1,3 +1,7 @@
2012-12-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.mi/mi-fullname-deleted.exp: New file.
2012-12-24 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/skip-solib.exp (info skip with pending file): Update the

View File

@ -0,0 +1,41 @@
# Copyright 2012 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib mi-support.exp
set MIFLAGS "-i=mi"
gdb_exit
if [mi_gdb_start] {
continue
}
standard_testfile
set srcfileabs [standard_output_file $srcfile]
set f [open $srcfileabs "w"]
puts $f "int main (void) { return 0; }"
close $f
if { [gdb_compile "$srcfileabs" "${binfile}" executable {debug}] != "" } {
untested $testname
return -1
}
file delete -- $srcfileabs
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
mi_gdb_test "-file-list-exec-source-file" ".*\",fullname=\"[string_to_regexp $srcfileabs]\".*" "fullname present"

View File

@ -4872,8 +4872,7 @@ print_one_static_tracepoint_marker (int count,
{
const char *fullname = symtab_to_fullname (sal.symtab);
if (fullname)
ui_out_field_string (uiout, "fullname", fullname);
ui_out_field_string (uiout, "fullname", fullname);
}
else
ui_out_field_skip (uiout, "fullname");