diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-03-28 20:24:05 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-03-28 20:24:05 +0000 |
commit | 300f8e104fa748aa73b49f38add5a38d93ce41a2 (patch) | |
tree | 24af1809f95d63ef499e3f425e7215a00ed02e5a | |
parent | 11c8145561ebaf02170cf601bcd9b393cdb82916 (diff) | |
download | gdb-300f8e104fa748aa73b49f38add5a38d93ce41a2.zip gdb-300f8e104fa748aa73b49f38add5a38d93ce41a2.tar.gz gdb-300f8e104fa748aa73b49f38add5a38d93ce41a2.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/infcall.c | 23 |
2 files changed, 16 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8c156e1..fc4fdbe 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 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> + GDB find_pc_partial_function support for STT_GNU_IFUNC. * blockframe.c (cache_pc_function_is_gnu_ifunc): New variable. (clear_pc_function_cache): Clear it. diff --git a/gdb/infcall.c b/gdb/infcall.c index d42248e..e07cf00 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -236,7 +236,6 @@ find_function_addr (struct value *function, struct type **retval_type) { struct type *ftype = check_typedef (value_type (function)); struct gdbarch *gdbarch = get_type_arch (ftype); - enum type_code code = TYPE_CODE (ftype); struct type *value_type = NULL; CORE_ADDR funaddr; @@ -244,24 +243,22 @@ find_function_addr (struct value *function, struct type **retval_type) part of it. */ /* Determine address to call. */ - if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD) - { - funaddr = value_address (function); - value_type = TYPE_TARGET_TYPE (ftype); - } - else if (code == TYPE_CODE_PTR) + if (TYPE_CODE (ftype) == TYPE_CODE_FUNC + || TYPE_CODE (ftype) == TYPE_CODE_METHOD) + funaddr = value_address (function); + else if (TYPE_CODE (ftype) == TYPE_CODE_PTR) { funaddr = value_as_address (function); ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); if (TYPE_CODE (ftype) == TYPE_CODE_FUNC || TYPE_CODE (ftype) == TYPE_CODE_METHOD) - { - funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr, - ¤t_target); - value_type = TYPE_TARGET_TYPE (ftype); - } + funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr, + ¤t_target); } - 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. Their values are characters since their addresses are char. */ |