Enhance gdb.lookup_objfile so that it works with a symlinked binary.

gdb/Changelog:

	* objfiles.c (objfile_filename): New function.
	* objfiles.h (objfile_filename): Declare it.
	(objfile_name): Add function comment.
	* python/py-objfile.c (objfpy_lookup_objfile_by_name): Try both the
	bfd file name (which may be realpath'd), and the original name.

gdb/testsuite/ChangeLog:

	* gdb.python/py-objfile.exp: Test gdb.lookup_objfile on symlinked
	binary.
This commit is contained in:
Doug Evans 2015-01-13 17:00:31 -08:00
parent 8068939ab8
commit e02c96a799
6 changed files with 52 additions and 2 deletions

View file

@ -1,3 +1,11 @@
2015-01-13 Doug Evans <dje@google.com>
* objfiles.c (objfile_filename): New function.
* objfiles.h (objfile_filename): Declare it.
(objfile_name): Add function comment.
* python/py-objfile.c (objfpy_lookup_objfile_by_name): Try both the
bfd file name (which may be realpath'd), and the original name.
2015-01-13 Joel Brobecker <brobecker@adacore.com>
* NEWS: Create a new section for the next release branch.

View file

@ -1492,7 +1492,7 @@ default_iterate_over_objfiles_in_search_order
}
}
/* Return canonical name for OBJFILE. */
/* See objfiles.h. */
const char *
objfile_name (const struct objfile *objfile)
@ -1505,6 +1505,17 @@ objfile_name (const struct objfile *objfile)
/* See objfiles.h. */
const char *
objfile_filename (const struct objfile *objfile)
{
if (objfile->obfd != NULL)
return bfd_get_filename (objfile->obfd);
return NULL;
}
/* See objfiles.h. */
const char *
objfile_debug_name (const struct objfile *objfile)
{

View file

@ -699,8 +699,17 @@ extern void default_iterate_over_objfiles_in_search_order
void set_objfile_per_bfd (struct objfile *obj);
/* Return canonical name for OBJFILE.
This is the real file name if the file has been opened.
Otherwise it is the original name supplied by the user. */
const char *objfile_name (const struct objfile *objfile);
/* Return the (real) file name of OBJFILE if the file has been opened,
otherwise return NULL. */
const char *objfile_filename (const struct objfile *objfile);
/* Return the name to print for OBJFILE in debugging messages. */
extern const char *objfile_debug_name (const struct objfile *objfile);

View file

@ -438,12 +438,18 @@ objfpy_lookup_objfile_by_name (const char *name)
ALL_OBJFILES (objfile)
{
const char *filename;
if ((objfile->flags & OBJF_NOT_FILENAME) != 0)
continue;
/* Don't return separate debug files. */
if (objfile->separate_debug_objfile_backlink != NULL)
continue;
if (compare_filenames_for_search (objfile_name (objfile), name))
filename = objfile_filename (objfile);
if (filename != NULL && compare_filenames_for_search (filename, name))
return objfile;
if (compare_filenames_for_search (objfile->original_name, name))
return objfile;
}

View file

@ -1,3 +1,8 @@
2015-01-13 Doug Evans <dje@google.com>
* gdb.python/py-objfile.exp: Test gdb.lookup_objfile on symlinked
binary.
2015-01-13 Joel Brobecker <brobecker@adacore.com>
* Makefile.in (clean mostlyclean): Do not delete *.py.

View file

@ -115,3 +115,14 @@ if { [get_python_valueof "sep_objfile.build_id" "None"] != "None" } {
gdb_test "python print (gdb.lookup_objfile (sep_objfile.build_id, by_build_id=True))" \
"Objfile not found\\.\r\n${python_error_text}"
}
# An objfile that was a symlink to a differently named file is still
# findable with its original name.
set symlink_binary [standard_output_file "symlink-binary"]
remote_exec host "rm -f ${symlink_binary}"
remote_exec host "ln -sf ${testfile} ${symlink_binary}"
if [remote_file host exists "${symlink_binary}"] {
clean_restart "${symlink_binary}"
gdb_test "python print (gdb.lookup_objfile (\"${symlink_binary}\").filename)" \
"${testfile}" "gdb.lookup_objfile of symlinked binary"
}