aboutsummaryrefslogtreecommitdiff
path: root/gdb/riscv-tdep.c
diff options
context:
space:
mode:
authorJim Wilson <jimw@sifive.com>2018-11-14 14:52:34 -0800
committerJim Wilson <jimw@sifive.com>2018-11-14 14:52:34 -0800
commitef2de9e7eb19cf6f56c8378df82cab30ff741fe0 (patch)
treeb6d1d7ffdda84af419fca6c83e17199cbbbb99d4 /gdb/riscv-tdep.c
parent174f8ac8d49021137f98884fc22a7d233e2f89b2 (diff)
downloadgdb-ef2de9e7eb19cf6f56c8378df82cab30ff741fe0.zip
gdb-ef2de9e7eb19cf6f56c8378df82cab30ff741fe0.tar.gz
gdb-ef2de9e7eb19cf6f56c8378df82cab30ff741fe0.tar.bz2
RISC-V: Handle vector type alignment.
For riscv64-linux target, first half of fix for FAIL: gdb.base/gnu_vector.exp: call add_various_floatvecs GCC gives vectors natural aligment based on total size, not element size, bounded by the maximum supported type alignment. gdb/ * riscv-tdep.c (BIGGEST_ALIGNMENT): New. (riscv_type_alignment) <TYPE_CODE_ARRAY>: If TYPE_VECTOR, return min of TYPE_LENGTH and BIGGEST_ALIGNMENT.
Diffstat (limited to 'gdb/riscv-tdep.c')
-rw-r--r--gdb/riscv-tdep.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index b59cc6e..92f8c6e 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -59,6 +59,9 @@
/* The stack must be 16-byte aligned. */
#define SP_ALIGNMENT 16
+/* The biggest alignment that the target supports. */
+#define BIGGEST_ALIGNMENT 16
+
/* Forward declarations. */
static bool riscv_has_feature (struct gdbarch *gdbarch, char feature);
@@ -1642,6 +1645,10 @@ riscv_type_alignment (struct type *t)
return TYPE_LENGTH (t);
case TYPE_CODE_ARRAY:
+ if (TYPE_VECTOR (t))
+ return std::min (TYPE_LENGTH (t), (unsigned) BIGGEST_ALIGNMENT);
+ /* FALLTHROUGH */
+
case TYPE_CODE_COMPLEX:
return riscv_type_alignment (TYPE_TARGET_TYPE (t));