mirror of https://gitee.com/openkylin/linux.git
jump_labels: Mark __jump_label_transform() as __always_inlined to work around aggressive compiler un-inlining
In randconfig testing, certain UBSAN and CC Kconfig combinations with GCC 10.3.0: CONFIG_X86_32=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_UBSAN=y # CONFIG_UBSAN_TRAP is not set # CONFIG_UBSAN_BOUNDS is not set CONFIG_UBSAN_SHIFT=y # CONFIG_UBSAN_DIV_ZERO is not set CONFIG_UBSAN_UNREACHABLE=y CONFIG_UBSAN_BOOL=y # CONFIG_UBSAN_ENUM is not set # CONFIG_UBSAN_ALIGNMENT is not set # CONFIG_UBSAN_SANITIZE_ALL is not set ... produce this build warning (and build error if CONFIG_SECTION_MISMATCH_WARN_ONLY=y is set): WARNING: modpost: vmlinux.o(.text+0x4c1cc): Section mismatch in reference from the function __jump_label_transform() to the function .init.text:text_poke_early() The function __jump_label_transform() references the function __init text_poke_early(). This is often because __jump_label_transform lacks a __init annotation or the annotation of text_poke_early is wrong. ERROR: modpost: Section mismatches detected. The problem is that __jump_label_transform() gets uninlined by GCC, despite there being only a single local scope user of the 'static inline' function. Mark the function __always_inline instead, to work around this compiler bug/artifact. Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
7fef2edf7c
commit
e48a12e546
|
@ -79,9 +79,10 @@ __jump_label_patch(struct jump_entry *entry, enum jump_label_type type)
|
||||||
return (struct jump_label_patch){.code = code, .size = size};
|
return (struct jump_label_patch){.code = code, .size = size};
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void __jump_label_transform(struct jump_entry *entry,
|
static __always_inline void
|
||||||
enum jump_label_type type,
|
__jump_label_transform(struct jump_entry *entry,
|
||||||
int init)
|
enum jump_label_type type,
|
||||||
|
int init)
|
||||||
{
|
{
|
||||||
const struct jump_label_patch jlp = __jump_label_patch(entry, type);
|
const struct jump_label_patch jlp = __jump_label_patch(entry, type);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue