Deleted Added
full compact
29c29
< __FBSDID("$FreeBSD: head/sys/amd64/amd64/ptrace_machdep.c 278976 2015-02-18 23:34:03Z jhb $");
---
> __FBSDID("$FreeBSD: head/sys/amd64/amd64/ptrace_machdep.c 284919 2015-06-29 07:07:24Z kib $");
38a39,40
> #include <vm/vm.h>
> #include <vm/pmap.h>
40a43,44
> #include <machine/frame.h>
> #include <machine/vmparam.h>
112a117,130
> static void
> cpu_ptrace_setbase(struct thread *td, int req, register_t r)
> {
>
> if (req == PT_SETFSBASE) {
> td->td_pcb->pcb_fsbase = r;
> td->td_frame->tf_fs = _ufssel;
> } else {
> td->td_pcb->pcb_gsbase = r;
> td->td_frame->tf_gs = _ugssel;
> }
> set_pcb_flags(td->td_pcb, PCB_FULL_IRET);
> }
>
120a139
> uint32_t r;
144a164,186
> case PT_GETFSBASE:
> case PT_GETGSBASE:
> if (!SV_PROC_FLAG(td->td_proc, SV_ILP32)) {
> error = EINVAL;
> break;
> }
> r = req == PT_GETFSBASE ? td->td_pcb->pcb_fsbase :
> td->td_pcb->pcb_gsbase;
> error = copyout(&r, addr, sizeof(r));
> break;
>
> case PT_SETFSBASE:
> case PT_SETGSBASE:
> if (!SV_PROC_FLAG(td->td_proc, SV_ILP32)) {
> error = EINVAL;
> break;
> }
> error = copyin(addr, &r, sizeof(r));
> if (error != 0)
> break;
> cpu_ptrace_setbase(td, req, r);
> break;
>
156a199
> register_t *r, rv;
178a222,240
> case PT_GETFSBASE:
> case PT_GETGSBASE:
> r = req == PT_GETFSBASE ? &td->td_pcb->pcb_fsbase :
> &td->td_pcb->pcb_gsbase;
> error = copyout(r, addr, sizeof(*r));
> break;
>
> case PT_SETFSBASE:
> case PT_SETGSBASE:
> error = copyin(addr, &rv, sizeof(rv));
> if (error != 0)
> break;
> if (rv >= VM_MAXUSER_ADDRESS) {
> error = EINVAL;
> break;
> }
> cpu_ptrace_setbase(td, req, rv);
> break;
>