Fix NULL objfile's section_offsets dereference during symbol load.

gdb/ChangeLog:

        * symfile.c (syms_from_objfile_1): Renames syms_from_objfile.
        Remove call to init_entry_point_info.  Add OBJFILE's
        section_offsets and num_sections initialization.  Add note
        about entry info in the function documentation.
        (syms_from_objfile): New function.
        * coffread.c (coff_symfile_init): Remove call to
        init_entry_point_info.
        * machoread.c (macho_symfile_init): Likewise.
        * xcoffread.c(xcoff_symfile_init): Likewise.
This commit is contained in:
Joel Brobecker 2012-12-15 13:10:50 +00:00
parent 6b00ac5ace
commit 36e4d0683b
5 changed files with 46 additions and 13 deletions

View file

@ -1,3 +1,15 @@
2012-12-15 Joel Brobecker <brobecker@adacore.com>
* symfile.c (syms_from_objfile_1): Renames syms_from_objfile.
Remove call to init_entry_point_info. Add OBJFILE's
section_offsets and num_sections initialization. Add note
about entry info in the function documentation.
(syms_from_objfile): New function.
* coffread.c (coff_symfile_init): Remove call to
init_entry_point_info.
* machoread.c (macho_symfile_init): Likewise.
* xcoffread.c(xcoff_symfile_init): Likewise.
2012-12-15 Yao Qi <yao@codesourcery.com>
* remote-notif.c (_initialize_notif): Add new commands

View file

@ -469,8 +469,6 @@ coff_symfile_init (struct objfile *objfile)
find this causes a significant slowdown in gdb then we could
set it in the debug symbol readers only when necessary. */
objfile->flags |= OBJF_REORDERED;
init_entry_point_info (objfile);
}
/* This function is called for every section; it finds the outer

View file

@ -79,7 +79,6 @@ static void
macho_symfile_init (struct objfile *objfile)
{
objfile->flags |= OBJF_REORDERED;
init_entry_point_info (objfile);
}
/* Add a new OSO to the vector of OSO to load. */

View file

@ -896,6 +896,8 @@ read_symbols (struct objfile *objfile, int add_flags)
/* Process a symbol file, as either the main file or as a dynamically
loaded file.
This function does not set the OBJFILE's entry-point info.
OBJFILE is where the symbols are to be read from.
ADDRS is the list of section load addresses. If the user has given
@ -923,12 +925,12 @@ read_symbols (struct objfile *objfile, int add_flags)
an extra symbol file such as dynamically loaded code, and wether
breakpoint reset should be deferred. */
void
syms_from_objfile (struct objfile *objfile,
struct section_addr_info *addrs,
struct section_offsets *offsets,
int num_offsets,
int add_flags)
static void
syms_from_objfile_1 (struct objfile *objfile,
struct section_addr_info *addrs,
struct section_offsets *offsets,
int num_offsets,
int add_flags)
{
struct section_addr_info *local_addr = NULL;
struct cleanup *old_chain;
@ -936,11 +938,21 @@ syms_from_objfile (struct objfile *objfile,
gdb_assert (! (addrs && offsets));
init_entry_point_info (objfile);
objfile->sf = find_sym_fns (objfile->obfd);
if (objfile->sf == NULL)
return; /* No symbols. */
{
/* No symbols to load, but we still need to make sure
that the section_offsets table is allocated. */
int num_sections = bfd_count_sections (objfile->obfd);
size_t size = SIZEOF_N_SECTION_OFFSETS (num_offsets);
objfile->num_sections = num_sections;
objfile->section_offsets
= obstack_alloc (&objfile->objfile_obstack, size);
memset (objfile->section_offsets, 0, size);
return;
}
/* Make sure that partially constructed symbol tables will be cleaned up
if an error occurs during symbol reading. */
@ -1021,6 +1033,20 @@ syms_from_objfile (struct objfile *objfile,
xfree (local_addr);
}
/* Same as syms_from_objfile_1, but also initializes the objfile
entry-point info. */
void
syms_from_objfile (struct objfile *objfile,
struct section_addr_info *addrs,
struct section_offsets *offsets,
int num_offsets,
int add_flags)
{
syms_from_objfile_1 (objfile, addrs, offsets, num_offsets, add_flags);
init_entry_point_info (objfile);
}
/* Perform required actions after either reading in the initial
symbols for a new objfile, or mapping in the symbols from a reusable
objfile. ADD_FLAGS is a bitmask of enum symfile_add_flags. */

View file

@ -1922,8 +1922,6 @@ xcoff_symfile_init (struct objfile *objfile)
find this causes a significant slowdown in gdb then we could
set it in the debug symbol readers only when necessary. */
objfile->flags |= OBJF_REORDERED;
init_entry_point_info (objfile);
}
/* Perform any local cleanups required when we are done with a particular