* linux-low.c (STACK_SIZE): Define.
(linux_tracefork_child): Use it. Use __clone2 on ia64. (linux_test_for_tracefork): Likewise.
This commit is contained in:
parent
aeb5907d62
commit
7407e2de24
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
Loading…
Reference in New Issue