diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/sh-tdep.c | 21 |
2 files changed, 23 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index daa0a90..150760b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-02-17 Thomas Schwinge <thomas@codesourcery.com> + + * sh-tdep.c (sh_is_renesas_calling_convention): Fix handling of + TYPE_CALLING_CONVENTION annotation. + 2012-02-16 Kevin Buettner <kevinb@redhat.com> * MAINTAINERS: Add rx to target ISA section. diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 635939d..12116fd 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -89,9 +89,24 @@ struct sh_frame_cache static int sh_is_renesas_calling_convention (struct type *func_type) { - return ((func_type - && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh) - || sh_active_calling_convention == sh_cc_renesas); + int val = 0; + + if (func_type) + { + func_type = check_typedef (func_type); + + if (TYPE_CODE (func_type) == TYPE_CODE_PTR) + func_type = check_typedef (TYPE_TARGET_TYPE (func_type)); + + if (TYPE_CODE (func_type) == TYPE_CODE_FUNC + && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh) + val = 1; + } + + if (sh_active_calling_convention == sh_cc_renesas) + val = 1; + + return val; } static const char * |