Re: [RFC PATCH v3 11/12] powerpc: Remove unreachable() from WARN_ON()
From: Segher Boessenkool
Date: Thu Jun 30 2022 - 12:07:33 EST
On Thu, Jun 30, 2022 at 04:07:47PM +0530, Naveen N. Rao wrote:
> Objtool classifies 'ud2' as INSN_BUG, and 'int3' as INSN_TRAP. In x86
> BUG(), there is no need for an annotation since objtool assumes that
> 'ud2' terminates control flow. But, for __WARN_FLAGS(), since 'ud2' is
> used, an explicit annotate_reachable() is needed. That's _reachable_, to
> indicate that the control flow can continue with the next instruction.
>
> On powerpc, we should (eventually) classify all trap variants as
> INSN_TRAP. Even in the absence of that classification today, objtool
> assumes that control flow continues with the next instruction. With your
> work to utilize asm goto for __WARN_FLAGS(), with no extra instructions
> being generated, I think it is appropriate to just use
> __builtin_unreachable() and to not use the annotation.
>
> In any case, we are only hitting this since gcc is generating a 'bl' due
> to that annotation. We are not yet enabling full objtool validation on
> powerpc, so I think we can revisit this at that point.
See also <https://gcc.gnu.org/PR99299> that asks for a __builtin_trap()
variant that does not terminate control flow ("that is recoverable").
Segher