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
6 changed files with 52 additions and 2 deletions
|
@ -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>
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* NEWS: Create a new section for the next release branch.
|
* 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 *
|
const char *
|
||||||
objfile_name (const struct objfile *objfile)
|
objfile_name (const struct objfile *objfile)
|
||||||
|
@ -1505,6 +1505,17 @@ objfile_name (const struct objfile *objfile)
|
||||||
|
|
||||||
/* See objfiles.h. */
|
/* 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 *
|
const char *
|
||||||
objfile_debug_name (const struct objfile *objfile)
|
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);
|
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);
|
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. */
|
/* Return the name to print for OBJFILE in debugging messages. */
|
||||||
|
|
||||||
extern const char *objfile_debug_name (const struct objfile *objfile);
|
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)
|
ALL_OBJFILES (objfile)
|
||||||
{
|
{
|
||||||
|
const char *filename;
|
||||||
|
|
||||||
if ((objfile->flags & OBJF_NOT_FILENAME) != 0)
|
if ((objfile->flags & OBJF_NOT_FILENAME) != 0)
|
||||||
continue;
|
continue;
|
||||||
/* Don't return separate debug files. */
|
/* Don't return separate debug files. */
|
||||||
if (objfile->separate_debug_objfile_backlink != NULL)
|
if (objfile->separate_debug_objfile_backlink != NULL)
|
||||||
continue;
|
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;
|
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>
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* Makefile.in (clean mostlyclean): Do not delete *.py.
|
* 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))" \
|
gdb_test "python print (gdb.lookup_objfile (sep_objfile.build_id, by_build_id=True))" \
|
||||||
"Objfile not found\\.\r\n${python_error_text}"
|
"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…
Add table
Add a link
Reference in a new issue