This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Mark object files with "target:" filenames as OBJF_NONLOCAL_FILENAME
- From: Gary Benson <gbenson at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 13 Apr 2015 20:07:43 +0100
- Subject: [PATCH] Mark object files with "target:" filenames as OBJF_NONLOCAL_FILENAME
- Authentication-results: sourceware.org; auth=none
Hi all,
This patch introduces a new objfile flag OBJF_NONLOCAL_FILENAME to
denote that objfile->original_name and objfile->obfd->filename are
filenames referring to files on filesystems other than GDB's local
filesystem. allocate_objfile is updated to force
OBJF_NONLOCAL_FILENAME if the specified name starts with "target:",
and to not attempt to expand the name using gdb_abspath if flags has
OBJF_NONLOCAL_FILENAME set. load_auto_scripts_for_objfile is updated
to not attempt loading of auto-load scripts for objfiles with
OBJF_NONLOCAL_FILENAME set in their flags.
A new flag was created rather than reusing OBJF_NOT_FILENAME because
setting that flag would stop Python's gdb.lookup_objfile from seeing
the file, and it's not clear that that's desirable.
Without this patch you *sometimes* get things like:
Reading symbols from /home/gary/target:/lib64/libreadline.so.6...
I haven't figured out why this doesn't always happen but it's plainly
wrong :)
Built and regtested on RHEL6.6 x86_64.
Ok to commit?
Cheers,
Gary
gdb/ChangeLog:
* objfiles.h (OBJF_NONLOCAL_FILENAME): New define.
* objfiles.c (allocate_objfile): Force OBJF_NONLOCAL_FILENAME
for BFDs with "target:" filenames. Do not attempt to expand
name if flags has OBJF_NONLOCAL_FILENAME set.
* auto-load.c (load_auto_scripts_for_objfile): Do not attempt
to auto-load scripts for OBJF_NONLOCAL_FILENAME objfiles.
---
gdb/ChangeLog | 9 +++++++++
gdb/auto-load.c | 7 +++++--
gdb/objfiles.c | 6 +++++-
gdb/objfiles.h | 5 +++++
4 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index 778eeb6..6782f98 100644
--- a/gdb/auto-load.c
+++ b/gdb/auto-load.c
@@ -1195,8 +1195,11 @@ load_auto_scripts_for_objfile (struct objfile *objfile)
{
/* Return immediately if auto-loading has been globally disabled.
This is to handle sequencing of operations during gdb startup.
- Also return immediately if OBJFILE is not actually a file. */
- if (!global_auto_load || (objfile->flags & OBJF_NOT_FILENAME) != 0)
+ Also return immediately if OBJFILE is not a file on the local
+ filesystem. */
+ if (!global_auto_load
+ || (objfile->flags & (OBJF_NOT_FILENAME
+ | OBJF_NONLOCAL_FILENAME)) != 0)
return;
/* Load any extension language scripts for this objfile.
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index ff20bc8..c1ad815 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -295,13 +295,17 @@ allocate_objfile (bfd *abfd, const char *name, int flags)
objfile_alloc_data (objfile);
+ /* Target filenames are non-local. */
+ if (name != NULL && is_target_filename (name))
+ flags |= OBJF_NONLOCAL_FILENAME;
+
if (name == NULL)
{
gdb_assert (abfd == NULL);
gdb_assert ((flags & OBJF_NOT_FILENAME) != 0);
expanded_name = xstrdup ("<<anonymous objfile>>");
}
- else if ((flags & OBJF_NOT_FILENAME) != 0)
+ else if ((flags & (OBJF_NOT_FILENAME | OBJF_NONLOCAL_FILENAME)) != 0)
expanded_name = xstrdup (name);
else
expanded_name = gdb_abspath (name);
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index a0dc69b..fbc3277 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -459,6 +459,11 @@ struct objfile
#define OBJF_NOT_FILENAME (1 << 6)
+/* ORIGINAL_NAME and OBFD->FILENAME are filenames on non-local
+ filesystems and should be treated as opaque. */
+
+#define OBJF_NONLOCAL_FILENAME (1 << 7)
+
/* Declarations for functions defined in objfiles.c */
extern struct objfile *allocate_objfile (bfd *, const char *name, int);
--
1.7.1