gdb/
Code cleanup for later STT_GNU_IFUNC support. * infcall.c (find_function_addr): Remove variable code, use explicit dereferences for it. Move VALUE_TYPE initialization later.
This commit is contained in:
parent
11c8145561
commit
300f8e104f
2 changed files with 16 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2011-03-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
Code cleanup for later STT_GNU_IFUNC support.
|
||||||
|
* infcall.c (find_function_addr): Remove variable code, use explicit
|
||||||
|
dereferences for it. Move VALUE_TYPE initialization later.
|
||||||
|
|
||||||
2011-03-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2011-03-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
GDB find_pc_partial_function support for STT_GNU_IFUNC.
|
GDB find_pc_partial_function support for STT_GNU_IFUNC.
|
||||||
|
|
|
@ -236,7 +236,6 @@ find_function_addr (struct value *function, struct type **retval_type)
|
||||||
{
|
{
|
||||||
struct type *ftype = check_typedef (value_type (function));
|
struct type *ftype = check_typedef (value_type (function));
|
||||||
struct gdbarch *gdbarch = get_type_arch (ftype);
|
struct gdbarch *gdbarch = get_type_arch (ftype);
|
||||||
enum type_code code = TYPE_CODE (ftype);
|
|
||||||
struct type *value_type = NULL;
|
struct type *value_type = NULL;
|
||||||
CORE_ADDR funaddr;
|
CORE_ADDR funaddr;
|
||||||
|
|
||||||
|
@ -244,24 +243,22 @@ find_function_addr (struct value *function, struct type **retval_type)
|
||||||
part of it. */
|
part of it. */
|
||||||
|
|
||||||
/* Determine address to call. */
|
/* Determine address to call. */
|
||||||
if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
|
if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
|
||||||
{
|
|| TYPE_CODE (ftype) == TYPE_CODE_METHOD)
|
||||||
funaddr = value_address (function);
|
funaddr = value_address (function);
|
||||||
value_type = TYPE_TARGET_TYPE (ftype);
|
else if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
|
||||||
}
|
|
||||||
else if (code == TYPE_CODE_PTR)
|
|
||||||
{
|
{
|
||||||
funaddr = value_as_address (function);
|
funaddr = value_as_address (function);
|
||||||
ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
|
ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
|
||||||
if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
|
if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
|
||||||
|| TYPE_CODE (ftype) == TYPE_CODE_METHOD)
|
|| TYPE_CODE (ftype) == TYPE_CODE_METHOD)
|
||||||
{
|
funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
|
||||||
funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
|
¤t_target);
|
||||||
¤t_target);
|
|
||||||
value_type = TYPE_TARGET_TYPE (ftype);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (code == TYPE_CODE_INT)
|
if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
|
||||||
|
|| TYPE_CODE (ftype) == TYPE_CODE_METHOD)
|
||||||
|
value_type = TYPE_TARGET_TYPE (ftype);
|
||||||
|
else if (TYPE_CODE (ftype) == TYPE_CODE_INT)
|
||||||
{
|
{
|
||||||
/* Handle the case of functions lacking debugging info.
|
/* Handle the case of functions lacking debugging info.
|
||||||
Their values are characters since their addresses are char. */
|
Their values are characters since their addresses are char. */
|
||||||
|
|
Loading…
Reference in a new issue