* objfiles.h (obj_section), objfiles.c (build_objfile_section_table):

Add objfile field.
	* objfiles.c (find_pc_section): Return a struct obj_section *.
	* sparc-tdep.c (in_solib_trampoline): Deal with find_pc_section return.
	* symfile.c (syms_from_objfile) [IBM6000_TARGET]:
	Don't use obj_section hack.
	* xcoffexec (vmap_symtab): Relocate obj_sections.
	* printcmd.c (containing_function_bounds): Use find_pc_section.
This commit is contained in:
Jim Kingdon
1993-04-22 20:42:37 +00:00
parent 87fe2d9df2
commit 4365c36c9b
7 changed files with 110 additions and 25 deletions

View File

@@ -312,7 +312,9 @@ vmap_symtab (vp)
asection *textsec;
asection *datasec;
asection *bsssec;
CORE_ADDR old_text_offset;
CORE_ADDR text_delta;
CORE_ADDR data_delta;
CORE_ADDR bss_delta;
struct section_offsets *new_offsets;
int i;
@@ -335,18 +337,47 @@ vmap_symtab (vp)
ANOFFSET (new_offsets, i) = ANOFFSET (objfile->section_offsets, i);
textsec = bfd_get_section_by_name (vp->bfd, ".text");
old_text_offset = ANOFFSET (objfile->section_offsets, textsec->target_index);
text_delta =
vp->tstart - ANOFFSET (objfile->section_offsets, textsec->target_index);
ANOFFSET (new_offsets, textsec->target_index) = vp->tstart;
datasec = bfd_get_section_by_name (vp->bfd, ".data");
data_delta =
vp->dstart - ANOFFSET (objfile->section_offsets, datasec->target_index);
ANOFFSET (new_offsets, datasec->target_index) = vp->dstart;
bsssec = bfd_get_section_by_name (vp->bfd, ".bss");
bss_delta =
vp->dstart - ANOFFSET (objfile->section_offsets, bsssec->target_index);
ANOFFSET (new_offsets, bsssec->target_index) = vp->dstart;
objfile_relocate (objfile, new_offsets);
{
struct obj_section *s;
for (s = objfile->sections; s < objfile->sections_end; ++s)
{
if (s->sec_ptr->target_index == textsec->target_index)
{
s->addr += text_delta;
s->endaddr += text_delta;
}
else if (s->sec_ptr->target_index == datasec->target_index)
{
s->addr += data_delta;
s->endaddr += data_delta;
}
else if (s->sec_ptr->target_index == bsssec->target_index)
{
s->addr += bss_delta;
s->endaddr += bss_delta;
}
}
}
if (old_text_offset != ANOFFSET (new_offsets, textsec->target_index))
if (text_delta != 0)
/* breakpoints need to be relocated as well. */
fixup_breakpoints (0, TEXT_SEGMENT_BASE, vp->tstart - old_text_offset);
fixup_breakpoints (0, TEXT_SEGMENT_BASE, text_delta);
}
/* Add symbols for an objfile. */