blob: 083f6a9a4510b59e2453550a953aff280dc8ab41 [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 Wienand3219f322006-02-16 06:00:00 +010015struct process *open_program(char *filename)
16{
17 struct process *proc;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010018 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
Ian Wienand3219f322006-02-16 06:00:00 +010038void open_pid(pid_t pid, int verbose)
39{
40 struct process *proc;
41 char *filename;
Juan Cespedes273ea6d1998-03-14 23:02:40 +010042
Ian Wienand3219f322006-02-16 06:00:00 +010043 if (trace_pid(pid) < 0) {
44 fprintf(stderr, "Cannot attach to pid %u: %s\n", pid,
45 strerror(errno));
Juan Cespedes35d70631998-03-15 14:05:40 +010046 return;
47 }
48
Juan Cespedes273ea6d1998-03-14 23:02:40 +010049 filename = pid2name(pid);
50
Juan Cespedes35d70631998-03-15 14:05:40 +010051#if 0
Juan Cespedes273ea6d1998-03-14 23:02:40 +010052 if (!filename) {
53 if (verbose) {
Ian Wienand3219f322006-02-16 06:00:00 +010054 fprintf(stderr, "Cannot trace pid %u: %s\n", pid,
55 strerror(errno));
Juan Cespedes273ea6d1998-03-14 23:02:40 +010056 }
57 return;
58 }
Juan Cespedes35d70631998-03-15 14:05:40 +010059#endif
Juan Cespedes273ea6d1998-03-14 23:02:40 +010060
61 proc = open_program(filename);
62 proc->pid = pid;
63}