On Tue, Jun 02, 2020 at 03:27:25PM +1000, Jordan Niethe wrote: > There are quite a few places where instructions are printed, this is > done using a '%x' format specifier. With the introduction of prefixed > instructions, this does not work well. Currently in these places, > ppc_inst_val() is used for the value for %x so only the first word of > prefixed instructions are printed. > > When the instructions are word instructions, only a single word should > be printed. For prefixed instructions both the prefix and suffix should > be printed. To accommodate both of these situations, instead of a '%x' > specifier use '%s' and introduce a helper, __ppc_inst_as_str() which > returns a char *. The char * __ppc_inst_as_str() returns is buffer that > is passed to it by the caller. > > It is cumbersome to require every caller of __ppc_inst_as_str() to now > declare a buffer. To make it more convenient to use __ppc_inst_as_str(), > wrap it in a macro that uses a compound statement to allocate a buffer > on the caller's stack before calling it. > > Signed-off-by: Jordan Niethe <jniet...@gmail.com> Acked-by: Segher Boessenkool <seg...@kernel.crashing.org>
> +#define PPC_INST_STR_LEN sizeof("0x00000000 0x00000000") sizeof is not a function or anything function-like; it's just an operator, like (unary) "+" or "-" or dereference "*". The parentheses are completely redundant here. And it kind of matters, as written a reader might think that a string object is actually constructed here. But, so very many people do this, I'm not going to fight this fight ;-) Segher