From 7407e2de24aecf239b2f7d070acd2a297a8bce9c Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Fri, 21 Dec 2007 16:04:27 +0000 Subject: [PATCH] * linux-low.c (STACK_SIZE): Define. (linux_tracefork_child): Use it. Use __clone2 on ia64. (linux_test_for_tracefork): Likewise. --- gdb/gdbserver/ChangeLog | 6 ++++++ gdb/gdbserver/linux-low.c | 21 +++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 7e2cfcda139..ced28cd5368 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2007-12-20 Andreas Schwab + + * linux-low.c (STACK_SIZE): Define. + (linux_tracefork_child): Use it. Use __clone2 on ia64. + (linux_test_for_tracefork): Likewise. + 2007-12-18 Daniel Jacobowitz * linux-low.c (linux_wait_for_event): Update messages. Do not diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index c746269be46..d033a7db6ec 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -1743,12 +1743,20 @@ linux_tracefork_grandchild (void *arg) _exit (0); } +#define STACK_SIZE 4096 + static int linux_tracefork_child (void *arg) { ptrace (PTRACE_TRACEME, 0, 0, 0); kill (getpid (), SIGSTOP); - clone (linux_tracefork_grandchild, arg, CLONE_VM | SIGCHLD, NULL); +#ifdef __ia64__ + __clone2 (linux_tracefork_grandchild, arg, STACK_SIZE, + CLONE_VM | SIGCHLD, NULL); +#else + clone (linux_tracefork_grandchild, arg + STACK_SIZE, + CLONE_VM | SIGCHLD, NULL); +#endif _exit (0); } @@ -1776,13 +1784,18 @@ linux_test_for_tracefork (void) { int child_pid, ret, status; long second_pid; - char *stack = malloc (8192); + char *stack = malloc (STACK_SIZE * 4); linux_supports_tracefork_flag = 0; /* Use CLONE_VM instead of fork, to support uClinux (no MMU). */ - child_pid = clone (linux_tracefork_child, stack + 2048, - CLONE_VM | SIGCHLD, stack + 6144); +#ifdef __ia64__ + child_pid = __clone2 (linux_tracefork_child, stack, STACK_SIZE, + CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2); +#else + child_pid = clone (linux_tracefork_child, stack + STACK_SIZE, + CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2); +#endif if (child_pid == -1) perror_with_name ("clone"); -- 2.30.2