Re: [PATCH v2 3/9] objtool: Limit unreachable warnings to once per function

From: Peter Zijlstra
Date: Thu Apr 13 2023 - 04:01:25 EST


On Wed, Apr 12, 2023 at 12:03:18PM -0700, Josh Poimboeuf wrote:

> diff --git a/tools/objtool/include/objtool/warn.h b/tools/objtool/include/objtool/warn.h
> index b1c920dc9516..4ef9b278e5fd 100644
> --- a/tools/objtool/include/objtool/warn.h
> +++ b/tools/objtool/include/objtool/warn.h
> @@ -55,7 +55,10 @@ static inline char *offstr(struct section *sec, unsigned long offset)
>
> #define WARN_INSN(insn, format, ...) \
> ({ \
> - WARN_FUNC(format, insn->sec, insn->offset, ##__VA_ARGS__); \
> + if (!insn->sym || !insn->sym->warned) \
> + WARN_FUNC(format, insn->sec, insn->offset, ##__VA_ARGS__);\
> + if (insn->sym) \
> + insn->sym->warned = 1; \
> })

Do we want to write that like:

#define WARN_INSN(insn, format, ...) \
({ \
struct instruction *_insn = (insn); \
if (!_insn->sym || !_insn->sym->warned) \
WARN_FUNC(format, _insn->sec, _insn->offset, ##__VA_ARGS__);\
if (_insn->sym) \
_insn->sym->warned = 1; \
})

instead ?