From: Alec Roelke Date: Fri, 27 Jan 2017 21:05:01 +0000 (-0600) Subject: riscv: Fix crash when syscall argument reg index is too high X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e4c57275d38c864798cb04a4644bac90a83572fd;p=gem5.git riscv: Fix crash when syscall argument reg index is too high By default, doSyscall gets the values of six registers to be used for system call arguments. RISC-V, by convention, only has four. Because RISC-V's implementation of these indices is as arrays of integers rather than as base indices plus offsets, trying to get the fifth argument register's value will cause a crash. This patch fixes that by returning 0 for any index higher than 3. Signed-off-by: Jason Lowe-Power --- diff --git a/src/arch/riscv/process.cc b/src/arch/riscv/process.cc index c1a67ec15..4eb3159af 100644 --- a/src/arch/riscv/process.cc +++ b/src/arch/riscv/process.cc @@ -217,7 +217,13 @@ RiscvLiveProcess::argsInit(int pageSize) RiscvISA::IntReg RiscvLiveProcess::getSyscallArg(ThreadContext *tc, int &i) { - return tc->readIntReg(SyscallArgumentRegs[i++]); + // RISC-V only has four system call argument registers by convention, so + // if a larger index is requested return 0 + RiscvISA::IntReg retval = 0; + if (i < 4) + retval = tc->readIntReg(SyscallArgumentRegs[i]); + i++; + return retval; } void