gdb/
2012-11-27 Daniel Jacobowitz <dan@codesourcery.com> Kazu Hirata <kazu@codesourcery.com> Yao Qi <yao@codesourcery.com> * objfiles.c (init_entry_point_info): Call gdbarch_convert_from_func_ptr_addr and gdbarch_addr_bits_remove here ... (entry_point_address_query): ... instead of here. * solib-svr4.c (exec_entry_point): Call gdbarch_addr_bits_remove. * symfile.c (generic_load): Call gdbarch_addr_bits_remove on the entry address.
This commit is contained in:
parent
5edf51feea
commit
8c2b9656fa
4 changed files with 36 additions and 17 deletions
|
@ -353,6 +353,23 @@ init_entry_point_info (struct objfile *objfile)
|
|||
/* Examination of non-executable.o files. Short-circuit this stuff. */
|
||||
objfile->ei.entry_point_p = 0;
|
||||
}
|
||||
|
||||
if (objfile->ei.entry_point_p)
|
||||
{
|
||||
CORE_ADDR entry_point = objfile->ei.entry_point;
|
||||
|
||||
/* Make certain that the address points at real code, and not a
|
||||
function descriptor. */
|
||||
entry_point
|
||||
= gdbarch_convert_from_func_ptr_addr (objfile->gdbarch,
|
||||
entry_point,
|
||||
¤t_target);
|
||||
|
||||
/* Remove any ISA markers, so that this matches entries in the
|
||||
symbol table. */
|
||||
objfile->ei.entry_point
|
||||
= gdbarch_addr_bits_remove (objfile->gdbarch, entry_point);
|
||||
}
|
||||
}
|
||||
|
||||
/* If there is a valid and known entry point, function fills *ENTRY_P with it
|
||||
|
@ -361,26 +378,11 @@ init_entry_point_info (struct objfile *objfile)
|
|||
int
|
||||
entry_point_address_query (CORE_ADDR *entry_p)
|
||||
{
|
||||
struct gdbarch *gdbarch;
|
||||
CORE_ADDR entry_point;
|
||||
|
||||
if (symfile_objfile == NULL || !symfile_objfile->ei.entry_point_p)
|
||||
return 0;
|
||||
|
||||
gdbarch = get_objfile_arch (symfile_objfile);
|
||||
*entry_p = symfile_objfile->ei.entry_point;
|
||||
|
||||
entry_point = symfile_objfile->ei.entry_point;
|
||||
|
||||
/* Make certain that the address points at real code, and not a
|
||||
function descriptor. */
|
||||
entry_point = gdbarch_convert_from_func_ptr_addr (gdbarch, entry_point,
|
||||
¤t_target);
|
||||
|
||||
/* Remove any ISA markers, so that this matches entries in the
|
||||
symbol table. */
|
||||
entry_point = gdbarch_addr_bits_remove (gdbarch, entry_point);
|
||||
|
||||
*entry_p = entry_point;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue