On Mon, Jan 15, 2018 at 05:44:31PM +0100, Peter Zijlstra wrote:
> Implement the static (branch) assertion. It simply emits the address
> of the next instruction into a special section which objtool will read
> and validate against either __jump_table or .altinstructions.
> 
> Use like:
> 
>       if (static_branch_likely(_key)) {
>               arch_static_assert();
>               /* do stuff */
>       }
> 
> Or
> 
>       if (static_cpu_has(_feat)) {
>               arch_static_assert();
>               /* do stuff */
>       }
> 
> Cc: Josh Poimboeuf <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Borislav Petkov <[email protected]>
> Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
> ---
>  arch/x86/include/asm/jump_label.h |    9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> --- a/arch/x86/include/asm/jump_label.h
> +++ b/arch/x86/include/asm/jump_label.h
> @@ -62,6 +62,15 @@ static __always_inline bool arch_static_
>       return true;
>  }
>  
> +static __always_inline void arch_static_assert(void)
> +{
> +     asm volatile ("1:\n\t"
> +                   ".pushsection .discard.jump_assert, \"aw\" \n\t"
> +                   _ASM_ALIGN  "\n\t"
> +                   _ASM_PTR "1b \n\t"
> +                   ".popsection \n\t");
> +}
> +

This needs a nice comment about what exactly it asserts.

And also, people without objtool enabled (i.e., no ORC or livepatch)
won't see the assertion.  Do we care about those people? :-)

-- 
Josh

Reply via email to