wait.c

来自「Linux Kernel 2.6.9 for OMAP1710」· C语言 代码 · 共 89 行

C
89
字号
/**********************************************************************wait.cCopyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensingterms and conditions.**********************************************************************/#include <errno.h>#include <signal.h>#include <sys/wait.h>#include <sys/ptrace.h>#include <asm/ptrace.h>#include "ptproxy.h"#include "sysdep.h"#include "wait.h"#include "user_util.h"#include "sysdep/ptrace.h"#include "sysdep/ptrace_user.h"#include "sysdep/sigcontext.h"int proxy_wait_return(struct debugger *debugger, pid_t unused){	debugger->waiting = 0;	if(debugger->debugee->died || (debugger->wait_options & __WCLONE)){		debugger_cancelled_return(debugger, -ECHILD);		return(0);	}	if(debugger->debugee->zombie && debugger->debugee->event)		debugger->debugee->died = 1;	if(debugger->debugee->event){		debugger->debugee->event = 0;		ptrace(PTRACE_POKEDATA, debugger->pid,		       debugger->wait_status_ptr, 		       debugger->debugee->wait_status);		/* if (wait4)		   ptrace (PTRACE_POKEDATA, pid, rusage_ptr, ...); */		debugger_cancelled_return(debugger, debugger->debugee->pid);		return(0);	}	/* pause will return -EINTR, which happens to be right for wait */	debugger_normal_return(debugger, -1);	return(0);}int parent_wait_return(struct debugger *debugger, pid_t unused){	return(debugger_normal_return(debugger, -1));}int real_wait_return(struct debugger *debugger){	unsigned long ip;	int pid;	pid = debugger->pid;	ip = ptrace(PTRACE_PEEKUSER, pid, PT_IP_OFFSET, 0);	IP_RESTART_SYSCALL(ip);	if(ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip) < 0)		tracer_panic("real_wait_return : Failed to restart system "			     "call, errno = %d\n", errno);	if((ptrace(PTRACE_SYSCALL, debugger->pid, 0, SIGCHLD) < 0) ||	   (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) ||	   (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) ||	   debugger_normal_return(debugger, -1))		tracer_panic("real_wait_return : gdb failed to wait, "			     "errno = %d\n", errno);	return(0);}/* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only.  This must remain at the end * of the file. * --------------------------------------------------------------------------- * Local variables: * c-file-style: "linux" * End: */

⌨️ 快捷键说明

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