[S390] ptrace: use common code for simple peek/poke operations
arch_ptrace on s390 implements PTRACE_(PEEK|POKE)(TEXT|DATA) instead of using using ptrace_request in kernel/ptrace.c. The only reason is the 31bit addressing mode, where we have to unmask the highest bit. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
bdd42b28cd
commit
07805ac81c
|
@ -339,24 +339,10 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
int copied, ret;
|
int copied, ret;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case PTRACE_PEEKTEXT:
|
|
||||||
case PTRACE_PEEKDATA:
|
|
||||||
/* Remove high order bit from address (only for 31 bit). */
|
|
||||||
addr &= PSW_ADDR_INSN;
|
|
||||||
/* read word at location addr. */
|
|
||||||
return generic_ptrace_peekdata(child, addr, data);
|
|
||||||
|
|
||||||
case PTRACE_PEEKUSR:
|
case PTRACE_PEEKUSR:
|
||||||
/* read the word at location addr in the USER area. */
|
/* read the word at location addr in the USER area. */
|
||||||
return peek_user(child, addr, data);
|
return peek_user(child, addr, data);
|
||||||
|
|
||||||
case PTRACE_POKETEXT:
|
|
||||||
case PTRACE_POKEDATA:
|
|
||||||
/* Remove high order bit from address (only for 31 bit). */
|
|
||||||
addr &= PSW_ADDR_INSN;
|
|
||||||
/* write the word at location addr. */
|
|
||||||
return generic_ptrace_pokedata(child, addr, data);
|
|
||||||
|
|
||||||
case PTRACE_POKEUSR:
|
case PTRACE_POKEUSR:
|
||||||
/* write the word at location addr in the USER area */
|
/* write the word at location addr in the USER area */
|
||||||
return poke_user(child, addr, data);
|
return poke_user(child, addr, data);
|
||||||
|
@ -386,8 +372,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
copied += sizeof(unsigned long);
|
copied += sizeof(unsigned long);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
default:
|
||||||
|
/* Removing high order bit from addr (only for 31 bit). */
|
||||||
|
addr &= PSW_ADDR_INSN;
|
||||||
|
return ptrace_request(child, request, addr, data);
|
||||||
}
|
}
|
||||||
return ptrace_request(child, request, addr, data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
Loading…
Reference in a new issue