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:
Jan Kratochvil 2011-03-28 20:24:05 +00:00
parent 11c8145561
commit 300f8e104f
2 changed files with 16 additions and 13 deletions

View file

@ -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.

View file

@ -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, &current_target);
&current_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. */