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