mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 13:23:10 +08:00
* configure, config.in: Rebuilt.
* configure.in: Check for realpath. * defs.h (gdb_realpath): Declare. * symtab.h (partial_symtab): Added fullname field. * source.c (openp): Use gdb_realpath. (forget_cached_source_info): Clear full name of each partial symtab. * utils.c (gdb_realpath): New function. * symtab.c (lookup_symtab): Removed. (lookup_symtab_1): Renamed to lookup_symtab. (lookup_symtab): Look for real path. (lookup_partial_symtab): Likewise.
This commit is contained in:
@ -1,3 +1,18 @@
|
|||||||
|
2001-12-21 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* configure, config.in: Rebuilt.
|
||||||
|
* configure.in: Check for realpath.
|
||||||
|
* defs.h (gdb_realpath): Declare.
|
||||||
|
* symtab.h (partial_symtab): Added fullname field.
|
||||||
|
* source.c (openp): Use gdb_realpath.
|
||||||
|
(forget_cached_source_info): Clear full name of each partial
|
||||||
|
symtab.
|
||||||
|
* utils.c (gdb_realpath): New function.
|
||||||
|
* symtab.c (lookup_symtab): Removed.
|
||||||
|
(lookup_symtab_1): Renamed to lookup_symtab.
|
||||||
|
(lookup_symtab): Look for real path.
|
||||||
|
(lookup_partial_symtab): Likewise.
|
||||||
|
|
||||||
2001-12-21 Michael Snyder <msnyder@redhat.com>
|
2001-12-21 Michael Snyder <msnyder@redhat.com>
|
||||||
|
|
||||||
* maint.c (match_substring): New function. Tokenizer for
|
* maint.c (match_substring): New function. Tokenizer for
|
||||||
|
@ -220,6 +220,9 @@
|
|||||||
/* Define if you have the putenv function. */
|
/* Define if you have the putenv function. */
|
||||||
#undef HAVE_PUTENV
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
|
/* Define if you have the realpath function. */
|
||||||
|
#undef HAVE_REALPATH
|
||||||
|
|
||||||
/* Define if you have the sbrk function. */
|
/* Define if you have the sbrk function. */
|
||||||
#undef HAVE_SBRK
|
#undef HAVE_SBRK
|
||||||
|
|
||||||
|
2
gdb/configure
vendored
2
gdb/configure
vendored
@ -3582,7 +3582,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
for ac_func in bcopy btowc bzero isascii poll sbrk setpgid setpgrp \
|
for ac_func in bcopy btowc bzero isascii poll realpath sbrk setpgid setpgrp \
|
||||||
sigaction sigprocmask sigsetmask
|
sigaction sigprocmask sigsetmask
|
||||||
do
|
do
|
||||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||||
|
@ -131,7 +131,7 @@ AC_HEADER_STAT
|
|||||||
|
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
|
||||||
AC_CHECK_FUNCS(bcopy btowc bzero isascii poll sbrk setpgid setpgrp \
|
AC_CHECK_FUNCS(bcopy btowc bzero isascii poll realpath sbrk setpgid setpgrp \
|
||||||
sigaction sigprocmask sigsetmask)
|
sigaction sigprocmask sigsetmask)
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
AC_FUNC_VFORK
|
AC_FUNC_VFORK
|
||||||
|
@ -575,6 +575,8 @@ extern void init_page_info (void);
|
|||||||
extern CORE_ADDR host_pointer_to_address (void *ptr);
|
extern CORE_ADDR host_pointer_to_address (void *ptr);
|
||||||
extern void *address_to_host_pointer (CORE_ADDR addr);
|
extern void *address_to_host_pointer (CORE_ADDR addr);
|
||||||
|
|
||||||
|
extern char *gdb_realpath (const char *);
|
||||||
|
|
||||||
/* From demangle.c */
|
/* From demangle.c */
|
||||||
|
|
||||||
extern void set_demangling_style (char *);
|
extern void set_demangling_style (char *);
|
||||||
|
16
gdb/source.c
16
gdb/source.c
@ -234,6 +234,7 @@ forget_cached_source_info (void)
|
|||||||
{
|
{
|
||||||
register struct symtab *s;
|
register struct symtab *s;
|
||||||
register struct objfile *objfile;
|
register struct objfile *objfile;
|
||||||
|
struct partial_symtab *pst;
|
||||||
|
|
||||||
for (objfile = object_files; objfile != NULL; objfile = objfile->next)
|
for (objfile = object_files; objfile != NULL; objfile = objfile->next)
|
||||||
{
|
{
|
||||||
@ -250,6 +251,15 @@ forget_cached_source_info (void)
|
|||||||
s->fullname = NULL;
|
s->fullname = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ALL_OBJFILE_PSYMTABS (objfile, pst)
|
||||||
|
{
|
||||||
|
if (pst->fullname != NULL)
|
||||||
|
{
|
||||||
|
xfree (pst->fullname);
|
||||||
|
pst->fullname = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -603,15 +613,17 @@ done:
|
|||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
*filename_opened = NULL;
|
*filename_opened = NULL;
|
||||||
else if (IS_ABSOLUTE_PATH (filename))
|
else if (IS_ABSOLUTE_PATH (filename))
|
||||||
*filename_opened = savestring (filename, strlen (filename));
|
*filename_opened = gdb_realpath (filename);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
||||||
|
|
||||||
*filename_opened = concat (current_directory,
|
char *f = concat (current_directory,
|
||||||
IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
|
IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
|
||||||
? "" : SLASH_STRING,
|
? "" : SLASH_STRING,
|
||||||
filename, NULL);
|
filename, NULL);
|
||||||
|
*filename_opened = gdb_realpath (f);
|
||||||
|
xfree (f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* OBSOLETE #ifdef MPW */
|
/* OBSOLETE #ifdef MPW */
|
||||||
|
48
gdb/symtab.c
48
gdb/symtab.c
@ -141,14 +141,38 @@ lookup_symtab (const char *name)
|
|||||||
register struct symtab *s;
|
register struct symtab *s;
|
||||||
register struct partial_symtab *ps;
|
register struct partial_symtab *ps;
|
||||||
register struct objfile *objfile;
|
register struct objfile *objfile;
|
||||||
|
char *real_path = NULL;
|
||||||
|
|
||||||
|
/* Here we are interested in canonicalizing an absolute path, not
|
||||||
|
absolutizing a relative path. */
|
||||||
|
if (IS_ABSOLUTE_PATH (name))
|
||||||
|
real_path = gdb_realpath (name);
|
||||||
|
|
||||||
got_symtab:
|
got_symtab:
|
||||||
|
|
||||||
/* First, search for an exact match */
|
/* First, search for an exact match */
|
||||||
|
|
||||||
ALL_SYMTABS (objfile, s)
|
ALL_SYMTABS (objfile, s)
|
||||||
|
{
|
||||||
if (FILENAME_CMP (name, s->filename) == 0)
|
if (FILENAME_CMP (name, s->filename) == 0)
|
||||||
return s;
|
{
|
||||||
|
xfree (real_path);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
/* If the user gave us an absolute path, try to find the file in
|
||||||
|
this symtab and use its absolute path. */
|
||||||
|
if (real_path != NULL)
|
||||||
|
{
|
||||||
|
char *rp = symtab_to_filename (s);
|
||||||
|
if (FILENAME_CMP (real_path, rp) == 0)
|
||||||
|
{
|
||||||
|
xfree (real_path);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xfree (real_path);
|
||||||
|
|
||||||
/* Now, search for a matching tail (only if name doesn't have any dirs) */
|
/* Now, search for a matching tail (only if name doesn't have any dirs) */
|
||||||
|
|
||||||
@ -195,15 +219,37 @@ lookup_partial_symtab (const char *name)
|
|||||||
{
|
{
|
||||||
register struct partial_symtab *pst;
|
register struct partial_symtab *pst;
|
||||||
register struct objfile *objfile;
|
register struct objfile *objfile;
|
||||||
|
char *real_path = NULL;
|
||||||
|
|
||||||
|
/* Here we are interested in canonicalizing an absolute path, not
|
||||||
|
absolutizing a relative path. */
|
||||||
|
if (IS_ABSOLUTE_PATH (name))
|
||||||
|
real_path = gdb_realpath (name);
|
||||||
|
|
||||||
ALL_PSYMTABS (objfile, pst)
|
ALL_PSYMTABS (objfile, pst)
|
||||||
{
|
{
|
||||||
if (FILENAME_CMP (name, pst->filename) == 0)
|
if (FILENAME_CMP (name, pst->filename) == 0)
|
||||||
{
|
{
|
||||||
|
xfree (real_path);
|
||||||
return (pst);
|
return (pst);
|
||||||
}
|
}
|
||||||
|
/* If the user gave us an absolute path, try to find the file in
|
||||||
|
this symtab and use its absolute path. */
|
||||||
|
if (real_path != NULL)
|
||||||
|
{
|
||||||
|
if (pst->fullname == NULL)
|
||||||
|
source_full_path_of (pst->filename, &pst->fullname);
|
||||||
|
if (pst->fullname != NULL
|
||||||
|
&& FILENAME_CMP (real_path, pst->fullname) == 0)
|
||||||
|
{
|
||||||
|
xfree (real_path);
|
||||||
|
return pst;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xfree (real_path);
|
||||||
|
|
||||||
/* Now, search for a matching tail (only if name doesn't have any dirs) */
|
/* Now, search for a matching tail (only if name doesn't have any dirs) */
|
||||||
|
|
||||||
if (lbasename (name) == name)
|
if (lbasename (name) == name)
|
||||||
|
@ -967,6 +967,10 @@ struct partial_symtab
|
|||||||
|
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
|
/* Full path of the source file. NULL if not known. */
|
||||||
|
|
||||||
|
char *fullname;
|
||||||
|
|
||||||
/* Information about the object file from which symbols should be read. */
|
/* Information about the object file from which symbols should be read. */
|
||||||
|
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
|
12
gdb/utils.c
12
gdb/utils.c
@ -2544,3 +2544,15 @@ string_to_core_addr (const char *my_string)
|
|||||||
}
|
}
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
gdb_realpath (const char *filename)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_REALPATH
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
char *rp = realpath (filename, buf);
|
||||||
|
return xstrdup (rp ? rp : filename);
|
||||||
|
#else
|
||||||
|
return xstrdup (filename);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user