blob: aae44784238b09a570fdb154b5a1c3fcdc5a77c3 [file] [log] [blame]
Juan Cespedesd44c6b81998-09-25 14:48:42 +02001#if HAVE_CONFIG_H
2#include "config.h"
3#endif
4
Juan Cespedes273ea6d1998-03-14 23:02:40 +01005#include <sys/types.h>
6#include <string.h>
7#include <stdio.h>
8#include <errno.h>
9#include <stdlib.h>
10
11#include "ltrace.h"
12#include "options.h"
13#include "elf.h"
14
Ian Wienand9a2ad352006-02-20 22:44:45 +010015struct process *
16open_program(char * filename, pid_t pid) {
17 struct process * proc;
18 proc = calloc(sizeof(struct process), 1);
Juan Cespedes273ea6d1998-03-14 23:02:40 +010019 if (!proc) {
20 perror("malloc");
21 exit(1);
22 }
23 proc->filename = filename;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010024 proc->breakpoints_enabled = -1;
Ian Wienand9a2ad352006-02-20 22:44:45 +010025 if (pid) { proc->pid = pid; }
Juan Cespedes7186e2a2003-01-31 19:56:34 +010026 breakpoints_init(proc);
Juan Cespedes273ea6d1998-03-14 23:02:40 +010027
28 proc->next = list_of_processes;
29 list_of_processes = proc;
30 return proc;
31}
32
Ian Wienand9a2ad352006-02-20 22:44:45 +010033void
34open_pid(pid_t pid, int verbose) {
35 struct process * proc;
36 char * filename;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010037
Ian Wienand9a2ad352006-02-20 22:44:45 +010038 if (trace_pid(pid)<0) {
39 fprintf(stderr, "Cannot attach to pid %u: %s\n", pid, strerror(errno));
Juan Cespedes35d70631998-03-15 14:05:40 +010040 return;
41 }
42
Juan Cespedes273ea6d1998-03-14 23:02:40 +010043 filename = pid2name(pid);
44
Juan Cespedes35d70631998-03-15 14:05:40 +010045#if 0
Juan Cespedes273ea6d1998-03-14 23:02:40 +010046 if (!filename) {
47 if (verbose) {
Ian Wienand9a2ad352006-02-20 22:44:45 +010048 fprintf(stderr, "Cannot trace pid %u: %s\n", pid, strerror(errno));
Juan Cespedes273ea6d1998-03-14 23:02:40 +010049 }
50 return;
51 }
Juan Cespedes35d70631998-03-15 14:05:40 +010052#endif
Juan Cespedes273ea6d1998-03-14 23:02:40 +010053
Ian Wienand9a2ad352006-02-20 22:44:45 +010054 proc = open_program(filename, pid);
55 proc->breakpoints_enabled = 1;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010056}