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:
Jan Kratochvil 2013-08-28 17:52:03 +00:00
parent 602e3198bc
commit 1f0c498857
13 changed files with 168 additions and 28 deletions

View file

@ -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);
}
}
}