[v2] Do not manipulate "target:" filenames as local paths

Message ID 1429085001-25894-1-git-send-email-gbenson@redhat.com
State Committed
Headers

Commit Message

Gary Benson April 15, 2015, 8:03 a.m. UTC
  Hi all,

This patch alters two places that manipulate object file filenames
to detect "target:" filenames and to not attempt to manipulate them
as paths on the local filesystem:

 - allocate_objfile is updated to not attempt to expand "target:"
   filenames with gdb_abspath.

 - load_auto_scripts_for_objfile is updated to not attempt to load
   auto-load scripts for object files with "target:" filenames.

Built and regtested on RHEL6.6 x86_64.

Ok to commit?

Cheers,
Gary


gdb/ChangeLog:

	* objfiles.c (allocate_objfile): Do not attempt to expand name
	if name is a "target:" filename.
	* auto-load.c (load_auto_scripts_for_objfile): Do not attempt
	to load auto-load scripts for objfiles with "target:" filenames.
---
 gdb/ChangeLog   |    7 +++++++
 gdb/auto-load.c |    7 +++++--
 gdb/objfiles.c  |    3 ++-
 3 files changed, 14 insertions(+), 3 deletions(-)
  

Comments

Gary Benson April 23, 2015, 9:22 p.m. UTC | #1
Ping:
https://sourceware.org/ml/gdb-patches/2015-04/msg00547.html

Gary Benson wrote:
> Hi all,
> 
> This patch alters two places that manipulate object file filenames
> to detect "target:" filenames and to not attempt to manipulate them
> as paths on the local filesystem:
> 
>  - allocate_objfile is updated to not attempt to expand "target:"
>    filenames with gdb_abspath.
> 
>  - load_auto_scripts_for_objfile is updated to not attempt to load
>    auto-load scripts for object files with "target:" filenames.
> 
> Built and regtested on RHEL6.6 x86_64.
> 
> Ok to commit?
> 
> Cheers,
> Gary
> 
> 
> gdb/ChangeLog:
> 
> 	* objfiles.c (allocate_objfile): Do not attempt to expand name
> 	if name is a "target:" filename.
> 	* auto-load.c (load_auto_scripts_for_objfile): Do not attempt
> 	to load auto-load scripts for objfiles with "target:" filenames.
> ---
>  gdb/ChangeLog   |    7 +++++++
>  gdb/auto-load.c |    7 +++++--
>  gdb/objfiles.c  |    3 ++-
>  3 files changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/gdb/auto-load.c b/gdb/auto-load.c
> index 778eeb6..7da288f 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 was not created from a file
> +     on the local filesystem.  */
> +  if (!global_auto_load
> +      || (objfile->flags & OBJF_NOT_FILENAME) != 0
> +      || is_target_filename (objfile->original_name))
>      return;
>  
>    /* Load any extension language scripts for this objfile.
> diff --git a/gdb/objfiles.c b/gdb/objfiles.c
> index ff20bc8..c6f9f00 100644
> --- a/gdb/objfiles.c
> +++ b/gdb/objfiles.c
> @@ -301,7 +301,8 @@ allocate_objfile (bfd *abfd, const char *name, int flags)
>        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) != 0
> +	   || is_target_filename (name))
>      expanded_name = xstrdup (name);
>    else
>      expanded_name = gdb_abspath (name);
> -- 
> 1.7.1
>
  
Doug Evans April 24, 2015, 7:16 p.m. UTC | #2
Gary Benson writes:
 > Hi all,
 > 
 > This patch alters two places that manipulate object file filenames
 > to detect "target:" filenames and to not attempt to manipulate them
 > as paths on the local filesystem:
 > 
 >  - allocate_objfile is updated to not attempt to expand "target:"
 >    filenames with gdb_abspath.
 > 
 >  - load_auto_scripts_for_objfile is updated to not attempt to load
 >    auto-load scripts for object files with "target:" filenames.
 > 
 > Built and regtested on RHEL6.6 x86_64.
 > 
 > Ok to commit?
 > 
 > Cheers,
 > Gary
 > 
 > 
 > gdb/ChangeLog:
 > 
 > 	* objfiles.c (allocate_objfile): Do not attempt to expand name
 > 	if name is a "target:" filename.
 > 	* auto-load.c (load_auto_scripts_for_objfile): Do not attempt
 > 	to load auto-load scripts for objfiles with "target:" filenames.

Thanks for the ping.

LGTM.
  
Gary Benson April 27, 2015, 2:42 p.m. UTC | #3
Doug Evans wrote:
> Gary Benson writes:
> > 
> > This patch alters two places that manipulate object file filenames
> > to detect "target:" filenames and to not attempt to manipulate them
> > as paths on the local filesystem:
> > 
> >  - allocate_objfile is updated to not attempt to expand "target:"
> >    filenames with gdb_abspath.
> > 
> >  - load_auto_scripts_for_objfile is updated to not attempt to load
> >    auto-load scripts for object files with "target:" filenames.
> > 
> > Built and regtested on RHEL6.6 x86_64.
> > 
> > Ok to commit?
> > 
> > gdb/ChangeLog:
> > 
> > 	* objfiles.c (allocate_objfile): Do not attempt to expand name
> > 	if name is a "target:" filename.
> > 	* auto-load.c (load_auto_scripts_for_objfile): Do not attempt
> > 	to load auto-load scripts for objfiles with "target:" filenames.
> 
> Thanks for the ping.
> 
> LGTM.

Thanks Doug, I pushed it.

Cheers,
Gary
  

Patch

diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index 778eeb6..7da288f 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 was not created from a file
+     on the local filesystem.  */
+  if (!global_auto_load
+      || (objfile->flags & OBJF_NOT_FILENAME) != 0
+      || is_target_filename (objfile->original_name))
     return;
 
   /* Load any extension language scripts for this objfile.
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index ff20bc8..c6f9f00 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -301,7 +301,8 @@  allocate_objfile (bfd *abfd, const char *name, int flags)
       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) != 0
+	   || is_target_filename (name))
     expanded_name = xstrdup (name);
   else
     expanded_name = gdb_abspath (name);