* symfile.c (simple_read_overlay_table): Make sure we can find

both `_novlys' and `_ovly_table' before we try anything else;
print a helpful error message.
(simple_overlay_update): No need to print error message here.
This commit is contained in:
Jim Blandy 2001-11-14 21:55:21 +00:00
parent 1c00926451
commit 0d43edd16b
2 changed files with 35 additions and 25 deletions

View File

@ -1,3 +1,10 @@
2001-11-14 Jim Blandy <jimb@redhat.com>
* symfile.c (simple_read_overlay_table): Make sure we can find
both `_novlys' and `_ovly_table' before we try anything else;
print a helpful error message.
(simple_overlay_update): No need to print error message here.
2001-11-14 Michael Snyder <msnyder@redhat.com> 2001-11-14 Michael Snyder <msnyder@redhat.com>
* Makefile.in (doublest.o): Add dependency on gdbtypes.h. * Makefile.in (doublest.o): Add dependency on gdbtypes.h.

View File

@ -3023,30 +3023,35 @@ read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
static int static int
simple_read_overlay_table (void) simple_read_overlay_table (void)
{ {
struct minimal_symbol *msym; struct minimal_symbol *novlys_msym, *ovly_table_msym;
simple_free_overlay_table (); simple_free_overlay_table ();
msym = lookup_minimal_symbol ("_novlys", 0, 0); novlys_msym = lookup_minimal_symbol ("_novlys", 0, 0);
if (msym != NULL) if (! novlys_msym)
cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
else
return 0; /* failure */
cache_ovly_table = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
if (cache_ovly_table != NULL)
{ {
msym = lookup_minimal_symbol ("_ovly_table", 0, 0); error ("Error reading inferior's overlay table: "
if (msym != NULL) "couldn't find `_novlys' variable\n"
{ "in inferior. Use `overlay manual' mode.");
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (msym); return 0;
read_target_long_array (cache_ovly_table_base,
(int *) cache_ovly_table,
cache_novlys * 4);
}
else
return 0; /* failure */
} }
else
return 0; /* failure */ ovly_table_msym = lookup_minimal_symbol ("_ovly_table", 0, 0);
if (! ovly_table_msym)
{
error ("Error reading inferior's overlay table: couldn't find "
"`_ovly_table' array\n"
"in inferior. Use `overlay manual' mode.");
return 0;
}
cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
cache_ovly_table
= (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
read_target_long_array (cache_ovly_table_base,
(int *) cache_ovly_table,
cache_novlys * 4);
return 1; /* SUCCESS */ return 1; /* SUCCESS */
} }
@ -3147,11 +3152,9 @@ simple_overlay_update (struct obj_section *osect)
Or else we want all the sections, in which case it's actually Or else we want all the sections, in which case it's actually
more efficient to read the whole table in one block anyway. */ more efficient to read the whole table in one block anyway. */
if (simple_read_overlay_table () == 0) /* read failed? No table? */ if (! simple_read_overlay_table ())
{ return;
warning ("Failed to read the target overlay mapping table.");
return;
}
/* Now may as well update all sections, even if only one was requested. */ /* Now may as well update all sections, even if only one was requested. */
ALL_OBJSECTIONS (objfile, osect) ALL_OBJSECTIONS (objfile, osect)
if (section_is_overlay (osect->the_bfd_section)) if (section_is_overlay (osect->the_bfd_section))