relocate the entry point address when used

This changes the entry point to be unrelocated in the objfile, and
instead applies the relocation when it is used.

2014-01-15  Tom Tromey  <tromey@redhat.com>

	* objfiles.c (entry_point_address_query): Relocate entry point
	address.
	(objfile_relocate1): Do not relocate entry point address.
	* objfiles.h (struct entry_info) <entry_point>: Update comment.
	<the_bfd_section_index>: New field.
	* symfile.c (init_entry_point_info): Find the entry point's
	section.
This commit is contained in:
Tom Tromey
2013-12-31 06:52:33 -07:00
parent d56e56aaa7
commit 53eddfa606
4 changed files with 38 additions and 18 deletions

View File

@@ -894,7 +894,9 @@ init_entry_point_info (struct objfile *objfile)
if (objfile->ei.entry_point_p)
{
struct obj_section *osect;
CORE_ADDR entry_point = objfile->ei.entry_point;
int found;
/* Make certain that the address points at real code, and not a
function descriptor. */
@@ -907,6 +909,25 @@ init_entry_point_info (struct objfile *objfile)
symbol table. */
objfile->ei.entry_point
= gdbarch_addr_bits_remove (get_objfile_arch (objfile), entry_point);
found = 0;
ALL_OBJFILE_OSECTIONS (objfile, osect)
{
struct bfd_section *sect = osect->the_bfd_section;
if (entry_point >= bfd_get_section_vma (objfile->obfd, sect)
&& entry_point < (bfd_get_section_vma (objfile->obfd, sect)
+ bfd_get_section_size (sect)))
{
objfile->ei.the_bfd_section_index
= gdb_bfd_section_index (objfile->obfd, sect);
found = 1;
break;
}
}
if (!found)
objfile->ei.the_bfd_section_index = SECT_OFF_TEXT (objfile);
}
}