* symfile.c (section_is_mapped): Use objfile architecture instead

of current_gdbarch.
	(TARGET_LONG_BYTES): Remove.
	(read_target_long_array): Add SIZE argument.  Use it instead of
	TARGET_LONG_BYTES.
	(simple_read_overlay_table): Retrieve long size from objfile
	architecture; pass it to read_target_long_array.
	(simple_read_overlay_region_table): Likewise.
	(simple_overlay_update_1): Likewise.
This commit is contained in:
Ulrich Weigand 2009-06-17 18:34:34 +00:00
parent 9f5a595d69
commit 9216df9506
2 changed files with 38 additions and 15 deletions

View file

@ -1,3 +1,15 @@
2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
* symfile.c (section_is_mapped): Use objfile architecture instead
of current_gdbarch.
(TARGET_LONG_BYTES): Remove.
(read_target_long_array): Add SIZE argument. Use it instead of
TARGET_LONG_BYTES.
(simple_read_overlay_table): Retrieve long size from objfile
architecture; pass it to read_target_long_array.
(simple_read_overlay_region_table): Likewise.
(simple_overlay_update_1): Likewise.
2009-06-17 Ulrich Weigand <uweigand@de.ibm.com> 2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
* infrun.c (cleanup_displaced_step_closure): Remove. * infrun.c (cleanup_displaced_step_closure): Remove.

View file

@ -128,7 +128,7 @@ static void overlay_command (char *, int);
static void simple_free_overlay_table (void); static void simple_free_overlay_table (void);
static void read_target_long_array (CORE_ADDR, unsigned int *, int); static void read_target_long_array (CORE_ADDR, unsigned int *, int, int);
static int simple_read_overlay_table (void); static int simple_read_overlay_table (void);
@ -3288,6 +3288,8 @@ overlay_invalidate_all (void)
int int
section_is_mapped (struct obj_section *osect) section_is_mapped (struct obj_section *osect)
{ {
struct gdbarch *gdbarch;
if (osect == 0 || !section_is_overlay (osect)) if (osect == 0 || !section_is_overlay (osect))
return 0; return 0;
@ -3299,7 +3301,8 @@ section_is_mapped (struct obj_section *osect)
case ovly_auto: /* overlay debugging automatic */ case ovly_auto: /* overlay debugging automatic */
/* Unles there is a gdbarch_overlay_update function, /* Unles there is a gdbarch_overlay_update function,
there's really nothing useful to do here (can't really go auto) */ there's really nothing useful to do here (can't really go auto) */
if (gdbarch_overlay_update_p (current_gdbarch)) gdbarch = get_objfile_arch (osect->objfile);
if (gdbarch_overlay_update_p (gdbarch))
{ {
if (overlay_cache_invalid) if (overlay_cache_invalid)
{ {
@ -3307,7 +3310,7 @@ section_is_mapped (struct obj_section *osect)
overlay_cache_invalid = 0; overlay_cache_invalid = 0;
} }
if (osect->ovly_mapped == -1) if (osect->ovly_mapped == -1)
gdbarch_overlay_update (current_gdbarch, osect); gdbarch_overlay_update (gdbarch, osect);
} }
/* fall thru to manual case */ /* fall thru to manual case */
case ovly_on: /* overlay debugging manual */ case ovly_on: /* overlay debugging manual */
@ -3708,8 +3711,6 @@ enum ovly_index
{ {
VMA, SIZE, LMA, MAPPED VMA, SIZE, LMA, MAPPED
}; };
#define TARGET_LONG_BYTES (gdbarch_long_bit (current_gdbarch) \
/ TARGET_CHAR_BIT)
/* Throw away the cached copy of _ovly_table */ /* Throw away the cached copy of _ovly_table */
static void static void
@ -3735,19 +3736,19 @@ simple_free_overlay_region_table (void)
} }
#endif #endif
/* Read an array of ints from the target into a local buffer. /* Read an array of ints of size SIZE from the target into a local buffer.
Convert to host order. int LEN is number of ints */ Convert to host order. int LEN is number of ints */
static void static void
read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len) read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
int len, int size)
{ {
/* FIXME (alloca): Not safe if array is very large. */ /* FIXME (alloca): Not safe if array is very large. */
gdb_byte *buf = alloca (len * TARGET_LONG_BYTES); gdb_byte *buf = alloca (len * size);
int i; int i;
read_memory (memaddr, buf, len * TARGET_LONG_BYTES); read_memory (memaddr, buf, len * size);
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf, myaddr[i] = extract_unsigned_integer (size * i + buf, size);
TARGET_LONG_BYTES);
} }
/* Find and grab a copy of the target _ovly_table /* Find and grab a copy of the target _ovly_table
@ -3756,6 +3757,8 @@ static int
simple_read_overlay_table (void) simple_read_overlay_table (void)
{ {
struct minimal_symbol *novlys_msym, *ovly_table_msym; struct minimal_symbol *novlys_msym, *ovly_table_msym;
struct gdbarch *gdbarch;
int word_size;
simple_free_overlay_table (); simple_free_overlay_table ();
novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL); novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
@ -3776,13 +3779,16 @@ simple_read_overlay_table (void)
return 0; return 0;
} }
gdbarch = get_objfile_arch (msymbol_objfile (ovly_table_msym));
word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4); cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
cache_ovly_table cache_ovly_table
= (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table)); = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym); cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
read_target_long_array (cache_ovly_table_base, read_target_long_array (cache_ovly_table_base,
(unsigned int *) cache_ovly_table, (unsigned int *) cache_ovly_table,
cache_novlys * 4); cache_novlys * 4, word_size);
return 1; /* SUCCESS */ return 1; /* SUCCESS */
} }
@ -3807,10 +3813,12 @@ simple_read_overlay_region_table (void)
msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL); msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
if (msym != NULL) if (msym != NULL)
{ {
struct gdbarch *gdbarch = get_objfile_arch (msymbol_objfile (msym));
int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym); cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
read_target_long_array (cache_ovly_region_table_base, read_target_long_array (cache_ovly_region_table_base,
(unsigned int *) cache_ovly_region_table, (unsigned int *) cache_ovly_region_table,
cache_novly_regions * 3); cache_novly_regions * 3, word_size);
} }
else else
return 0; /* failure */ return 0; /* failure */
@ -3835,6 +3843,8 @@ simple_overlay_update_1 (struct obj_section *osect)
int i, size; int i, size;
bfd *obfd = osect->objfile->obfd; bfd *obfd = osect->objfile->obfd;
asection *bsect = osect->the_bfd_section; asection *bsect = osect->the_bfd_section;
struct gdbarch *gdbarch = get_objfile_arch (osect->objfile);
int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
size = bfd_get_section_size (osect->the_bfd_section); size = bfd_get_section_size (osect->the_bfd_section);
for (i = 0; i < cache_novlys; i++) for (i = 0; i < cache_novlys; i++)
@ -3842,8 +3852,9 @@ simple_overlay_update_1 (struct obj_section *osect)
&& cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect) && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
/* && cache_ovly_table[i][SIZE] == size */ ) /* && cache_ovly_table[i][SIZE] == size */ )
{ {
read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES, read_target_long_array (cache_ovly_table_base + i * word_size,
(unsigned int *) cache_ovly_table[i], 4); (unsigned int *) cache_ovly_table[i],
4, word_size);
if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect) if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
&& cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect) && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
/* && cache_ovly_table[i][SIZE] == size */ ) /* && cache_ovly_table[i][SIZE] == size */ )