Update copyright to LGPL on all files
[dyninst.git] / parseThat / src / ipc.h
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 #ifndef __IPC_H__
32 #define __IPC_H__
33
34 #include <cstdarg>
35 using namespace std;
36
37 #include "config.h"
38 #include "log.h"
39
40 enum statusID {
41     ID_INFO,
42     ID_TEST,
43     ID_WARN,
44     ID_FAIL,
45     ID_PASS
46 };
47
48 enum messageID {
49     ID_INVALID,
50
51     ID_INIT_CREATE_BPATCH,
52     ID_INIT_REGISTER_EXIT,
53     ID_INIT_REGISTER_FORK,
54     ID_INIT_CREATE_PROCESS,
55     ID_INIT_ATTACH_PROCESS,
56     ID_INIT_MERGE_TRAMP,
57     ID_INIT_SAVE_WORLD,
58     ID_INIT_GET_IMAGE,
59     ID_POST_FORK,
60
61     ID_PARSE_MODULE,
62     ID_PARSE_FUNC,
63     ID_PARSE_MODULE_CFG,
64     ID_PARSE_FUNC_CFG,
65
66     ID_INST_START_TRANS,
67     ID_INST_END_TRANS,
68
69     ID_INST_MODULE,
70     ID_INST_FUNC,
71     ID_INST_FUNC_ENTRY,
72     ID_INST_FUNC_EXIT,
73     ID_INST_BASIC_BLOCK,
74     ID_INST_MEM_READ,
75     ID_INST_MEM_WRITE,
76
77     ID_INST_GET_BB,
78     ID_NO_BB,
79     ID_INST_GET_BB_POINTS,
80     ID_GET_CFG,
81     ID_INST_BB_LIST,
82
83     ID_INST_FIND_INT,
84     ID_INST_MALLOC_INT,
85     ID_FAILED_INST_INIT_INT,
86     ID_INST_GET_FUNCS,
87     ID_INST_FIND_POINTS,
88     ID_NO_POINTS,
89     ID_INST_INSERT_CODE,
90
91     ID_TRACE_INIT,
92     ID_TRACE_INIT_MUTATEE,
93     ID_TRACE_FIND_OPEN,
94     ID_TRACE_FIND_WRITE,
95     ID_TRACE_OPEN_READER,
96     ID_TRACE_OPEN_WRITER,
97     ID_TRACE_INSERT,
98     ID_TRACE_INSERT_ONE,
99     ID_TRACE_READ,
100     ID_TRACE_POINT,
101
102     ID_ALLOC_COUNTER,
103
104     ID_RUN_CHILD,
105     ID_WAIT_TERMINATION, 
106     ID_WAIT_STATUS_CHANGE,
107     ID_POLL_STATUS_CHANGE,
108     ID_EXIT_CODE,
109     ID_EXIT_SIGNAL,
110     ID_SAVE_WORLD,
111     ID_DETACH_CHILD,
112     ID_STOP_CHILD,
113
114     ID_SUMMARY_INSERT,
115     ID_SUMMARY_START,
116     ID_SUMMARY_END,
117
118     ID_DATA_STRING,
119
120     ID_CRASH_HUNT_NUM_ACTIONS,
121
122     ID_MAX
123 };
124
125 #define encodeID(msgID, pri, statID)    ( ((msgID) << 8) | ((pri) << 4) | (statID) )
126 #define getMsgID(x)                     ((messageID)((x) >> 8))
127 #define getStatID(x)                    ((statusID)((x) & 0xF))
128 #define getPriID(x)                     ((logLevel)(((x) >> 4) & 0xF))
129
130 struct message {
131     unsigned id_data;
132     char *str_data;
133     int int_data;
134 };
135
136 void setSigHandlers();
137 void resetSigHandlers();
138 const char *msgStr(messageID);
139 message *readMsg(FILE *, message *);
140 void printMsg(FILE *, messageID, int = 0);
141 void sendMsg(FILE *, messageID, logLevel, statusID = ID_TEST, const char * = NULL);
142 void sendMsg(FILE *, messageID, logLevel, statusID, int);
143 void sendStr(FILE *, const char *fmt, ...);
144 void killProcess(pid_t);
145 void cleanupProcess();
146 void cleanupFinal();
147
148 int readStr(FILE *, char *, int);
149
150 #endif