[1/3] RISC-V: gdb.base/gnu_vector fixes.

Message ID 20181106214403.22192-1-jimw@sifive.com
State New, archived
Headers

Commit Message

Jim Wilson Nov. 6, 2018, 9:44 p.m. UTC
  Ensure that stack slots are always the same size as XLEN by rounding up arg
sizes when computing the address of the next stack slot.

	gdb/
	* riscv-tdep.c (riscv_assign_stack_location): New arg slot_align.
	Use with align_up when setting arg_offset.
	(riscv_call_arg_scalar_int): Call riscv_assign_stack_location with
	cinfo->xlen as new arg.
---
 gdb/riscv-tdep.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
  

Patch

diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index db372e2163..ac4f2533f4 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -1868,13 +1868,13 @@  riscv_assign_reg_location (struct riscv_arg_info::location *loc,
 static void
 riscv_assign_stack_location (struct riscv_arg_info::location *loc,
 			     struct riscv_memory_offsets *memory,
-			     int length, int align)
+			     int length, int align, int slot_align)
 {
   loc->loc_type = riscv_arg_info::location::on_stack;
   memory->arg_offset
     = align_up (memory->arg_offset, align);
   loc->loc_data.offset = memory->arg_offset;
-  memory->arg_offset += length;
+  memory->arg_offset += align_up (length, slot_align);
   loc->c_length = length;
 
   /* Offset is always 0, either we're the first location part, in which
@@ -1919,7 +1919,7 @@  riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
 				      cinfo->xlen, 0))
 	riscv_assign_stack_location (&ainfo->argloc[1],
 				     &cinfo->memory, cinfo->xlen,
-				     cinfo->xlen);
+				     cinfo->xlen, cinfo->xlen);
     }
   else
     {
@@ -1928,7 +1928,8 @@  riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
       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, ainfo->align,
+				     cinfo->xlen);
 
       if (len < ainfo->length)
 	{
@@ -1937,7 +1938,8 @@  riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
 					  &cinfo->int_regs, len,
 					  cinfo->xlen))
 	    riscv_assign_stack_location (&ainfo->argloc[1],
-					 &cinfo->memory, len, cinfo->xlen);
+					 &cinfo->memory, len, cinfo->xlen,
+					 cinfo->xlen);
 	}
     }
 }