[PATCH] perf scripts python arm-cs-trace-disasm.py: Skip disasm if address continuity is broken

James Clark james.clark at linaro.org
Fri Aug 30 02:58:19 PDT 2024



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.



More information about the linux-arm-kernel mailing list