ptrace has some issues (sysdeps/mach/hurd/ptrace.c).

  • Our implementation (and the generic one in misc/ptrace.c) differ from the Linux one (sysdeps/unix/sysv/linux/ptrace.c) w.r.t. handling of...

    • the third argument: int data vs. void *data;

    • void *addr2 -- Linux doesn't have this, but we provide some additional functionalty using this;

    • function declaration: Linux has long int ptrace (enum __ptrace_request __request, ...) __THROW, we have int ptrace (enum __ptrace_request __request, ...);

    • interface do differ, e.g., Linux' PTRACE_GETREGS uses void *data, we use void *addr for returning the struct, and in Linux this is a struct user_regs_struct from linux/user.h, and for us it is a struct i386_thread_state from mach/i386/thread_status.h;

    • Linux provides some functionality that we don't provide: PTRACE_GETFPXREGS , PTRACE_SINGLESTEP.

  • Some parts are wrongly implemented, e.g., PTRACE_GETREGS and PTRACE_SETREGS both do the same thing.

Also consider the sysdeps/generic/sys/ptrace.h and sysdeps/unix/sysv/linux/sys/ptrace.h files.