diff options
author | Thomas Schwinge <tschwinge@gnu.org> | 2012-02-17 08:39:57 +0000 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2012-02-17 08:39:57 +0000 |
commit | ca193e277905cd464dfd5cf1b8391017a7a861ec (patch) | |
tree | d2c79a7c7e7610feb5de21a51c137419ed7fe3f1 /gdb/sh-tdep.c | |
parent | d0ddfe27502fccf0e608a0f6080e8075847399b6 (diff) | |
download | gdb-ca193e277905cd464dfd5cf1b8391017a7a861ec.zip gdb-ca193e277905cd464dfd5cf1b8391017a7a861ec.tar.gz gdb-ca193e277905cd464dfd5cf1b8391017a7a861ec.tar.bz2 |
* sh-tdep.c (sh_is_renesas_calling_convention): Fix handling of
TYPE_CALLING_CONVENTION annotation.
Diffstat (limited to 'gdb/sh-tdep.c')
-rw-r--r-- | gdb/sh-tdep.c | 21 |
1 files changed, 18 insertions, 3 deletions
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 * |