Messages in this thread Patch in this message | | | Date | Mon, 15 Jan 2018 17:44:31 +0100 | From | Peter Zijlstra <> | Subject | [PATCH 3/4] x86/jump_label: Implement arch_static_assert() |
| |
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 <jpoimboe@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Borislav Petkov <bp@alien8.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> --- 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"); +} + #ifdef CONFIG_X86_64 typedef u64 jump_label_t; #else
| |