diff options
author | Jim Wilson <jimw@sifive.com> | 2018-11-14 14:51:40 -0800 |
---|---|---|
committer | Jim Wilson <jimw@sifive.com> | 2018-11-14 14:51:40 -0800 |
commit | 174f8ac8d49021137f98884fc22a7d233e2f89b2 (patch) | |
tree | 7ed2c1d745734f44f5e577f7b7ec255788331599 /gdb/riscv-tdep.c | |
parent | dd9168931facd539a585b88d7b7c6c04c8c065c2 (diff) | |
download | fsf-binutils-gdb-174f8ac8d49021137f98884fc22a7d233e2f89b2.zip fsf-binutils-gdb-174f8ac8d49021137f98884fc22a7d233e2f89b2.tar.gz fsf-binutils-gdb-174f8ac8d49021137f98884fc22a7d233e2f89b2.tar.bz2 |
RISC-V: Give stack slots same align as XLEN.
For riscv64-linux target, fixes
FAIL: gdb.base/gnu_vector.exp: call add_many_charvecs
Ensure that stack slots are always the same alignment as XLEN by rounding
up arg align to xlen.
gdb/
* 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.
Diffstat (limited to 'gdb/riscv-tdep.c')
-rw-r--r-- | gdb/riscv-tdep.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c index 7a92fc7..b59cc6e 100644 --- a/gdb/riscv-tdep.c +++ b/gdb/riscv-tdep.c @@ -1925,12 +1925,13 @@ riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo, } else { - int len = (ainfo->length > cinfo->xlen) ? cinfo->xlen : ainfo->length; + int len = std::min (ainfo->length, cinfo->xlen); + int align = std::max (ainfo->align, cinfo->xlen); if (!riscv_assign_reg_location (&ainfo->argloc[0], &cinfo->int_regs, len, 0)) riscv_assign_stack_location (&ainfo->argloc[0], - &cinfo->memory, len, ainfo->align); + &cinfo->memory, len, align); if (len < ainfo->length) { |