[PATCH v5 18/21] powerpc64: Add prefixed instructions to instruction data type
Christophe Leroy
christophe.leroy at c-s.fr
Mon Apr 6 20:25:27 AEST 2020
Le 06/04/2020 à 11:52, Alistair Popple a écrit :
[...]
>> @@ -32,14 +76,31 @@ static inline struct ppc_inst ppc_inst_swab(struct
>> ppc_inst x) return ppc_inst(swab32(ppc_inst_val(x)));
>> }
>>
>> +static inline u32 ppc_inst_val(struct ppc_inst x)
>> +{
>> + return x.val;
>> +}
>> +
>> static inline struct ppc_inst ppc_inst_read(const struct ppc_inst *ptr)
>> {
>> return *ptr;
>> }
>>
>> +static inline void ppc_inst_write(struct ppc_inst *ptr, struct ppc_inst x)
>> +{
>> + *ptr = x;
>> +}
>> +
>> +#endif /* __powerpc64__ */
>> +
>> static inline bool ppc_inst_equal(struct ppc_inst x, struct ppc_inst y)
>> {
>> return !memcmp(&x, &y, sizeof(struct ppc_inst));
>> }
>
> Apologies for not picking this up earlier, I was hoping to get to the bottom
> of the issue I was seeing before you sent out v5. However the above definition
> of instruction equality does not seem correct because it does not consider the
> case when an instruction is not prefixed - a non-prefixed instruction should be
> considered equal if the first 32-bit opcode/value is the same. Something like:
>
> if (ppc_inst_prefixed(x) != ppc_inst_prefixed(y))
> return false;
> else if (ppc_inst_prefixed(x))
> return !memcmp(&x, &y, sizeof(struct ppc_inst));
Are we sure memcmp() is a good candidate for the comparison ? Can we do
simpler ? Especially, I understood a prefixed instruction is a 64 bits
properly aligned instruction, can we do a simple u64 compare ? Or is GCC
intelligent enough to do that without calling memcmp() function which is
heavy ?
> else
> return x.val == y.val;
>
> This was causing failures in ftrace_modify_code() as it would falsely detect
> two non-prefixed instructions as being not equal due to differences in the suffix.
>
Christophe
More information about the Linuxppc-dev
mailing list