* linux-low.c (STACK_SIZE): Define.
authorAndreas Schwab <schwab@linux-m68k.org>
Fri, 21 Dec 2007 16:04:27 +0000 (16:04 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Fri, 21 Dec 2007 16:04:27 +0000 (16:04 +0000)
(linux_tracefork_child): Use it.  Use __clone2 on ia64.
(linux_test_for_tracefork): Likewise.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c

index 7e2cfcda13980d91d8b3756317395c4b36a614b6..ced28cd5368660b752c29047d65cd5961f51a44d 100644 (file)
@@ -1,3 +1,9 @@
+2007-12-20  Andreas Schwab  <schwab@suse.de>
+
+       * 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  <dan@codesourcery.com>
 
        * linux-low.c (linux_wait_for_event): Update messages.  Do not
index c746269be461f70cc562503a0d1629c417f0d720..d033a7db6ec990d568440554a7c4ddcd1ffa9964 100644 (file)
@@ -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");