mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
s390/ptrace: always include vector registers in core files
On machines with support for vector registers the signal frame includes an area for the vector registers and the ptrace regset interface allow read and write. This is true even if the task never used any vector instruction. Only elf core dumps do not include the vector registers, to make things consistent always include the vector register note in core dumps create on a machine with vector register support. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
4b4ee3ee0b
commit
7490daf01f
1 changed files with 8 additions and 10 deletions
|
@ -1091,12 +1091,6 @@ static int s390_tdb_set(struct task_struct *target,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int s390_vxrs_active(struct task_struct *target,
|
||||
const struct user_regset *regset)
|
||||
{
|
||||
return !!target->thread.vxrs;
|
||||
}
|
||||
|
||||
static int s390_vxrs_low_get(struct task_struct *target,
|
||||
const struct user_regset *regset,
|
||||
unsigned int pos, unsigned int count,
|
||||
|
@ -1105,6 +1099,8 @@ static int s390_vxrs_low_get(struct task_struct *target,
|
|||
__u64 vxrs[__NUM_VXRS_LOW];
|
||||
int i;
|
||||
|
||||
if (!MACHINE_HAS_VX)
|
||||
return -ENODEV;
|
||||
if (target->thread.vxrs) {
|
||||
if (target == current)
|
||||
save_vx_regs(target->thread.vxrs);
|
||||
|
@ -1123,6 +1119,8 @@ static int s390_vxrs_low_set(struct task_struct *target,
|
|||
__u64 vxrs[__NUM_VXRS_LOW];
|
||||
int i, rc;
|
||||
|
||||
if (!MACHINE_HAS_VX)
|
||||
return -ENODEV;
|
||||
if (!target->thread.vxrs) {
|
||||
rc = alloc_vector_registers(target);
|
||||
if (rc)
|
||||
|
@ -1148,6 +1146,8 @@ static int s390_vxrs_high_get(struct task_struct *target,
|
|||
{
|
||||
__vector128 vxrs[__NUM_VXRS_HIGH];
|
||||
|
||||
if (!MACHINE_HAS_VX)
|
||||
return -ENODEV;
|
||||
if (target->thread.vxrs) {
|
||||
if (target == current)
|
||||
save_vx_regs(target->thread.vxrs);
|
||||
|
@ -1165,6 +1165,8 @@ static int s390_vxrs_high_set(struct task_struct *target,
|
|||
{
|
||||
int rc;
|
||||
|
||||
if (!MACHINE_HAS_VX)
|
||||
return -ENODEV;
|
||||
if (!target->thread.vxrs) {
|
||||
rc = alloc_vector_registers(target);
|
||||
if (rc)
|
||||
|
@ -1249,7 +1251,6 @@ static const struct user_regset s390_regsets[] = {
|
|||
.n = __NUM_VXRS_LOW,
|
||||
.size = sizeof(__u64),
|
||||
.align = sizeof(__u64),
|
||||
.active = s390_vxrs_active,
|
||||
.get = s390_vxrs_low_get,
|
||||
.set = s390_vxrs_low_set,
|
||||
},
|
||||
|
@ -1258,7 +1259,6 @@ static const struct user_regset s390_regsets[] = {
|
|||
.n = __NUM_VXRS_HIGH,
|
||||
.size = sizeof(__vector128),
|
||||
.align = sizeof(__vector128),
|
||||
.active = s390_vxrs_active,
|
||||
.get = s390_vxrs_high_get,
|
||||
.set = s390_vxrs_high_set,
|
||||
},
|
||||
|
@ -1472,7 +1472,6 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||
.n = __NUM_VXRS_LOW,
|
||||
.size = sizeof(__u64),
|
||||
.align = sizeof(__u64),
|
||||
.active = s390_vxrs_active,
|
||||
.get = s390_vxrs_low_get,
|
||||
.set = s390_vxrs_low_set,
|
||||
},
|
||||
|
@ -1481,7 +1480,6 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||
.n = __NUM_VXRS_HIGH,
|
||||
.size = sizeof(__vector128),
|
||||
.align = sizeof(__vector128),
|
||||
.active = s390_vxrs_active,
|
||||
.get = s390_vxrs_high_get,
|
||||
.set = s390_vxrs_high_set,
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue