Skip to content

Commit 6599b6e

Browse files
DavidSpicketttru
authored andcommitted
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 (chery picked from a9ffb47)
1 parent 02129ea commit 6599b6e

File tree

1 file changed

+29
-2
lines changed
  • lldb/source/Plugins/Process/Linux

1 file changed

+29
-2
lines changed

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

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ llvm::Error PerfEvent::MmapMetadataAndDataBuffer(size_t num_data_pages,
127127
}
128128

129129
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
130134
if (num_aux_pages == 0)
131135
return Error::success();
132136

@@ -143,6 +147,7 @@ llvm::Error PerfEvent::MmapAuxBuffer(size_t num_aux_pages) {
143147
return Error::success();
144148
} else
145149
return mmap_aux.takeError();
150+
#endif
146151
}
147152

148153
llvm::Error PerfEvent::MmapMetadataAndBuffers(size_t num_data_pages,
@@ -172,16 +177,24 @@ perf_event_mmap_page &PerfEvent::GetMetadataPage() const {
172177
}
173178

174179
ArrayRef<uint8_t> PerfEvent::GetDataBuffer() const {
180+
#ifndef PERF_ATTR_SIZE_VER5
181+
llvm_unreachable("Intel PT Linux perf event not supported");
182+
#else
175183
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
176184
return {reinterpret_cast<uint8_t *>(m_metadata_data_base.get()) +
177185
mmap_metadata.data_offset,
178-
static_cast<size_t>(mmap_metadata.data_size)};
186+
static_cast<size_t>(mmap_metadata.data_size)};
187+
#endif
179188
}
180189

181190
ArrayRef<uint8_t> PerfEvent::GetAuxBuffer() const {
191+
#ifndef PERF_ATTR_SIZE_VER5
192+
llvm_unreachable("Intel PT Linux perf event not supported");
193+
#else
182194
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
183195
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
185198
}
186199

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

206+
#ifndef PERF_ATTR_SIZE_VER5
207+
return createStringError(inconvertibleErrorCode(),
208+
"Intel PT Linux perf event not supported");
209+
#else
193210
bool was_enabled = m_enabled;
194211
if (Error err = DisableWithIoctl())
195212
return std::move(err);
@@ -226,6 +243,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
226243
}
227244

228245
return output;
246+
#endif
229247
}
230248

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

255+
#ifndef PERF_ATTR_SIZE_VER5
256+
return createStringError(inconvertibleErrorCode(),
257+
"Intel PT Linux perf event not supported");
258+
#else
237259
bool was_enabled = m_enabled;
238260
if (Error err = DisableWithIoctl())
239261
return std::move(err);
@@ -266,6 +288,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
266288
}
267289

268290
return output;
291+
#endif
269292
}
270293

271294
Error PerfEvent::DisableWithIoctl() {
@@ -297,11 +320,15 @@ Error PerfEvent::EnableWithIoctl() {
297320
}
298321

299322
size_t PerfEvent::GetEffectiveDataBufferSize() const {
323+
#ifndef PERF_ATTR_SIZE_VER5
324+
llvm_unreachable("Intel PT Linux perf event not supported");
325+
#else
300326
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
301327
if (mmap_metadata.data_head < mmap_metadata.data_size)
302328
return mmap_metadata.data_head;
303329
else
304330
return mmap_metadata.data_size; // The buffer has wrapped.
331+
#endif
305332
}
306333

307334
Expected<PerfEvent>

0 commit comments

Comments
 (0)