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 <jason@lowepower.com>
This commit is contained in:
parent
c5df9308c9
commit
e4c57275d3
1 changed files with 7 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue