代码68行:
57 common fork sys_fork
unistd32.h
对#define __SYSCALL(x, y)理解:
#define __NR_fork 2 //偏移量
__SYSCALL(__NR_fork, sys_fork)
===============================================================
nolibc.h
static __attribute__((unused))
pid_t sys_fork(void)
{
#ifdef __NR_clone
/* note: some archs only have clone() and not fork(). Different archs
* have a different API, but most archs have the flags on first arg and
* will not use the rest with no other flag.
* 注释说明一切
*/
return my_syscall5(__NR_clone, SIGCHLD, 0, 0, 0, 0);
#elif defined(__NR_fork)
return my_syscall0(__NR_fork);
#else
#error Neither __NR_clone nor __NR_fork defined, cannot implement sys_fork()
#endif
}
===============================================================
#define my_syscall0(num) \
({ \
long _ret; \
register long _num asm("rax") = (num); \
\
asm volatile ( \
"syscall\n" \
: "=a" (_ret) \
: "0"(_num) \
: "rcx", "r8", "r9", "r10", "r11", "memory", "cc" \
); \
_ret; \
})
。。。。。。没明白
=========================================================
fork.c 文件
copy_process 老版本 do_fork 1852行
static __latent_entropy struct task_struct *copy_process(
struct pid *pid,
int trace,
int node,
struct kernel_clone_args *args)
===========================================================
先到这。。。