aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2007-12-21 16:04:27 +0000
committerAndreas Schwab <schwab@linux-m68k.org>2007-12-21 16:04:27 +0000
commit7407e2de24aecf239b2f7d070acd2a297a8bce9c (patch)
tree02259075aa6796a2fe4f74644a0e68cbb3dd9610 /gdb/gdbserver
parentaeb5907d62fcf44215d7112b8623f889ef73b2dd (diff)
downloadgdb-7407e2de24aecf239b2f7d070acd2a297a8bce9c.zip
gdb-7407e2de24aecf239b2f7d070acd2a297a8bce9c.tar.gz
gdb-7407e2de24aecf239b2f7d070acd2a297a8bce9c.tar.bz2
* linux-low.c (STACK_SIZE): Define.
(linux_tracefork_child): Use it. Use __clone2 on ia64. (linux_test_for_tracefork): Likewise.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r--gdb/gdbserver/ChangeLog6
-rw-r--r--gdb/gdbserver/linux-low.c21
2 files changed, 23 insertions, 4 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 7e2cfcd..ced28cd 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -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
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index c746269..d033a7d 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");