|
@@ -229,12 +229,16 @@ static int gpr_get(struct task_struct *target, const struct user_regset *regset,
|
|
|
unsigned int pos, unsigned int count,
|
|
|
void *kbuf, void __user *ubuf)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ int i, ret;
|
|
|
|
|
|
if (target->thread.regs == NULL)
|
|
|
return -EIO;
|
|
|
|
|
|
- CHECK_FULL_REGS(target->thread.regs);
|
|
|
+ if (!FULL_REGS(target->thread.regs)) {
|
|
|
+ /* We have a partial register set. Fill 14-31 with bogus values */
|
|
|
+ for (i = 14; i < 32; i++)
|
|
|
+ target->thread.regs->gpr[i] = NV_REG_POISON;
|
|
|
+ }
|
|
|
|
|
|
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
|
|
|
target->thread.regs,
|
|
@@ -641,11 +645,16 @@ static int gpr32_get(struct task_struct *target,
|
|
|
compat_ulong_t *k = kbuf;
|
|
|
compat_ulong_t __user *u = ubuf;
|
|
|
compat_ulong_t reg;
|
|
|
+ int i;
|
|
|
|
|
|
if (target->thread.regs == NULL)
|
|
|
return -EIO;
|
|
|
|
|
|
- CHECK_FULL_REGS(target->thread.regs);
|
|
|
+ if (!FULL_REGS(target->thread.regs)) {
|
|
|
+ /* We have a partial register set. Fill 14-31 with bogus values */
|
|
|
+ for (i = 14; i < 32; i++)
|
|
|
+ target->thread.regs->gpr[i] = NV_REG_POISON;
|
|
|
+ }
|
|
|
|
|
|
pos /= sizeof(reg);
|
|
|
count /= sizeof(reg);
|