extended parseThat to use new addressSpace abstraction
[dyninst.git] / parseThat / src / config.h
1 #ifndef __CONFIG_H__
2 #define __CONFIG_H__
3
4 #include <iostream>
5 #include <set>
6 #include <deque>
7 #include <string>
8 #include <unistd.h>
9 #include <limits.h>             // Needed for PATH_MAX.
10
11 using namespace std;
12
13 #include "record.h"
14 #include "reglist.h"
15 #include "dyninstCompat.h"
16
17 #define STRING_MAX 1024
18
19 #define HISTORY_RECORD_DIR_DEFAULT ".parseThat"
20 #define HISTORY_RECORD_INDEX_FILE ".history_index"
21
22 enum RunMode {
23     SINGLE_BINARY,
24     BATCH_DIRECTORY,
25     BATCH_FILE
26 };
27
28 enum TransactionMode {
29     TRANS_NONE,
30     TRANS_FUNCTION,
31     TRANS_MODULE,
32     TRANS_PROCESS
33 };
34
35 enum ParseLevel {
36     PARSE_MODULE,
37     PARSE_FUNC,
38     PARSE_CFG,
39     PARSE_MAX
40 };
41
42 enum InstLevel {
43     INST_NONE,
44     INST_FUNC_ENTRY,
45     INST_FUNC_EXIT,
46     INST_BASIC_BLOCK,
47     INST_MEMORY_READ,
48     INST_MEMORY_WRITE,
49     INST_MAX
50 };
51
52 enum RunState {
53     NORMAL,
54     SIGCHLD_WAIT,
55     TIME_EXPIRED,
56     CHILD_EXITED,
57     DETACHED
58 };
59
60 struct Config {
61     RunMode runMode;
62     TransactionMode transMode;
63
64     // Holds the next target to open.  Generally set by getNextTarget().
65     char target[ PATH_MAX ];
66     char **argv;
67     unsigned argc;
68
69     // For BATCH_FILE runMode.
70     const char *config_file;
71
72     // Output file string and descriptor.
73     const char *output_file;
74     FILE *outfd;
75
76     // History record directory.
77     bool record_enabled;
78     char record_dir[ PATH_MAX ];
79     record_t curr_rec;
80
81   bool no_fork;         // For IPC debugging.  See if we should run without monitor.
82   bool recursive;       // Descend into children when processing directories.
83   bool summary;         // Print instrumemnation summary on mutatee exit.
84   bool include_libs;    // Parse/Instrument shared libraries as well as program modules.
85   bool use_attach;      // Attach to running process instead of forking new one.
86   int  attach_pid;
87   bool use_merge_tramp; // Use merge tramp for instrumentation.
88   bool use_save_world;  // Use save-the-world functionality.
89   
90   bool use_process;  //Standard process style of instrumentation or binary edit
91   char writeFilePath[PATH_MAX];
92
93
94   char *saved_mutatee;
95   
96     bool trace_inst;      // Trace mutatee as it is running.
97     unsigned int trace_count;
98     deque< string > trace_history;
99     char pipe_filename[ PATH_MAX ];
100     int pipefd;
101
102     // Child PID accounting.
103     int pid;
104     set< int > grandchildren;
105
106     // Debug print level.
107     int verbose;
108
109     // Dyninst test level.
110     ParseLevel parse_level;
111     InstLevel inst_level;
112
113     // Time limit for child execution.
114     int time_limit;
115
116     // Reflects current state of execution.
117     RunState state;
118
119     // Mutators register their dBPatch_thread object here for
120     // efficient process clean-up in the face of signals.
121     dynHandle *dynlib;
122
123     // Rules for which modules/functions to process.
124     reglist mod_rules;
125     reglist func_rules;
126 };
127
128 extern Config config;
129
130 void configInit();
131 bool getNextTarget();
132
133 #endif