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:
parent
8068939ab8
commit
e02c96a799
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue