forked from OSchip/llvm-project
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
This commit is contained in:
parent
5fc28ebbaf
commit
a9ffb47345
|
@ -125,6 +125,10 @@ llvm::Error PerfEvent::MmapMetadataAndDataBuffer(size_t num_data_pages,
|
|||
}
|
||||
|
||||
llvm::Error PerfEvent::MmapAuxBuffer(size_t num_aux_pages) {
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"Intel PT Linux perf event not supported");
|
||||
#else
|
||||
if (num_aux_pages == 0)
|
||||
return Error::success();
|
||||
|
||||
|
@ -141,6 +145,7 @@ llvm::Error PerfEvent::MmapAuxBuffer(size_t num_aux_pages) {
|
|||
return Error::success();
|
||||
} else
|
||||
return mmap_aux.takeError();
|
||||
#endif
|
||||
}
|
||||
|
||||
llvm::Error PerfEvent::MmapMetadataAndBuffers(size_t num_data_pages,
|
||||
|
@ -170,16 +175,24 @@ perf_event_mmap_page &PerfEvent::GetMetadataPage() const {
|
|||
}
|
||||
|
||||
ArrayRef<uint8_t> PerfEvent::GetDataBuffer() const {
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
llvm_unreachable("Intel PT Linux perf event not supported");
|
||||
#else
|
||||
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
|
||||
return {reinterpret_cast<uint8_t *>(m_metadata_data_base.get()) +
|
||||
mmap_metadata.data_offset,
|
||||
static_cast<size_t>(mmap_metadata.data_size)};
|
||||
#endif
|
||||
}
|
||||
|
||||
ArrayRef<uint8_t> PerfEvent::GetAuxBuffer() const {
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
llvm_unreachable("Intel PT Linux perf event not supported");
|
||||
#else
|
||||
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
|
||||
return {reinterpret_cast<uint8_t *>(m_aux_base.get()),
|
||||
static_cast<size_t>(mmap_metadata.aux_size)};
|
||||
#endif
|
||||
}
|
||||
|
||||
Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
|
||||
|
@ -188,6 +201,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
|
|||
// this piece of code updates some pointers. See more about data_tail
|
||||
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
|
||||
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"Intel PT Linux perf event not supported");
|
||||
#else
|
||||
bool was_enabled = m_enabled;
|
||||
if (Error err = DisableWithIoctl())
|
||||
return std::move(err);
|
||||
|
@ -224,6 +241,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyDataBuffer() {
|
|||
}
|
||||
|
||||
return output;
|
||||
#endif
|
||||
}
|
||||
|
||||
Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
|
||||
|
@ -232,6 +250,10 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
|
|||
// this piece of code updates some pointers. See more about aux_tail
|
||||
// in https://man7.org/linux/man-pages/man2/perf_event_open.2.html.
|
||||
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"Intel PT Linux perf event not supported");
|
||||
#else
|
||||
bool was_enabled = m_enabled;
|
||||
if (Error err = DisableWithIoctl())
|
||||
return std::move(err);
|
||||
|
@ -264,6 +286,7 @@ Expected<std::vector<uint8_t>> PerfEvent::GetReadOnlyAuxBuffer() {
|
|||
}
|
||||
|
||||
return output;
|
||||
#endif
|
||||
}
|
||||
|
||||
Error PerfEvent::DisableWithIoctl() {
|
||||
|
@ -295,11 +318,15 @@ Error PerfEvent::EnableWithIoctl() {
|
|||
}
|
||||
|
||||
size_t PerfEvent::GetEffectiveDataBufferSize() const {
|
||||
#ifndef PERF_ATTR_SIZE_VER5
|
||||
llvm_unreachable("Intel PT Linux perf event not supported");
|
||||
#else
|
||||
perf_event_mmap_page &mmap_metadata = GetMetadataPage();
|
||||
if (mmap_metadata.data_head < mmap_metadata.data_size)
|
||||
return mmap_metadata.data_head;
|
||||
else
|
||||
return mmap_metadata.data_size; // The buffer has wrapped.
|
||||
#endif
|
||||
}
|
||||
|
||||
Expected<PerfEvent>
|
||||
|
|
Loading…
Reference in New Issue