This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] RISC-V: Give stack slots same align as XLEN.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=174f8ac8d49021137f98884fc22a7d233e2f89b2

commit 174f8ac8d49021137f98884fc22a7d233e2f89b2
Author: Jim Wilson <jimw@sifive.com>
Date:   Wed Nov 14 14:51:40 2018 -0800

    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.

Diff:
---
 gdb/ChangeLog    | 6 ++++++
 gdb/riscv-tdep.c | 5 +++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 62d7f54..2406c1a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-14  Jim Wilson  <jimw@sifive.com>
+
+	* 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.
+
 2018-11-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
 	* skip.c (complete_skip_number): New function.
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)
 	{


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]