Re: [RFC PATCH v3 11/12] powerpc: Remove unreachable() from WARN_ON()
From: Segher Boessenkool <hidden>
Date: 2022-06-30 16:07:33
Also in:
linux-arm-kernel, lkml
From: Segher Boessenkool <hidden>
Date: 2022-06-30 16:07:33
Also in:
linux-arm-kernel, lkml
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