summaryrefslogtreecommitdiff
path: root/gdb/arm-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2011-12-21 21:13:14 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2011-12-21 21:13:14 +0000
commit3ea5f7adf032f0340193b4632fcdefca3fcc0c04 (patch)
tree074c9380a20f46e6484b95f391a98bfd963631fb /gdb/arm-tdep.c
parenta6d4f2d4a8828e688f1aba6ff6d35e4a9496fe71 (diff)
downloadgdb-3ea5f7adf032f0340193b4632fcdefca3fcc0c04.tar.gz
gdb/
PR tdep/12797 * arm-tdep.c (arm_return_value): Handle complex types. gdb/testsuite/ PR tdep/12797 * gdb.base/callfuncs.exp: Remove KFAIL.
Diffstat (limited to 'gdb/arm-tdep.c')
-rw-r--r--gdb/arm-tdep.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 4b3e7471e95..96d295abd34 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -9061,6 +9061,12 @@ arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
return RETURN_VALUE_STRUCT_CONVENTION;
}
+ /* AAPCS returns complex types longer than a register in memory. */
+ if (tdep->arm_abi != ARM_ABI_APCS
+ && TYPE_CODE (valtype) == TYPE_CODE_COMPLEX
+ && TYPE_LENGTH (valtype) > INT_REGISTER_SIZE)
+ return RETURN_VALUE_STRUCT_CONVENTION;
+
if (writebuf)
arm_store_return_value (valtype, regcache, writebuf);