Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
um
kernel
skas
clone.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3
* Licensed under the GPL
4
*/
5
6
#include <signal.h>
7
#include <sched.h>
8
#include <asm/unistd.h>
9
#include <sys/time.h>
10
#include <
as-layout.h
>
11
#include <ptrace_user.h>
12
#include <
stub-data.h
>
13
#include <
sysdep/stub.h
>
14
15
/*
16
* This is in a separate file because it needs to be compiled with any
17
* extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled
18
*
19
* Use UM_KERN_PAGE_SIZE instead of PAGE_SIZE because that calls getpagesize
20
* on some systems.
21
*/
22
23
void
__attribute__
((__section__ (
".__syscall_stub"
)))
24
stub_clone_handler
(
void
)
25
{
26
struct
stub_data
*
data
= (
struct
stub_data
*)
STUB_DATA
;
27
long
err
;
28
29
err = stub_syscall2(
__NR_clone
,
CLONE_PARENT
|
CLONE_FILES
|
SIGCHLD
,
30
STUB_DATA
+ UM_KERN_PAGE_SIZE / 2 -
sizeof
(
void
*));
31
if
(err != 0)
32
goto
out
;
33
34
err = stub_syscall4(
__NR_ptrace
,
PTRACE_TRACEME
, 0, 0, 0);
35
if
(err)
36
goto
out
;
37
38
err = stub_syscall3(
__NR_setitimer
,
ITIMER_VIRTUAL
,
39
(
long
) &data->
timer
, 0);
40
if
(err)
41
goto
out
;
42
43
remap_stack(data->
fd
, data->
offset
);
44
goto
done
;
45
46
out
:
47
/*
48
* save current result.
49
* Parent: pid;
50
* child: retcode of mmap already saved and it jumps around this
51
* assignment
52
*/
53
data->
err
=
err
;
54
done
:
55
trap_myself();
56
}
Generated on Thu Jan 10 2013 13:19:32 for Linux Kernel by
1.8.2