On Thu, Feb 10, 2022 at 08:06:20PM +0000, James Clark wrote:
Perf inject with Coresight data generates files that cannot be opened when only the last branch option is specified:
perf inject -i perf.data --itrace=l -o inject.data perf script -i inject.data 0x33faa8 [0x8]: failed to process type: 9 [Bad address]
This is because cs_etm__synth_instruction_sample() is called even when the sample type for instructions hasn't been setup. Last branch records are attached to instruction samples so it doesn't make sense to generate them when --itrace=i isn't specified anyway.
This change disables all calls of cs_etm__synth_instruction_sample() unless --itrace=i is specified, resulting in a file with no samples if only --itrace=l is provided, rather than a bad file.
Signed-off-by: James Clark james.clark@arm.com
Reviewed-by: Leo Yan leo.yan@linaro.org
tools/perf/util/cs-etm.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 796a065a500e..8b95fb3c4d7b 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -1553,6 +1553,7 @@ static int cs_etm__flush(struct cs_etm_queue *etmq, goto swap_packet; if (etmq->etm->synth_opts.last_branch &&
u64 addr;etmq->etm->synth_opts.instructions && tidq->prev_packet->sample_type == CS_ETM_RANGE) {
@@ -1610,6 +1611,7 @@ static int cs_etm__end_block(struct cs_etm_queue *etmq, * the trace. */ if (etmq->etm->synth_opts.last_branch &&
u64 addr;etmq->etm->synth_opts.instructions && tidq->prev_packet->sample_type == CS_ETM_RANGE) {
2.28.0