diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2007-12-21 16:04:27 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2007-12-21 16:04:27 +0000 |
commit | 7407e2de24aecf239b2f7d070acd2a297a8bce9c (patch) | |
tree | 02259075aa6796a2fe4f74644a0e68cbb3dd9610 /gdb/gdbserver | |
parent | aeb5907d62fcf44215d7112b8623f889ef73b2dd (diff) | |
download | gdb-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/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbserver/linux-low.c | 21 |
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"); |