On 23/08/2024 10:57 am, Ganapatrao Kulkarni wrote:
Hi James/Mike,
On 23-08-2024 02:33 pm, James Clark wrote:
On 19/08/2024 11:59 am, Mike Leach wrote:
Hi,
A new branch of OpenCSD is available - ocsd-consistency-checks-1.5.4-rc1
Testing I managed to do confirms the N atom on unconditional branches appear to work. I do not have a test case for the range discontinuities.
The checks are enabled using operation flags on decoder creation. See the docs for details.
Mike
Hi Mike,
I tested the new OpenCSD and I don't see the error anymore in the disassembly script. I'm not sure if we need to go any further and add the backwards check, it looks like just a later symptom and the checks that you've added already prevent it.
If you release a new version I can send the perf patch. I was going to use these flags if that looks right to you? As far as I know that's the set that can be always on and won't fail on bad hardware?
I also assumed that ETM4_OPFLG_PKTDEC_AA64_OPCODE_CHK can be given even for etmv3 and it's just a nop?
diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c index e917985bbbe6..90967fd807e6 100644 --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c @@ -685,9 +685,14 @@ cs_etm_decoder__create_etm_decoder(struct cs_etm_decoder_params *d_params, return 0;
if (d_params->operation == CS_ETM_OPERATION_DECODE) { + int decode_flags = OCSD_CREATE_FLG_FULL_DECODER; +#ifdef OCSD_OPFLG_N_UNCOND_DIR_BR_CHK + decode_flags |= OCSD_OPFLG_N_UNCOND_DIR_BR_CHK | OCSD_OPFLG_CHK_RANGE_CONTINUE | + ETM4_OPFLG_PKTDEC_AA64_OPCODE_CHK; +#endif if (ocsd_dt_create_decoder(decoder->dcd_tree, decoder->decoder_name, - OCSD_CREATE_FLG_FULL_DECODER, + decode_flags, trace_config, &csid)) return -1;
I tried Mike's branch with above James's patch and still the segfault is happening to us.
Looks like the Perf bug is only on the timestamped decode path, you can force timeless as a workaround. Timestamps aren't used by the disassembly script anyway:
--itrace=Zb
Full command:
perf script -i ./kcore -s python:tools/perf/scripts/python/arm-cs-\ trace-disasm.py --itrace=Zb -- -k ./kcore/kcore_dir/kcore
You can also disable timestamps when recording then you don't need the itrace option. This will save you a lot of data anyway.
But I'm still working on the proper fix.