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