Skip to content

Commit a9ffb47

Browse files
committed
Fix LLDB build on old Linux kernels (pre-4.1)
These fields are guarded elsewhere, but were missing here. Reviewed By: wallace Differential Revision: https://reviews.llvm.org/D133778
1 parent 5fc28eb commit a9ffb47

File tree

1 file changed

+27
-0
lines changed
  • lldb/source/Plugins/Process/Linux

1 file changed

+27
-0
lines changed

lldb/source/Plugins/Process/Linux/Perf.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ llvm::Error PerfEvent::MmapMetadataAndDataBuffer(size_t num_data_pages,
125125
}
126126

127127
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
128132
if (num_aux_pages == 0)
129133
return Error::success();
130134

@@ -141,6 +145,7 @@ llvm::Error PerfEvent::MmapAuxBuffer(size_t num_aux_pages) {
141145
return Error::success();
142146
} else
143147
return mmap_aux.takeError();
148+
#endif
144149
}
145150

146151
llvm::Error PerfEvent::MmapMetadataAndBuffers(size_t num_data_pages,
@@ -170,16 +175,24 @@ perf_event_mmap_page &PerfEvent::GetMetadataPage() const {
170175
}
171176

172177
ArrayRef<uint8_t> PerfEvent::GetDataBuffer() const {
178+
#ifndef PERF_ATTR_SIZE_VER5
179+
llvm_unreachable("Intel PT Linux perf event not supported");
180+
#else
173181
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
174182
return {reinterpret_cast<uint8_t *>(m_metadata_data_base.get()) +
175183
mmap_metadata.data_offset,
176184
static_cast<size_t>(mmap_metadata.data_size)};
185+
#endif
177186
}
178187

179188
ArrayRef<uint8_t> PerfEvent::GetAuxBuffer() const {
189+
#ifndef PERF_ATTR_SIZE_VER5
190+
llvm_unreachable("Intel PT Linux perf event not supported");
191+
#else
180192
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
181193
return {reinterpret_cast<uint8_t *>(m_aux_base.get()),
182194
static_cast<size_t>(mmap_metadata.aux_size)};
195+
#endif
183196
}
184197

185198
Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
@@ -188,6 +201,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
188201
// this piece of code updates some pointers. See more about data_tail
189202
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
190203

204+
#ifndef PERF_ATTR_SIZE_VER5
205+
return createStringError(inconvertibleErrorCode(),
206+
"Intel PT Linux perf event not supported");
207+
#else
191208
bool was_enabled = m_enabled;
192209
if (Error err = DisableWithIoctl())
193210
return std::move(err);
@@ -224,6 +241,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
224241
}
225242

226243
return output;
244+
#endif
227245
}
228246

229247
Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
@@ -232,6 +250,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
232250
// this piece of code updates some pointers. See more about aux_tail
233251
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
234252

253+
#ifndef PERF_ATTR_SIZE_VER5
254+
return createStringError(inconvertibleErrorCode(),
255+
"Intel PT Linux perf event not supported");
256+
#else
235257
bool was_enabled = m_enabled;
236258
if (Error err = DisableWithIoctl())
237259
return std::move(err);
@@ -264,6 +286,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
264286
}
265287

266288
return output;
289+
#endif
267290
}
268291

269292
Error PerfEvent::DisableWithIoctl() {
@@ -295,11 +318,15 @@ Error PerfEvent::EnableWithIoctl() {
295318
}
296319

297320
size_t PerfEvent::GetEffectiveDataBufferSize() const {
321+
#ifndef PERF_ATTR_SIZE_VER5
322+
llvm_unreachable("Intel PT Linux perf event not supported");
323+
#else
298324
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
299325
if (mmap_metadata.data_head < mmap_metadata.data_size)
300326
return mmap_metadata.data_head;
301327
else
302328
return mmap_metadata.data_size; // The buffer has wrapped.
329+
#endif
303330
}
304331

305332
Expected<PerfEvent>

0 commit comments

Comments
 (0)