aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2012-11-27 08:11:59 +0000
committerYao Qi <yao@codesourcery.com>2012-11-27 08:11:59 +0000
commit8c2b9656fa3178519c007ed4c1a2a3da6b61bcaa (patch)
tree2babdacb1bb99e1ca27bc9590cee581e1033a5d5 /gdb
parent5edf51feeade2be8b6ab6d49507a6023a6d9a176 (diff)
downloadgdb-8c2b9656fa3178519c007ed4c1a2a3da6b61bcaa.zip
gdb-8c2b9656fa3178519c007ed4c1a2a3da6b61bcaa.tar.gz
gdb-8c2b9656fa3178519c007ed4c1a2a3da6b61bcaa.tar.bz2
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/objfiles.c34
-rw-r--r--gdb/solib-svr4.c5
-rw-r--r--gdb/symfile.c1
4 files changed, 36 insertions, 17 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7030b85..0d8cad2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,4 +1,17 @@
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.
+
+2012-11-27 Daniel Jacobowitz <dan@codesourcery.com>
Yao Qi <yao@codesourcery.com>
* eval.c (evaluate_subexp_standard): Add handling of
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 4cc2fea..e5681fa 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -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,
+ &current_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_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,
- &current_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 = symfile_objfile->ei.entry_point;
- *entry_p = entry_point;
return 1;
}
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 37cc654..02e45a3 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1388,6 +1388,8 @@ svr4_in_dynsym_resolve_code (CORE_ADDR pc)
static CORE_ADDR
exec_entry_point (struct bfd *abfd, struct target_ops *targ)
{
+ CORE_ADDR addr;
+
/* KevinB wrote ... for most targets, the address returned by
bfd_get_start_address() is the entry point for the start
function. But, for some targets, bfd_get_start_address() returns
@@ -1396,9 +1398,10 @@ exec_entry_point (struct bfd *abfd, struct target_ops *targ)
gdbarch_convert_from_func_ptr_addr(). The method
gdbarch_convert_from_func_ptr_addr() is the merely the identify
function for targets which don't use function descriptors. */
- return gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
+ addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
bfd_get_start_address (abfd),
targ);
+ return gdbarch_addr_bits_remove (target_gdbarch (), addr);
}
/* Helper function for gdb_bfd_lookup_symbol. */
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 6a2fc89..1d3278b 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -2150,6 +2150,7 @@ generic_load (char *args, int from_tty)
gettimeofday (&end_time, NULL);
entry = bfd_get_start_address (loadfile_bfd);
+ entry = gdbarch_addr_bits_remove (target_gdbarch (), entry);
ui_out_text (uiout, "Start address ");
ui_out_field_fmt (uiout, "address", "%s", paddress (target_gdbarch (), entry));
ui_out_text (uiout, ", load size ");