arm: Support pac_key_* register operand for MRS/MSR in Armv8.1-M Mainline
[binutils-gdb.git] / gprofng / src / ipcio.h
blob23c35fc33dd4d984de7b41957070ccd7b264691e
1 /* Copyright (C) 2021-2024 Free Software Foundation, Inc.
2 Contributed by Oracle.
4 This file is part of GNU Binutils.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
21 /* Defines the external interface between er_ipc and the routines */
23 #ifndef _IPCIO_H
24 #define _IPCIO_H
25 #include <pthread.h>
26 #include "gp-defs.h"
27 #include "StringBuilder.h"
29 class DbeThreadPool;
30 typedef long long DbeObj;
31 typedef void *Object;
32 typedef char *String;
34 #define BUFFER_SIZE_SMALL 512
35 #define BUFFER_SIZE_MEDIUM 512
36 #define BUFFER_SIZE_LARGE 1024*1024
38 #define REQUEST_HAS_NO_BODY 0xFFFFFFFF
39 #define RESPONSE_STATUS_DEFAULT 0
40 #define RESPONSE_STATUS_SUCCESS 1
41 #define RESPONSE_STATUS_FAILURE 2
42 #define RESPONSE_STATUS_CANCELLED 3
44 #define RESPONSE_TYPE_ACK 0
45 #define RESPONSE_TYPE_PROGRESS 1
46 #define RESPONSE_TYPE_COMPLETE 2
47 #define RESPONSE_TYPE_HANDSHAKE 3
48 #define HEADER_MARKER 0xff
50 #define REQUEST_TYPE_DEFAULT 0
51 #define REQUEST_TYPE_CANCEL 1
52 #define REQUEST_TYPE_HANDSHAKE 2
54 #define IPC_PROTOCOL_STR "IPC_PROTOCOL_38"
55 #define IPC_VERSION_NUMBER 38
57 enum IPCrequestStatus
59 INITIALIZED = 0,
60 IN_PROGRESS,
61 COMPLETED,
62 CANCELLED_DEFAULT,
63 CANCELLED_IMMEDIATE
66 enum IPCTraceLevel
68 TRACE_LVL_0 = 0,
69 TRACE_LVL_1,
70 TRACE_LVL_2,
71 TRACE_LVL_3,
72 TRACE_LVL_4
75 class IPCrequest
77 char *buf;
78 int size;
79 int idx;
80 int requestID;
81 int channelID;
82 IPCrequestStatus status;
83 bool cancelImmediate;
84 public:
85 IPCrequest (int, int, int);
86 ~IPCrequest ();
87 IPCrequestStatus getStatus ();
88 void setStatus (IPCrequestStatus);
89 void read ();
91 int getRequestID () { return requestID; }
92 int getChannelID () { return channelID; }
93 bool isCancelImmediate () { return cancelImmediate; }
94 void setCancelImmediate () { cancelImmediate = true; }
95 char rgetc () { return buf[idx++]; }
98 class IPCresponse
100 public:
101 IPCresponse (int sz);
102 ~IPCresponse ();
104 int getRequestID () { return requestID; }
105 int getChannelID () { return channelID; }
106 void setRequestID (int r) { requestID = r; }
107 void setChannelID (int c) { channelID = c; }
108 void setResponseType (int r) { responseType = r; }
109 void setResponseStatus (int s) { responseStatus = s; }
110 int getCurBufSize () { return sb->capacity (); }
111 void sendByte (int);
112 void sendIVal (int);
113 void sendLVal (long long);
114 void sendDVal (double);
115 void sendSVal (const char *);
116 void sendBVal (bool);
117 void sendCVal (char);
118 void sendAVal (void*);
119 void print (void);
120 void reset ();
121 IPCresponse *next;
123 private:
124 int requestID;
125 int channelID;
126 int responseType;
127 int responseStatus;
128 StringBuilder *sb;
131 class BufferPool
133 public:
134 BufferPool ();
135 ~BufferPool ();
136 IPCresponse* getNewResponse (int);
137 void recycle (IPCresponse *);
138 private:
139 pthread_mutex_t p_mutex;
140 IPCresponse *smallBuf;
141 IPCresponse *largeBuf;
144 // Read from the wire
145 int readInt (IPCrequest*);
146 bool readBoolean (IPCrequest*);
147 long long readLong (IPCrequest*);
148 DbeObj readObject (IPCrequest*);
149 Object readArray (IPCrequest*);
150 String readString (IPCrequest*);
151 void readRequestHeader ();
153 // write to the wire
154 void writeString (const char *, IPCrequest*);
155 void writeBoolean (bool, IPCrequest*);
156 void writeInt (int, IPCrequest*);
157 void writeChar (char, IPCrequest*);
158 void writeLong (long long, IPCrequest*);
159 void writeDouble (double, IPCrequest*);
160 void writeArray (void *, IPCrequest*);
161 void writeObject (DbeObj, IPCrequest*);
162 void writeResponseGeneric (int, int, int);
163 int setProgress (int, const char *); // Update the progress bar
164 int ipc_doWork (void *); // The argument is an IPCrequest
166 extern int ipc_flags;
167 extern int ipc_single_threaded_mode;
168 extern DbeThreadPool *responseThreadPool;
169 extern DbeThreadPool *ipcThreadPool;
170 extern int cancelRequestedChannelID;
171 extern int cancellableChannelID;
172 extern int error_flag;
174 void ipc_default_log (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
175 void ipc_response_log (IPCTraceLevel, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
176 void ipc_request_log (IPCTraceLevel, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
178 #endif