PR gdb/15415
gdb/ 2013-08-27 Jan Kratochvil <jan.kratochvil@redhat.com> PR gdb/15415 * corefile.c (get_exec_file): Use exec_filename. * defs.h (OPF_DISABLE_REALPATH): New definition. Add new comment. * exec.c (exec_close): Free EXEC_FILENAME. (exec_file_attach): New variable canonical_pathname. Use OPF_DISABLE_REALPATH. Call gdb_realpath explicitly. Set EXEC_FILENAME. * exec.h (exec_filename): New. * inferior.c (print_inferior, inferior_command): Use PSPACE_EXEC_FILENAME. * mi/mi-main.c (print_one_inferior): Likewise. * progspace.c (clone_program_space, print_program_space): Likewise. * progspace.h (struct program_space): New field pspace_exec_filename. * source.c (openp): Describe OPF_DISABLE_REALPATH. New variable realpath_fptr, initialize it from OPF_DISABLE_REALPATH, use it. gdb/testsuite/ 2013-08-27 Jan Kratochvil <jan.kratochvil@redhat.com> PR gdb/15415 * gdb.base/argv0-symlink.c: New file. * gdb.base/argv0-symlink.exp: New file.
This commit is contained in:
parent
602e3198bc
commit
1f0c498857
13 changed files with 168 additions and 28 deletions
31
gdb/source.c
31
gdb/source.c
|
@ -689,6 +689,11 @@ is_regular_file (const char *name)
|
|||
and the file, sigh! Emacs gets confuzzed by this when we print the
|
||||
source file name!!!
|
||||
|
||||
If OPTS does not have OPF_DISABLE_REALPATH set return FILENAME_OPENED
|
||||
resolved by gdb_realpath. Even with OPF_DISABLE_REALPATH this function
|
||||
still returns filename starting with "/". If FILENAME_OPENED is NULL
|
||||
this option has no effect.
|
||||
|
||||
If a file is found, return the descriptor.
|
||||
Otherwise, return -1, with errno set for the last name we tried to open. */
|
||||
|
||||
|
@ -848,19 +853,27 @@ done:
|
|||
/* If a file was opened, canonicalize its filename. */
|
||||
if (fd < 0)
|
||||
*filename_opened = NULL;
|
||||
else if (IS_ABSOLUTE_PATH (filename))
|
||||
*filename_opened = gdb_realpath (filename);
|
||||
else
|
||||
{
|
||||
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
||||
char *(*realpath_fptr) (const char *);
|
||||
|
||||
char *f = concat (current_directory,
|
||||
IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
|
||||
? "" : SLASH_STRING,
|
||||
filename, (char *)NULL);
|
||||
realpath_fptr = ((opts & OPF_DISABLE_REALPATH) != 0
|
||||
? xstrdup : gdb_realpath);
|
||||
|
||||
*filename_opened = gdb_realpath (f);
|
||||
xfree (f);
|
||||
if (IS_ABSOLUTE_PATH (filename))
|
||||
*filename_opened = realpath_fptr (filename);
|
||||
else
|
||||
{
|
||||
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
||||
|
||||
char *f = concat (current_directory,
|
||||
IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
|
||||
? "" : SLASH_STRING,
|
||||
filename, (char *)NULL);
|
||||
|
||||
*filename_opened = realpath_fptr (f);
|
||||
xfree (f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue