|
@@ -174,6 +174,8 @@ enum perf_branch_sample_type_shift {
|
|
PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14, /* no flags */
|
|
PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14, /* no flags */
|
|
PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15, /* no cycles */
|
|
PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15, /* no cycles */
|
|
|
|
|
|
|
|
+ PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16, /* save branch type */
|
|
|
|
+
|
|
PERF_SAMPLE_BRANCH_MAX_SHIFT /* non-ABI */
|
|
PERF_SAMPLE_BRANCH_MAX_SHIFT /* non-ABI */
|
|
};
|
|
};
|
|
|
|
|
|
@@ -198,9 +200,30 @@ enum perf_branch_sample_type {
|
|
PERF_SAMPLE_BRANCH_NO_FLAGS = 1U << PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT,
|
|
PERF_SAMPLE_BRANCH_NO_FLAGS = 1U << PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT,
|
|
PERF_SAMPLE_BRANCH_NO_CYCLES = 1U << PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT,
|
|
PERF_SAMPLE_BRANCH_NO_CYCLES = 1U << PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT,
|
|
|
|
|
|
|
|
+ PERF_SAMPLE_BRANCH_TYPE_SAVE =
|
|
|
|
+ 1U << PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT,
|
|
|
|
+
|
|
PERF_SAMPLE_BRANCH_MAX = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
|
|
PERF_SAMPLE_BRANCH_MAX = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Common flow change classification
|
|
|
|
+ */
|
|
|
|
+enum {
|
|
|
|
+ PERF_BR_UNKNOWN = 0, /* unknown */
|
|
|
|
+ PERF_BR_COND = 1, /* conditional */
|
|
|
|
+ PERF_BR_UNCOND = 2, /* unconditional */
|
|
|
|
+ PERF_BR_IND = 3, /* indirect */
|
|
|
|
+ PERF_BR_CALL = 4, /* function call */
|
|
|
|
+ PERF_BR_IND_CALL = 5, /* indirect function call */
|
|
|
|
+ PERF_BR_RET = 6, /* function return */
|
|
|
|
+ PERF_BR_SYSCALL = 7, /* syscall */
|
|
|
|
+ PERF_BR_SYSRET = 8, /* syscall return */
|
|
|
|
+ PERF_BR_COND_CALL = 9, /* conditional function call */
|
|
|
|
+ PERF_BR_COND_RET = 10, /* conditional function return */
|
|
|
|
+ PERF_BR_MAX,
|
|
|
|
+};
|
|
|
|
+
|
|
#define PERF_SAMPLE_BRANCH_PLM_ALL \
|
|
#define PERF_SAMPLE_BRANCH_PLM_ALL \
|
|
(PERF_SAMPLE_BRANCH_USER|\
|
|
(PERF_SAMPLE_BRANCH_USER|\
|
|
PERF_SAMPLE_BRANCH_KERNEL|\
|
|
PERF_SAMPLE_BRANCH_KERNEL|\
|
|
@@ -1015,6 +1038,7 @@ union perf_mem_data_src {
|
|
* in_tx: running in a hardware transaction
|
|
* in_tx: running in a hardware transaction
|
|
* abort: aborting a hardware transaction
|
|
* abort: aborting a hardware transaction
|
|
* cycles: cycles from last branch (or 0 if not supported)
|
|
* cycles: cycles from last branch (or 0 if not supported)
|
|
|
|
+ * type: branch type
|
|
*/
|
|
*/
|
|
struct perf_branch_entry {
|
|
struct perf_branch_entry {
|
|
__u64 from;
|
|
__u64 from;
|
|
@@ -1024,7 +1048,8 @@ struct perf_branch_entry {
|
|
in_tx:1, /* in transaction */
|
|
in_tx:1, /* in transaction */
|
|
abort:1, /* transaction abort */
|
|
abort:1, /* transaction abort */
|
|
cycles:16, /* cycle count to last branch */
|
|
cycles:16, /* cycle count to last branch */
|
|
- reserved:44;
|
|
|
|
|
|
+ type:4, /* branch type */
|
|
|
|
+ reserved:40;
|
|
};
|
|
};
|
|
|
|
|
|
#endif /* _UAPI_LINUX_PERF_EVENT_H */
|
|
#endif /* _UAPI_LINUX_PERF_EVENT_H */
|