This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[committed] [ARM] Fix endless recursion on calculating CPRC candidate
- From: Yao Qi <qiyaoltc at gmail dot com>
- To: gdb-patches at sourceware dot org
- Date: Wed, 6 Jul 2016 08:24:15 +0100
- Subject: [committed] [ARM] Fix endless recursion on calculating CPRC candidate
- Authentication-results: sourceware.org; auth=none
When GDB determines whether type T can be part of candidate for
passing and returning in VFP registers, it calls
arm_vfp_cprc_sub_candidate recursively. However, if type T has
self-reference field, like,
class C
{
static C s;
};
arm_vfp_cprc_sub_candidate won't return. This fix is to skip calling
arm_vfp_cprc_sub_candidate if the field is static.
gdb:
2016-07-06 Yao Qi <yao.qi@linaro.org>
* arm-tdep.c (arm_vfp_cprc_sub_candidate): Don't call
arm_vfp_cprc_sub_candidate for static field.
---
gdb/ChangeLog | 5 +++++
gdb/arm-tdep.c | 7 +++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7cec5ad..a2fe153 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-06 Yao Qi <yao.qi@linaro.org>
+
+ * arm-tdep.c (arm_vfp_cprc_sub_candidate): Don't call
+ arm_vfp_cprc_sub_candidate for static field.
+
2016-07-06 Manish Goregaokar <manish@mozilla.com>
* rust-lang.c (rust_subscript): Allow subscripting pointers
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index a6cb43c..22af54e 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -3563,8 +3563,11 @@ arm_vfp_cprc_sub_candidate (struct type *t,
int i;
for (i = 0; i < TYPE_NFIELDS (t); i++)
{
- int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
- base_type);
+ int sub_count = 0;
+
+ if (!field_is_static (&TYPE_FIELD (t, i)))
+ sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
+ base_type);
if (sub_count == -1)
return -1;
count += sub_count;
--
1.9.1