2003-10-03 Andrew Cagney <cagney@redhat.com>

* ppc-linux-tdep.c (ppc64_linux_convert_from_func_ptr_addr): Only
	convert a descriptor to a function when it's in the ".opd"
	section.
This commit is contained in:
Andrew Cagney 2003-10-03 20:50:56 +00:00
parent 8748518b95
commit 9b540880d6
2 changed files with 15 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2003-10-03 Andrew Cagney <cagney@redhat.com>
* ppc-linux-tdep.c (ppc64_linux_convert_from_func_ptr_addr): Only
convert a descriptor to a function when it's in the ".opd"
section.
2003-10-03 Corinna Vinschen <vinschen@redhat.com>
* sh-tdep.c (sh_push_dummy_call_fpu): Initialize flt_argreg and

View file

@ -925,8 +925,10 @@ ppc64_skip_trampoline_code (CORE_ADDR pc)
find_function_addr uses this function to get the function address
from a function pointer. */
/* Return real function address if ADDR (a function pointer) is in the data
space and is therefore a special function pointer. */
/* If ADDR points at what is clearly a function descriptor, transform
it into the address of the corresponding function. Be
conservative, otherwize GDB will do the transformation on any
random addresses such as occures when there is no symbol table. */
static CORE_ADDR
ppc64_linux_convert_from_func_ptr_addr (CORE_ADDR addr)
@ -934,12 +936,12 @@ ppc64_linux_convert_from_func_ptr_addr (CORE_ADDR addr)
struct obj_section *s;
s = find_pc_section (addr);
if (s && s->the_bfd_section->flags & SEC_CODE)
return addr;
/* ADDR is in the data space, so it's a pointer to a descriptor, not
the entry point. */
return ppc64_desc_entry_point (addr);
/* Check if ADDR points to a function descriptor. */
if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
return read_memory_unsigned_integer (addr, 8);
return addr;
}