* symfile.c (symbol_file_command, set_initial_language)
(symfile_bfd_open, get_section_index, add_symtab_fns) (find_sym_fns): Reformat code and comments. Tweak comments.
This commit is contained in:
parent
0765265284
commit
cb2f3a2924
2 changed files with 71 additions and 60 deletions
|
@ -1,5 +1,9 @@
|
|||
2005-08-31 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* symfile.c (symbol_file_command, set_initial_language)
|
||||
(symfile_bfd_open, get_section_index, add_symtab_fns)
|
||||
(find_sym_fns): Reformat code and comments. Tweak comments.
|
||||
|
||||
* m68k-tdep.c (m68k_register_name): Use ARRAY_SIZE.
|
||||
|
||||
2005-08-31 Jim Wilson <wilson@specifix.com>
|
||||
|
|
127
gdb/symfile.c
127
gdb/symfile.c
|
@ -1251,22 +1251,21 @@ find_separate_debug_file (struct objfile *objfile)
|
|||
|
||||
/* This is the symbol-file command. Read the file, analyze its
|
||||
symbols, and add a struct symtab to a symtab list. The syntax of
|
||||
the command is rather bizarre--(1) buildargv implements various
|
||||
quoting conventions which are undocumented and have little or
|
||||
nothing in common with the way things are quoted (or not quoted)
|
||||
elsewhere in GDB, (2) options are used, which are not generally
|
||||
used in GDB (perhaps "set mapped on", "set readnow on" would be
|
||||
better), (3) the order of options matters, which is contrary to GNU
|
||||
the command is rather bizarre:
|
||||
|
||||
1. The function buildargv implements various quoting conventions
|
||||
which are undocumented and have little or nothing in common with
|
||||
the way things are quoted (or not quoted) elsewhere in GDB.
|
||||
|
||||
2. Options are used, which are not generally used in GDB (perhaps
|
||||
"set mapped on", "set readnow on" would be better)
|
||||
|
||||
3. The order of options matters, which is contrary to GNU
|
||||
conventions (because it is confusing and inconvenient). */
|
||||
|
||||
void
|
||||
symbol_file_command (char *args, int from_tty)
|
||||
{
|
||||
char **argv;
|
||||
char *name = NULL;
|
||||
struct cleanup *cleanups;
|
||||
int flags = OBJF_USERLOADED;
|
||||
|
||||
dont_repeat ();
|
||||
|
||||
if (args == NULL)
|
||||
|
@ -1275,10 +1274,14 @@ symbol_file_command (char *args, int from_tty)
|
|||
}
|
||||
else
|
||||
{
|
||||
if ((argv = buildargv (args)) == NULL)
|
||||
{
|
||||
nomem (0);
|
||||
}
|
||||
char **argv = buildargv (args);
|
||||
int flags = OBJF_USERLOADED;
|
||||
struct cleanup *cleanups;
|
||||
char *name = NULL;
|
||||
|
||||
if (argv == NULL)
|
||||
nomem (0);
|
||||
|
||||
cleanups = make_cleanup_freeargv (argv);
|
||||
while (*argv != NULL)
|
||||
{
|
||||
|
@ -1288,30 +1291,30 @@ symbol_file_command (char *args, int from_tty)
|
|||
error (_("unknown option `%s'"), *argv);
|
||||
else
|
||||
{
|
||||
symbol_file_add_main_1 (*argv, from_tty, flags);
|
||||
name = *argv;
|
||||
|
||||
symbol_file_add_main_1 (name, from_tty, flags);
|
||||
}
|
||||
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (name == NULL)
|
||||
{
|
||||
error (_("no symbol file name was specified"));
|
||||
}
|
||||
error (_("no symbol file name was specified"));
|
||||
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the initial language.
|
||||
|
||||
A better solution would be to record the language in the psymtab when reading
|
||||
partial symbols, and then use it (if known) to set the language. This would
|
||||
be a win for formats that encode the language in an easily discoverable place,
|
||||
such as DWARF. For stabs, we can jump through hoops looking for specially
|
||||
named symbols or try to intuit the language from the specific type of stabs
|
||||
we find, but we can't do that until later when we read in full symbols.
|
||||
FIXME. */
|
||||
FIXME: A better solution would be to record the language in the
|
||||
psymtab when reading partial symbols, and then use it (if known) to
|
||||
set the language. This would be a win for formats that encode the
|
||||
language in an easily discoverable place, such as DWARF. For
|
||||
stabs, we can jump through hoops looking for specially named
|
||||
symbols or try to intuit the language from the specific type of
|
||||
stabs we find, but we can't do that until later when we read in
|
||||
full symbols. */
|
||||
|
||||
static void
|
||||
set_initial_language (void)
|
||||
|
@ -1323,23 +1326,23 @@ set_initial_language (void)
|
|||
if (pst != NULL)
|
||||
{
|
||||
if (pst->filename != NULL)
|
||||
{
|
||||
lang = deduce_language_from_filename (pst->filename);
|
||||
}
|
||||
lang = deduce_language_from_filename (pst->filename);
|
||||
|
||||
if (lang == language_unknown)
|
||||
{
|
||||
/* Make C the default language */
|
||||
lang = language_c;
|
||||
}
|
||||
|
||||
set_language (lang);
|
||||
expected_language = current_language; /* Don't warn the user */
|
||||
expected_language = current_language; /* Don't warn the user. */
|
||||
}
|
||||
}
|
||||
|
||||
/* Open file specified by NAME and hand it off to BFD for preliminary
|
||||
analysis. Result is a newly initialized bfd *, which includes a newly
|
||||
malloc'd` copy of NAME (tilde-expanded and made absolute).
|
||||
In case of trouble, error() is called. */
|
||||
/* Open the file specified by NAME and hand it off to BFD for
|
||||
preliminary analysis. Return a newly initialized bfd *, which
|
||||
includes a newly malloc'd` copy of NAME (tilde-expanded and made
|
||||
absolute). In case of trouble, error() is called. */
|
||||
|
||||
bfd *
|
||||
symfile_bfd_open (char *name)
|
||||
|
@ -1348,13 +1351,11 @@ symfile_bfd_open (char *name)
|
|||
int desc;
|
||||
char *absolute_name;
|
||||
|
||||
|
||||
|
||||
name = tilde_expand (name); /* Returns 1st new malloc'd copy */
|
||||
name = tilde_expand (name); /* Returns 1st new malloc'd copy. */
|
||||
|
||||
/* Look down path for it, allocate 2nd new malloc'd copy. */
|
||||
desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name, O_RDONLY | O_BINARY,
|
||||
0, &absolute_name);
|
||||
desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name,
|
||||
O_RDONLY | O_BINARY, 0, &absolute_name);
|
||||
#if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
|
||||
if (desc < 0)
|
||||
{
|
||||
|
@ -1369,9 +1370,11 @@ symfile_bfd_open (char *name)
|
|||
make_cleanup (xfree, name);
|
||||
perror_with_name (name);
|
||||
}
|
||||
xfree (name); /* Free 1st new malloc'd copy */
|
||||
name = absolute_name; /* Keep 2nd malloc'd copy in bfd */
|
||||
/* It'll be freed in free_objfile(). */
|
||||
|
||||
/* Free 1st new malloc'd copy, but keep the 2nd malloc'd copy in
|
||||
bfd. It'll be freed in free_objfile(). */
|
||||
xfree (name);
|
||||
name = absolute_name;
|
||||
|
||||
sym_bfd = bfd_fopen (name, gnutarget, FOPEN_RB, desc);
|
||||
if (!sym_bfd)
|
||||
|
@ -1385,33 +1388,36 @@ symfile_bfd_open (char *name)
|
|||
|
||||
if (!bfd_check_format (sym_bfd, bfd_object))
|
||||
{
|
||||
/* FIXME: should be checking for errors from bfd_close (for one thing,
|
||||
on error it does not free all the storage associated with the
|
||||
bfd). */
|
||||
bfd_close (sym_bfd); /* This also closes desc */
|
||||
/* FIXME: should be checking for errors from bfd_close (for one
|
||||
thing, on error it does not free all the storage associated
|
||||
with the bfd). */
|
||||
bfd_close (sym_bfd); /* This also closes desc. */
|
||||
make_cleanup (xfree, name);
|
||||
error (_("\"%s\": can't read symbols: %s."), name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
}
|
||||
return (sym_bfd);
|
||||
|
||||
return sym_bfd;
|
||||
}
|
||||
|
||||
/* Return the section index for the given section name. Return -1 if
|
||||
the section was not found. */
|
||||
/* Return the section index for SECTION_NAME on OBJFILE. Return -1 if
|
||||
the section was not found. */
|
||||
|
||||
int
|
||||
get_section_index (struct objfile *objfile, char *section_name)
|
||||
{
|
||||
asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
|
||||
|
||||
if (sect)
|
||||
return sect->index;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Link a new symtab_fns into the global symtab_fns list. Called on gdb
|
||||
startup by the _initialize routine in each object file format reader,
|
||||
to register information about each format the the reader is prepared
|
||||
to handle. */
|
||||
/* Link SF into the global symtab_fns list. Called on startup by the
|
||||
_initialize routine in each object file format reader, to register
|
||||
information about each format the the reader is prepared to
|
||||
handle. */
|
||||
|
||||
void
|
||||
add_symtab_fns (struct sym_fns *sf)
|
||||
|
@ -1420,11 +1426,10 @@ add_symtab_fns (struct sym_fns *sf)
|
|||
symtab_fns = sf;
|
||||
}
|
||||
|
||||
|
||||
/* Initialize to read symbols from the symbol file sym_bfd. It either
|
||||
returns or calls error(). The result is an initialized struct sym_fns
|
||||
in the objfile structure, that contains cached information about the
|
||||
symbol file. */
|
||||
/* Initialize OBJFILE to read symbols from its associated BFD. It
|
||||
either returns or calls error(). The result is an initialized
|
||||
struct sym_fns in the objfile structure, that contains cached
|
||||
information about the symbol file. */
|
||||
|
||||
static void
|
||||
find_sym_fns (struct objfile *objfile)
|
||||
|
@ -1436,7 +1441,7 @@ find_sym_fns (struct objfile *objfile)
|
|||
if (our_flavour == bfd_target_srec_flavour
|
||||
|| our_flavour == bfd_target_ihex_flavour
|
||||
|| our_flavour == bfd_target_tekhex_flavour)
|
||||
return; /* No symbols. */
|
||||
return; /* No symbols. */
|
||||
|
||||
for (sf = symtab_fns; sf != NULL; sf = sf->next)
|
||||
{
|
||||
|
@ -1446,10 +1451,12 @@ find_sym_fns (struct objfile *objfile)
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
error (_("I'm sorry, Dave, I can't do that. Symbol format `%s' unknown."),
|
||||
bfd_get_target (objfile->obfd));
|
||||
}
|
||||
|
||||
|
||||
/* This function runs the load command of our current target. */
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in a new issue