summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2007-12-21 16:04:27 +0000
committerAndreas Schwab <schwab@suse.de>2007-12-21 16:04:27 +0000
commitb4894dd1b553800ae9bd7d3075e95017da60d4e7 (patch)
tree88c13072a90a326b98f960140670990809bb8da8 /gdb
parent2fb79178de05ef1a3888471b0c321da5d825cb91 (diff)
downloadgdb-b4894dd1b553800ae9bd7d3075e95017da60d4e7.tar.gz
* linux-low.c (STACK_SIZE): Define.
(linux_tracefork_child): Use it. Use __clone2 on ia64. (linux_test_for_tracefork): Likewise.
Diffstat (limited to 'gdb')
-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 7e2cfcda139..ced28cd5368 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 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");