summaryrefslogtreecommitdiff
path: root/simpleperf/ETMDecoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/ETMDecoder.cpp')
-rw-r--r--simpleperf/ETMDecoder.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/simpleperf/ETMDecoder.cpp b/simpleperf/ETMDecoder.cpp
index 7c2928c0..5e2f92e0 100644
--- a/simpleperf/ETMDecoder.cpp
+++ b/simpleperf/ETMDecoder.cpp
@@ -289,9 +289,14 @@ class MemAccess : public ITargetMemAccess {
// addr.
if (!map->in_kernel) {
data.buffer_map = map;
- data.buffer = memory == nullptr ? nullptr : (memory->getBufferStart() + map->pgoff);
data.buffer_start = map->start_addr;
data.buffer_end = map->get_end_addr();
+ if (memory != nullptr && memory->getBufferSize() > map->pgoff &&
+ (memory->getBufferSize() - map->pgoff >= map->len)) {
+ data.buffer = memory->getBufferStart() + map->pgoff;
+ } else {
+ data.buffer = nullptr;
+ }
}
}
*num_bytes = copy_size;