proc.c revision f728123bd75a65a6a1536e198c3c30719e494e71
1#if HAVE_CONFIG_H 2#include "config.h" 3#endif 4 5#include <sys/types.h> 6#include <string.h> 7#include <stdio.h> 8#include <errno.h> 9#include <stdlib.h> 10 11#include "common.h" 12#include "options.h" 13#include "elf.h" 14 15Process * 16open_program(char *filename, pid_t pid) { 17 Process *proc; 18 proc = calloc(sizeof(Process), 1); 19 if (!proc) { 20 perror("malloc"); 21 exit(1); 22 } 23 proc->filename = strdup(filename); 24 proc->breakpoints_enabled = -1; 25 if (pid) { 26 proc->pid = pid; 27 } 28 breakpoints_init(proc); 29 30 proc->next = list_of_processes; 31 list_of_processes = proc; 32 return proc; 33} 34 35void 36open_pid(pid_t pid, int verbose) { 37 Process *proc; 38 char *filename; 39 40 if (trace_pid(pid) < 0) { 41 fprintf(stderr, "Cannot attach to pid %u: %s\n", pid, 42 strerror(errno)); 43 return; 44 } 45 46 filename = pid2name(pid); 47 48#if 0 49 if (!filename) { 50 if (verbose) { 51 fprintf(stderr, "Cannot trace pid %u: %s\n", pid, 52 strerror(errno)); 53 } 54 return; 55 } 56#endif 57 58 proc = open_program(filename, pid); 59 continue_process(pid); 60 proc->breakpoints_enabled = 1; 61} 62 63Process * 64pid2proc(pid_t pid) { 65 Process *tmp; 66 67 tmp = list_of_processes; 68 while (tmp) { 69 if (pid == tmp->pid) { 70 return tmp; 71 } 72 tmp = tmp->next; 73 } 74 return NULL; 75} 76