This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Mark object files with "target:" filenames as OBJF_NONLOCAL_FILENAME


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]