• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/arch/um/kernel/tt/ptproxy/

Lines Matching refs:debugger

32 static int debugger_wait(debugger_state *debugger, int *status, int options,
33 int (*syscall)(debugger_state *debugger, pid_t child),
34 int (*normal_return)(debugger_state *debugger,
36 int (*wait_return)(debugger_state *debugger,
39 if(debugger->real_wait){
40 debugger->handle_trace = normal_return;
41 syscall_continue(debugger->pid);
42 debugger->real_wait = 0;
45 debugger->wait_status_ptr = status;
46 debugger->wait_options = options;
47 if((debugger->debugee != NULL) && debugger->debugee->event){
48 syscall_continue(debugger->pid);
49 wait_for_stop(debugger->pid, SIGTRAP, PTRACE_SYSCALL,
51 (*wait_return)(debugger, -1);
54 else if(debugger->wait_options & WNOHANG){
55 syscall_cancel(debugger->pid, 0);
56 debugger->handle_trace = syscall;
60 syscall_pause(debugger->pid);
61 debugger->handle_trace = wait_return;
62 debugger->waiting = 1;
68 * Handle debugger trap, i.e. syscall.
71 int debugger_syscall(debugger_state *debugger, pid_t child)
76 syscall = get_syscall(debugger->pid, &arg1, &arg2, &arg3, &arg4,
82 debugger->handle_trace = debugger_syscall;
86 if(debugger->debugee->pid != 0) arg2 = debugger->debugee->pid;
87 if(!debugger->debugee->in_context)
88 child = debugger->debugee->pid;
89 result = proxy_ptrace(debugger, arg1, arg2, arg3, arg4, child,
91 syscall_cancel(debugger->pid, result);
92 debugger->handle_trace = debugger_syscall;
99 if(!debugger_wait(debugger, (int *) arg2, arg3,
106 if(!debugger->debugee->in_context)
107 child = debugger->debugee->pid;
108 if(arg1 == debugger->debugee->pid){
110 syscall_cancel(debugger->pid, result);
111 debugger->handle_trace = debugger_syscall;
114 else debugger->handle_trace = debugger_normal_return;
118 debugger->handle_trace = debugger_normal_return;
121 syscall_continue(debugger->pid);
127 static int parent_syscall(debugger_state *debugger, int pid);
142 int parent_normal_return(debugger_state *debugger, pid_t unused)
144 debugger->handle_trace = parent_syscall;
145 syscall_continue(debugger->pid);
149 static int parent_syscall(debugger_state *debugger, int pid)
168 int debugger_normal_return(debugger_state *debugger, pid_t unused)
170 debugger->handle_trace = debugger_syscall;
171 syscall_continue(debugger->pid);
175 void debugger_cancelled_return(debugger_state *debugger, int result)
177 debugger->handle_trace = debugger_syscall;
178 syscall_set_result(debugger->pid, result);
179 syscall_continue(debugger->pid);
183 static debugger_state debugger;
188 debugger.pid = debugger_pid;
189 debugger.handle_trace = debugger_syscall;
190 debugger.debugee = &debugee;
191 debugger.waiting = 0;
192 debugger.real_wait = 0;
193 debugger.expecting_child = 0;
212 ret = (*debugger.handle_trace)(&debugger, pid);
215 if(debugger.expecting_child){
216 ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
217 debugger.expecting_child = 0;
219 else if(debugger.waiting)
220 real_wait_return(&debugger);
222 ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
223 debugger.real_wait = 1;
226 else ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
229 tracer_panic("debugger (pid %d) exited with status %d",
230 debugger.pid, WEXITSTATUS(status));
233 tracer_panic("debugger (pid %d) exited with signal %d",
234 debugger.pid, WTERMSIG(status));
237 tracer_panic("proxy got unknown status (0x%x) on debugger "
238 "(pid %d)", status, debugger.pid);
250 debugger.expecting_child = 1;
251 kill(debugger.pid, SIGCHLD);
255 debugger.expecting_child = 1;
256 kill(debugger.pid, SIGCHLD);
278 while(debugger.waiting == 1){
279 CATCH_EINTR(pid = waitpid(debugger.pid, &status, WUNTRACED));
280 if(pid != debugger.pid){
285 debugger_proxy(status, debugger.pid);
287 CATCH_EINTR(pid = waitpid(debugger.pid, &status, WUNTRACED));
288 if(pid != debugger.pid){
293 if(ptrace(PTRACE_DETACH, debugger.pid, 0, SIGCONT) < 0)