|
|
@@ -561,6 +561,7 @@ static int vr_get(struct task_struct *target, const struct user_regset *regset,
|
|
|
/*
|
|
|
* Copy out only the low-order word of vrsave.
|
|
|
*/
|
|
|
+ int start, end;
|
|
|
union {
|
|
|
elf_vrreg_t reg;
|
|
|
u32 word;
|
|
|
@@ -569,8 +570,10 @@ static int vr_get(struct task_struct *target, const struct user_regset *regset,
|
|
|
|
|
|
vrsave.word = target->thread.vrsave;
|
|
|
|
|
|
+ start = 33 * sizeof(vector128);
|
|
|
+ end = start + sizeof(vrsave);
|
|
|
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &vrsave,
|
|
|
- 33 * sizeof(vector128), -1);
|
|
|
+ start, end);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
@@ -608,6 +611,7 @@ static int vr_set(struct task_struct *target, const struct user_regset *regset,
|
|
|
/*
|
|
|
* We use only the first word of vrsave.
|
|
|
*/
|
|
|
+ int start, end;
|
|
|
union {
|
|
|
elf_vrreg_t reg;
|
|
|
u32 word;
|
|
|
@@ -616,8 +620,10 @@ static int vr_set(struct task_struct *target, const struct user_regset *regset,
|
|
|
|
|
|
vrsave.word = target->thread.vrsave;
|
|
|
|
|
|
+ start = 33 * sizeof(vector128);
|
|
|
+ end = start + sizeof(vrsave);
|
|
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &vrsave,
|
|
|
- 33 * sizeof(vector128), -1);
|
|
|
+ start, end);
|
|
|
if (!ret)
|
|
|
target->thread.vrsave = vrsave.word;
|
|
|
}
|