blob: 3369127bcbab8e79e29ea8d752e66bc2721dfe00 [file] [log] [blame]
Juan Cespedes273ea6d1998-03-14 23:02:40 +01001#include <sys/types.h>
2#include <string.h>
3#include <stdio.h>
4#include <errno.h>
5#include <stdlib.h>
6
7#include "ltrace.h"
8#include "options.h"
9#include "elf.h"
10
11struct process * open_program(char * filename)
12{
13 struct process * proc;
14 proc = malloc(sizeof(struct process));
15 if (!proc) {
16 perror("malloc");
17 exit(1);
18 }
19 proc->filename = filename;
20 proc->pid = 0;
21 proc->breakpoints_enabled = -1;
22 proc->current_syscall = -1;
23 proc->current_symbol = NULL;
24 proc->breakpoint_being_enabled = NULL;
25 proc->next = NULL;
Juan Cespedes35d70631998-03-15 14:05:40 +010026 if (opt_L && filename) {
Juan Cespedes273ea6d1998-03-14 23:02:40 +010027 proc->list_of_symbols = read_elf(filename);
28 } else {
29 proc->list_of_symbols = NULL;
30 }
31
32 proc->next = list_of_processes;
33 list_of_processes = proc;
34 return proc;
35}
36
37void open_pid(pid_t pid, int verbose)
38{
39 struct process * proc;
40 char * filename;
41
Juan Cespedes35d70631998-03-15 14:05:40 +010042 if (trace_pid(pid)<0) {
43#if 0
44 if (verbose) {
45#endif
46 fprintf(stderr, "Cannot attach to pid %u: %s\n", pid, strerror(errno));
47#if 0
48 }
49#endif
50 return;
51 }
52
Juan Cespedes273ea6d1998-03-14 23:02:40 +010053 filename = pid2name(pid);
54
Juan Cespedes35d70631998-03-15 14:05:40 +010055#if 0
Juan Cespedes273ea6d1998-03-14 23:02:40 +010056 if (!filename) {
57 if (verbose) {
58 fprintf(stderr, "Cannot trace pid %u: %s\n", pid, strerror(errno));
59 }
60 return;
61 }
Juan Cespedes35d70631998-03-15 14:05:40 +010062#endif
Juan Cespedes273ea6d1998-03-14 23:02:40 +010063
64 proc = open_program(filename);
65 proc->pid = pid;
66}