mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-24 02:14:28 +00:00
* dbxread.c (dbx_symfile_init): Init stab_section_info to NULL to
prevent crashes when examining cross-targets. * dbxread.c (process_one_symbol): Include directory name when calling start_subfile for SOL & BINCL symbols. This allows gdb to find include files, and yacc/lex sources when the cwd doesn't match that in which the object was compiled. * objfiles.h (ALL_MSYMBOLS): Don't seg fault when there are no msymbols. * symtab.c (lookup_symtab_1): Rewrite. It now handles include files.
This commit is contained in:
parent
179798e1e0
commit
784fd92b3d
@ -1,3 +1,16 @@
|
||||
Wed Jul 8 00:11:02 1992 Stu Grossman (grossman at cygnus.com)
|
||||
|
||||
* dbxread.c (dbx_symfile_init): Init stab_section_info to NULL to
|
||||
prevent crashes when examining cross-targets.
|
||||
* dbxread.c (process_one_symbol): Include directory name when
|
||||
calling start_subfile for SOL & BINCL symbols. This allows gdb to
|
||||
find include files, and yacc/lex sources when the cwd doesn't match
|
||||
that in which the object was compiled.
|
||||
* objfiles.h (ALL_MSYMBOLS): Don't seg fault when there are no
|
||||
msymbols.
|
||||
* symtab.c (lookup_symtab_1): Rewrite. It now handles include
|
||||
files.
|
||||
|
||||
Tue Jul 7 09:00:42 1992 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
* maint.c (maintenance_command, maintenance_info_command):
|
||||
|
@ -545,6 +545,7 @@ dbx_symfile_init (objfile)
|
||||
#endif
|
||||
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
|
||||
|
||||
DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
|
||||
DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
|
||||
if (!DBX_TEXT_SECT (objfile))
|
||||
error ("Can't find .text section in symbol file");
|
||||
@ -1800,17 +1801,17 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
(whose name was given in the N_SO symbol.) */
|
||||
/* Relocate for dynamic loading */
|
||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
||||
start_subfile (name, NULL);
|
||||
start_subfile (name, current_subfile->dirname);
|
||||
break;
|
||||
|
||||
case N_BINCL:
|
||||
push_subfile ();
|
||||
add_new_header_file (name, valu);
|
||||
start_subfile (name, NULL);
|
||||
start_subfile (name, current_subfile->dirname);
|
||||
break;
|
||||
|
||||
case N_EINCL:
|
||||
start_subfile (pop_subfile (), NULL);
|
||||
start_subfile (pop_subfile (), current_subfile->dirname);
|
||||
break;
|
||||
|
||||
case N_EXCL:
|
||||
|
@ -358,6 +358,7 @@ have_minimal_symbols PARAMS ((void));
|
||||
|
||||
#define ALL_MSYMBOLS(objfile, m) \
|
||||
ALL_OBJFILES (objfile) \
|
||||
ALL_OBJFILE_MSYMBOLS (objfile, m)
|
||||
if ((objfile)->msymbols) \
|
||||
ALL_OBJFILE_MSYMBOLS (objfile, m)
|
||||
|
||||
#endif /* !defined (OBJFILES_H) */
|
||||
|
105
gdb/symtab.c
105
gdb/symtab.c
@ -134,63 +134,74 @@ lookup_symtab_1 (name)
|
||||
register struct symtab *s;
|
||||
register struct partial_symtab *ps;
|
||||
register char *slash;
|
||||
register int len;
|
||||
register struct objfile *objfile;
|
||||
|
||||
ALL_SYMTABS (objfile, s)
|
||||
{
|
||||
if (strcmp (name, s->filename) == 0)
|
||||
{
|
||||
return (s);
|
||||
}
|
||||
}
|
||||
got_symtab:
|
||||
|
||||
ALL_PSYMTABS (objfile, ps)
|
||||
{
|
||||
if (strcmp (name, ps -> filename) == 0)
|
||||
{
|
||||
if (ps -> readin)
|
||||
{
|
||||
error ("Internal: readin pst for `%s' found when no symtab found.", name);
|
||||
}
|
||||
return (PSYMTAB_TO_SYMTAB (ps));
|
||||
}
|
||||
}
|
||||
/* First, search for an exact match */
|
||||
|
||||
ALL_SYMTABS (objfile, s)
|
||||
if (strcmp (name, s->filename) == 0)
|
||||
return s;
|
||||
|
||||
slash = strchr (name, '/');
|
||||
len = strlen (name);
|
||||
|
||||
/* Now, search for a matching tail (only if name doesn't have any dirs) */
|
||||
|
||||
if (!slash)
|
||||
{
|
||||
ALL_SYMTABS (objfile, s)
|
||||
{
|
||||
int l = strlen (s->filename);
|
||||
|
||||
if (l > len
|
||||
&& s->filename[l - len -1] == '/'
|
||||
&& (strcmp (s->filename + l - len, name) == 0))
|
||||
{
|
||||
return (s);
|
||||
}
|
||||
}
|
||||
ALL_SYMTABS (objfile, s)
|
||||
{
|
||||
char *p = s -> filename;
|
||||
char *tail = strrchr (p, '/');
|
||||
|
||||
ALL_PSYMTABS (objfile, ps)
|
||||
{
|
||||
int l = strlen (ps -> filename);
|
||||
if (tail)
|
||||
p = tail + 1;
|
||||
|
||||
if (strcmp (p, name) == 0)
|
||||
return s;
|
||||
}
|
||||
|
||||
/* Same search rules as above apply here, but now we look thru the
|
||||
psymtabs. */
|
||||
|
||||
ALL_PSYMTABS (objfile, ps)
|
||||
if (strcmp (name, ps -> filename) == 0)
|
||||
goto got_psymtab;
|
||||
|
||||
if (!slash)
|
||||
ALL_PSYMTABS (objfile, ps)
|
||||
{
|
||||
char *p = ps -> filename;
|
||||
char *tail = strrchr (p, '/');
|
||||
|
||||
if (tail)
|
||||
p = tail + 1;
|
||||
|
||||
if (strcmp (p, name) == 0)
|
||||
goto got_psymtab;
|
||||
}
|
||||
|
||||
if (l > len
|
||||
&& ps -> filename[l - len - 1] == '/'
|
||||
&& (strcmp (ps->filename + l - len, name) == 0))
|
||||
{
|
||||
if (ps -> readin)
|
||||
{
|
||||
error ("Internal: readin pst for `%s' found when no symtab found.", name);
|
||||
}
|
||||
return (PSYMTAB_TO_SYMTAB (ps));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (NULL);
|
||||
|
||||
got_psymtab:
|
||||
|
||||
if (ps -> readin)
|
||||
error ("Internal: readin pst for `%s' found when no symtab found.", name);
|
||||
|
||||
s = PSYMTAB_TO_SYMTAB (ps);
|
||||
|
||||
if (s)
|
||||
return s;
|
||||
|
||||
/* At this point, we have located the psymtab for this file, but
|
||||
the conversion to a symtab has failed. This usually happens
|
||||
when we are looking up an include file. In this case,
|
||||
PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
|
||||
been created. So, we need to run through the symtabs again in
|
||||
order to find the file.
|
||||
XXX - This is a crock, and should be fixed inside of the the
|
||||
symbol parsing routines. */
|
||||
goto got_symtab;
|
||||
}
|
||||
|
||||
/* Lookup the symbol table of a source file named NAME. Try a couple
|
||||
|
Loading…
x
Reference in New Issue
Block a user