blob: 67b88f1b31c4f26dfbf698c652f7b7056fdfe2a1 [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
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010015struct process *
16open_program(char * filename) {
Juan Cespedes273ea6d1998-03-14 23:02:40 +010017 struct process * proc;
18 proc = malloc(sizeof(struct process));
19 if (!proc) {
20 perror("malloc");
21 exit(1);
22 }
Juan Cespedes5c3fe062004-06-14 18:08:37 +020023 memset(proc, 0, sizeof(struct process));
Juan Cespedes273ea6d1998-03-14 23:02:40 +010024 proc->filename = filename;
25 proc->pid = 0;
Juan Cespedescac15c32003-01-31 18:58:58 +010026 proc->breakpoints = NULL;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010027 proc->breakpoints_enabled = -1;
Juan Cespedes5b3ffdf2001-07-02 00:52:45 +020028 proc->callstack_depth = 0;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010029 proc->breakpoint_being_enabled = NULL;
Juan Cespedes7186e2a2003-01-31 19:56:34 +010030 breakpoints_init(proc);
Juan Cespedes273ea6d1998-03-14 23:02:40 +010031 proc->next = NULL;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010032
33 proc->next = list_of_processes;
34 list_of_processes = proc;
35 return proc;
36}
37
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010038void
39open_pid(pid_t pid, int verbose) {
Juan Cespedes273ea6d1998-03-14 23:02:40 +010040 struct process * proc;
41 char * filename;
42
Juan Cespedes35d70631998-03-15 14:05:40 +010043 if (trace_pid(pid)<0) {
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010044 fprintf(stderr, "Cannot attach to pid %u: %s\n", pid, strerror(errno));
Juan Cespedes35d70631998-03-15 14:05:40 +010045 return;
46 }
47
Juan Cespedes273ea6d1998-03-14 23:02:40 +010048 filename = pid2name(pid);
49
Juan Cespedes35d70631998-03-15 14:05:40 +010050#if 0
Juan Cespedes273ea6d1998-03-14 23:02:40 +010051 if (!filename) {
52 if (verbose) {
53 fprintf(stderr, "Cannot trace pid %u: %s\n", pid, strerror(errno));
54 }
55 return;
56 }
Juan Cespedes35d70631998-03-15 14:05:40 +010057#endif
Juan Cespedes273ea6d1998-03-14 23:02:40 +010058
59 proc = open_program(filename);
60 proc->pid = pid;
61}