clone.c

来自「linux内核源码」· C语言 代码 · 共 54 行

C
54
字号
#include <sched.h>#include <signal.h>#include <sys/mman.h>#include <sys/time.h>#include <asm/unistd.h>#include "as-layout.h"#include "ptrace_user.h"#include "skas.h"#include "stub-data.h"#include "uml-config.h"#include "sysdep/stub.h"#include "kern_constants.h"/* This is in a separate file because it needs to be compiled with any * extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled * * Use UM_KERN_PAGE_SIZE instead of PAGE_SIZE because that calls getpagesize * on some systems. */void __attribute__ ((__section__ (".__syscall_stub")))stub_clone_handler(void){	struct stub_data *data = (struct stub_data *) STUB_DATA;	long err;	err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,			    STUB_DATA + UM_KERN_PAGE_SIZE / 2 - sizeof(void *));	if(err != 0)		goto out;	err = stub_syscall4(__NR_ptrace, PTRACE_TRACEME, 0, 0, 0);	if(err)		goto out;	err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, 			    (long) &data->timer, 0);	if(err)		goto out;	remap_stack(data->fd, data->offset);	goto done; out:	/* save current result. 	 * Parent: pid; 	 * child: retcode of mmap already saved and it jumps around this 	 * assignment	 */	data->err = err; done:	trap_myself();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?