From: Jim Wilson Date: Wed, 14 Nov 2018 22:52:34 +0000 (-0800) Subject: RISC-V: Handle vector type alignment. X-Git-Tag: users/ARM/embedded-binutils-master-2018q4~175 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef2de9e7eb19cf6f56c8378df82cab30ff741fe0;p=external%2Fbinutils.git 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) : If TYPE_VECTOR, return min of TYPE_LENGTH and BIGGEST_ALIGNMENT. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2406c1a..a918439 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2018-11-14 Jim Wilson + * riscv-tdep.c (BIGGEST_ALIGNMENT): New. + (riscv_type_alignment) : If TYPE_VECTOR, return min + of TYPE_LENGTH and BIGGEST_ALIGNMENT. + * riscv-tdep.c (riscv_call_arg_scalar_int): Use std::min when setting len. New local align, set to max of arg align and xlen, and pass to first riscv_assign_stack_location call. 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));