summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/ptrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/ptrace.c')
-rw-r--r--sysdeps/unix/sysv/linux/ptrace.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/ptrace.c b/sysdeps/unix/sysv/linux/ptrace.c
index 2c04830c42..32cc990119 100644
--- a/sysdeps/unix/sysv/linux/ptrace.c
+++ b/sysdeps/unix/sysv/linux/ptrace.c
@@ -17,16 +17,28 @@ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <errno.h>
+#include <sys/types.h>
#include <sys/ptrace.h>
-#include <sys/syscall.h>
+#include <stdarg.h>
+
+extern int __syscall_ptrace (int, pid_t, void *, void *);
int
-ptrace (int request, int pid, int addr, int data)
+ptrace (enum __ptrace_request request, ...)
{
- long int ret;
- long int res;
+ int res, ret;
+ va_list ap;
+ pid_t pid;
+ void *addr, *data;
+
+ va_start (ap, request);
+ pid = va_arg (ap, pid_t);
+ addr = va_arg (ap, void *);
+ data = va_arg (ap, void *);
+ va_end (ap);
+
if (request > 0 && request < 4)
- (long int *) data = &ret;
+ data = &ret;
res = __syscall_ptrace (request, pid, addr, data);
@@ -35,9 +47,9 @@ ptrace (int request, int pid, int addr, int data)
if (request > 0 && request < 4)
{
errno = 0;
- return (ret);
+ return ret;
}
- return (int) res;
+ return res;
}
errno = -res;