|
@@ -1,4 +1,5 @@
|
|
#include <linux/types.h>
|
|
#include <linux/types.h>
|
|
|
|
+#include <sys/mman.h>
|
|
#include "event.h"
|
|
#include "event.h"
|
|
#include "debug.h"
|
|
#include "debug.h"
|
|
#include "hist.h"
|
|
#include "hist.h"
|
|
@@ -212,6 +213,21 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool,
|
|
else
|
|
else
|
|
event->header.misc = PERF_RECORD_MISC_GUEST_USER;
|
|
event->header.misc = PERF_RECORD_MISC_GUEST_USER;
|
|
|
|
|
|
|
|
+ /* map protection and flags bits */
|
|
|
|
+ event->mmap2.prot = 0;
|
|
|
|
+ event->mmap2.flags = 0;
|
|
|
|
+ if (prot[0] == 'r')
|
|
|
|
+ event->mmap2.prot |= PROT_READ;
|
|
|
|
+ if (prot[1] == 'w')
|
|
|
|
+ event->mmap2.prot |= PROT_WRITE;
|
|
|
|
+ if (prot[2] == 'x')
|
|
|
|
+ event->mmap2.prot |= PROT_EXEC;
|
|
|
|
+
|
|
|
|
+ if (prot[3] == 's')
|
|
|
|
+ event->mmap2.flags |= MAP_SHARED;
|
|
|
|
+ else
|
|
|
|
+ event->mmap2.flags |= MAP_PRIVATE;
|
|
|
|
+
|
|
if (prot[2] != 'x') {
|
|
if (prot[2] != 'x') {
|
|
if (!mmap_data || prot[0] != 'r')
|
|
if (!mmap_data || prot[0] != 'r')
|
|
continue;
|
|
continue;
|
|
@@ -612,12 +628,15 @@ size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp)
|
|
size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp)
|
|
size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp)
|
|
{
|
|
{
|
|
return fprintf(fp, " %d/%d: [%#" PRIx64 "(%#" PRIx64 ") @ %#" PRIx64
|
|
return fprintf(fp, " %d/%d: [%#" PRIx64 "(%#" PRIx64 ") @ %#" PRIx64
|
|
- " %02x:%02x %"PRIu64" %"PRIu64"]: %c %s\n",
|
|
|
|
|
|
+ " %02x:%02x %"PRIu64" %"PRIu64"]: %c%c%c%c %s\n",
|
|
event->mmap2.pid, event->mmap2.tid, event->mmap2.start,
|
|
event->mmap2.pid, event->mmap2.tid, event->mmap2.start,
|
|
event->mmap2.len, event->mmap2.pgoff, event->mmap2.maj,
|
|
event->mmap2.len, event->mmap2.pgoff, event->mmap2.maj,
|
|
event->mmap2.min, event->mmap2.ino,
|
|
event->mmap2.min, event->mmap2.ino,
|
|
event->mmap2.ino_generation,
|
|
event->mmap2.ino_generation,
|
|
- (event->header.misc & PERF_RECORD_MISC_MMAP_DATA) ? 'r' : 'x',
|
|
|
|
|
|
+ (event->mmap2.prot & PROT_READ) ? 'r' : '-',
|
|
|
|
+ (event->mmap2.prot & PROT_WRITE) ? 'w' : '-',
|
|
|
|
+ (event->mmap2.prot & PROT_EXEC) ? 'x' : '-',
|
|
|
|
+ (event->mmap2.flags & MAP_SHARED) ? 's' : 'p',
|
|
event->mmap2.filename);
|
|
event->mmap2.filename);
|
|
}
|
|
}
|
|
|
|
|