mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

While the GCC and Clang compilers already define __ASSEMBLER__ automatically when compiling assembly code, __ASSEMBLY__ is a macro that only gets defined by the Makefiles in the kernel. This can be very confusing when switching between userspace and kernelspace coding, or when dealing with UAPI headers that rather should use __ASSEMBLER__ instead. So let's standardize on the __ASSEMBLER__ macro that is provided by the compilers now. This is mostly a mechanical patch (done with a simple "sed -i" statement), with some manual tweaks in <asm/frame.h>, <asm/hw_irq.h> and <asm/setup.h> that mentioned this macro in comments with some missing underscores. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Brian Gerst <brgerst@gmail.com> Cc: Juergen Gross <jgross@suse.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: https://lore.kernel.org/r/20250314071013.1575167-38-thuth@redhat.com
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_JUMP_LABEL_H
|
|
#define _ASM_X86_JUMP_LABEL_H
|
|
|
|
#define HAVE_JUMP_LABEL_BATCH
|
|
|
|
#include <asm/asm.h>
|
|
#include <asm/nops.h>
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
#include <linux/stringify.h>
|
|
#include <linux/types.h>
|
|
|
|
#define JUMP_TABLE_ENTRY(key, label) \
|
|
".pushsection __jump_table, \"aw\" \n\t" \
|
|
_ASM_ALIGN "\n\t" \
|
|
".long 1b - . \n\t" \
|
|
".long " label " - . \n\t" \
|
|
_ASM_PTR " " key " - . \n\t" \
|
|
".popsection \n\t"
|
|
|
|
/* This macro is also expanded on the Rust side. */
|
|
#ifdef CONFIG_HAVE_JUMP_LABEL_HACK
|
|
#define ARCH_STATIC_BRANCH_ASM(key, label) \
|
|
"1: jmp " label " # objtool NOPs this \n\t" \
|
|
JUMP_TABLE_ENTRY(key " + 2", label)
|
|
#else /* !CONFIG_HAVE_JUMP_LABEL_HACK */
|
|
#define ARCH_STATIC_BRANCH_ASM(key, label) \
|
|
"1: .byte " __stringify(BYTES_NOP5) "\n\t" \
|
|
JUMP_TABLE_ENTRY(key, label)
|
|
#endif /* CONFIG_HAVE_JUMP_LABEL_HACK */
|
|
|
|
static __always_inline bool arch_static_branch(struct static_key * const key, const bool branch)
|
|
{
|
|
asm goto(ARCH_STATIC_BRANCH_ASM("%c0 + %c1", "%l[l_yes]")
|
|
: : "i" (key), "i" (branch) : : l_yes);
|
|
|
|
return false;
|
|
l_yes:
|
|
return true;
|
|
}
|
|
|
|
static __always_inline bool arch_static_branch_jump(struct static_key * const key, const bool branch)
|
|
{
|
|
asm goto("1:"
|
|
"jmp %l[l_yes]\n\t"
|
|
JUMP_TABLE_ENTRY("%c0 + %c1", "%l[l_yes]")
|
|
: : "i" (key), "i" (branch) : : l_yes);
|
|
|
|
return false;
|
|
l_yes:
|
|
return true;
|
|
}
|
|
|
|
extern int arch_jump_entry_size(struct jump_entry *entry);
|
|
|
|
#endif /* __ASSEMBLER__ */
|
|
|
|
#endif
|