@@ -125,6 +125,10 @@ llvm::Error PerfEvent::MmapMetadataAndDataBuffer(size_t num_data_pages,
125
125
}
126
126
127
127
llvm::Error PerfEvent::MmapAuxBuffer (size_t num_aux_pages) {
128
+ #ifndef PERF_ATTR_SIZE_VER5
129
+ return createStringError (inconvertibleErrorCode (),
130
+ " Intel PT Linux perf event not supported" );
131
+ #else
128
132
if (num_aux_pages == 0 )
129
133
return Error::success ();
130
134
@@ -141,6 +145,7 @@ llvm::Error PerfEvent::MmapAuxBuffer(size_t num_aux_pages) {
141
145
return Error::success ();
142
146
} else
143
147
return mmap_aux.takeError ();
148
+ #endif
144
149
}
145
150
146
151
llvm::Error PerfEvent::MmapMetadataAndBuffers (size_t num_data_pages,
@@ -170,16 +175,24 @@ perf_event_mmap_page &PerfEvent::GetMetadataPage() const {
170
175
}
171
176
172
177
ArrayRef<uint8_t > PerfEvent::GetDataBuffer () const {
178
+ #ifndef PERF_ATTR_SIZE_VER5
179
+ llvm_unreachable (" Intel PT Linux perf event not supported" );
180
+ #else
173
181
perf_event_mmap_page &mmap_metadata = GetMetadataPage ();
174
182
return {reinterpret_cast <uint8_t *>(m_metadata_data_base.get ()) +
175
183
mmap_metadata.data_offset ,
176
184
static_cast <size_t >(mmap_metadata.data_size )};
185
+ #endif
177
186
}
178
187
179
188
ArrayRef<uint8_t > PerfEvent::GetAuxBuffer () const {
189
+ #ifndef PERF_ATTR_SIZE_VER5
190
+ llvm_unreachable (" Intel PT Linux perf event not supported" );
191
+ #else
180
192
perf_event_mmap_page &mmap_metadata = GetMetadataPage ();
181
193
return {reinterpret_cast <uint8_t *>(m_aux_base.get ()),
182
194
static_cast <size_t >(mmap_metadata.aux_size )};
195
+ #endif
183
196
}
184
197
185
198
Expected<std::vector<uint8_t >> PerfEvent::GetReadOnlyDataBuffer () {
@@ -188,6 +201,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
188
201
// this piece of code updates some pointers. See more about data_tail
189
202
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
190
203
204
+ #ifndef PERF_ATTR_SIZE_VER5
205
+ return createStringError (inconvertibleErrorCode (),
206
+ " Intel PT Linux perf event not supported" );
207
+ #else
191
208
bool was_enabled = m_enabled;
192
209
if (Error err = DisableWithIoctl ())
193
210
return std::move (err);
@@ -224,6 +241,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
224
241
}
225
242
226
243
return output;
244
+ #endif
227
245
}
228
246
229
247
Expected<std::vector<uint8_t >> PerfEvent::GetReadOnlyAuxBuffer () {
@@ -232,6 +250,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
232
250
// this piece of code updates some pointers. See more about aux_tail
233
251
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
234
252
253
+ #ifndef PERF_ATTR_SIZE_VER5
254
+ return createStringError (inconvertibleErrorCode (),
255
+ " Intel PT Linux perf event not supported" );
256
+ #else
235
257
bool was_enabled = m_enabled;
236
258
if (Error err = DisableWithIoctl ())
237
259
return std::move (err);
@@ -264,6 +286,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
264
286
}
265
287
266
288
return output;
289
+ #endif
267
290
}
268
291
269
292
Error PerfEvent::DisableWithIoctl () {
@@ -295,11 +318,15 @@ Error PerfEvent::EnableWithIoctl() {
295
318
}
296
319
297
320
size_t PerfEvent::GetEffectiveDataBufferSize () const {
321
+ #ifndef PERF_ATTR_SIZE_VER5
322
+ llvm_unreachable (" Intel PT Linux perf event not supported" );
323
+ #else
298
324
perf_event_mmap_page &mmap_metadata = GetMetadataPage ();
299
325
if (mmap_metadata.data_head < mmap_metadata.data_size )
300
326
return mmap_metadata.data_head ;
301
327
else
302
328
return mmap_metadata.data_size ; // The buffer has wrapped.
329
+ #endif
303
330
}
304
331
305
332
Expected<PerfEvent>
0 commit comments