diff options
author | Kevin Buettner <kevinb@redhat.com> | 2005-04-29 21:48:28 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2005-04-29 21:48:28 +0000 |
commit | 35e08e031b7aa2ed269990e91ba9df85bdb3e865 (patch) | |
tree | 6458fc224c2a9cbf61aed9cb768499bc3fbb1a18 /gdb | |
parent | 5ea106f753c6d77047396b9650ca0105e5643fda (diff) | |
download | gdb-35e08e031b7aa2ed269990e91ba9df85bdb3e865.zip gdb-35e08e031b7aa2ed269990e91ba9df85bdb3e865.tar.gz gdb-35e08e031b7aa2ed269990e91ba9df85bdb3e865.tar.bz2 |
Fix bugs related to inferior function calls on FRV using the FDPIC ABI.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/frv-tdep.c | 7 | ||||
-rw-r--r-- | gdb/solib-frv.c | 4 |
3 files changed, 18 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0759dc7..40ed552 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2005-04-29 Kevin Buettner <kevinb@redhat.com> + + * frv-tdep.c (find_func_descr): Verify that entry point can be + found in symbol table prior to looking up its function descriptor. + * solib-frv.c (find_canonical_descriptor_in_load_object): Add + test for non-NULL link map. + 2005-04-29 Corinna Vinschen <vinschen@redhat.com> * MAINTAINERS: Revert h8300 state to un-deleted. diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index 20b4427..e597037 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -1079,6 +1079,13 @@ find_func_descr (struct gdbarch *gdbarch, CORE_ADDR entry_point) { CORE_ADDR descr; char valbuf[4]; + CORE_ADDR start_addr; + + /* If we can't find the function in the symbol table, then we assume + that the function address is already in descriptor form. */ + if (!find_pc_partial_function (entry_point, NULL, &start_addr, NULL) + || entry_point != start_addr) + return entry_point; descr = frv_fdpic_find_canonical_descriptor (entry_point); diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index ecc791a..4647b95 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -1109,6 +1109,10 @@ find_canonical_descriptor_in_load_object if (abfd == 0) return 0; + /* Nothing to do if no link map. */ + if (lm == 0) + return 0; + /* We want to scan the dynamic relocs for R_FRV_FUNCDESC relocations. (More about this later.) But in order to fetch the relocs, we need to first fetch the dynamic symbols. These symbols need to |