From ca193e277905cd464dfd5cf1b8391017a7a861ec Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Fri, 17 Feb 2012 08:39:57 +0000 Subject: [PATCH] * sh-tdep.c (sh_is_renesas_calling_convention): Fix handling of TYPE_CALLING_CONVENTION annotation. --- gdb/ChangeLog | 5 +++++ 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 + + * sh-tdep.c (sh_is_renesas_calling_convention): Fix handling of + TYPE_CALLING_CONVENTION annotation. + 2012-02-16 Kevin Buettner * 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 * -- 2.7.4