On 01/08, Dmitry V. Levin wrote: > > +ptrace_set_syscall_info_entry(struct task_struct *child, struct pt_regs *regs, > + struct ptrace_syscall_info *info) > +{ ... > + syscall_set_nr(child, regs, nr); > + syscall_set_arguments(child, regs, args); > + if (nr == -1) { > + /* > + * When the syscall number is set to -1, the syscall will be > + * skipped. In this case also set the syscall return value to > + * -ENOSYS, otherwise on some architectures the corresponding > + * struct pt_regs field will remain unchanged. > + * > + * Note that on some architectures syscall_set_return_value() > + * modifies one of the struct pt_regs fields also modified by > + * syscall_set_arguments(), so the former should be called > + * after the latter. > + */ > + syscall_set_return_value(child, regs, -ENOSYS, 0); > + } This doesn't look nice to me... We don't need this syscall_set_return_value(ENOSYS) on x86, right? So perhaps we should move this "if (nr == -1) code into syscall_set_nr/syscall_set_arguments on those "some architectures" which actually need it ? Oleg.