mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 06:33:34 +00:00
8f58c571bf
The initial aim is to silence the following objtool warnings: arch/loongarch/kernel/fpu.o: warning: objtool: _save_fp_context() falls through to next function fault() arch/loongarch/kernel/fpu.o: warning: objtool: _restore_fp_context() falls through to next function fault() arch/loongarch/kernel/fpu.o: warning: objtool: _save_lsx_context() falls through to next function fault() arch/loongarch/kernel/fpu.o: warning: objtool: _restore_lsx_context() falls through to next function fault() arch/loongarch/kernel/fpu.o: warning: objtool: _save_lasx_context() falls through to next function fault() arch/loongarch/kernel/fpu.o: warning: objtool: _restore_lasx_context() falls through to next function fault() Currently, SYM_FUNC_START()/SYM_FUNC_END() defines the symbol 'fault' as SYM_T_FUNC which is STT_FUNC, the objtool warnings are generated through the following code: tools/objtool/include/objtool/check.h: static inline struct symbol *insn_func(struct instruction *insn) { struct symbol *sym = insn->sym; if (sym && sym->type != STT_FUNC) sym = NULL; return sym; } tools/objtool/check.c: static int validate_branch(struct objtool_file *file, struct symbol *func, struct instruction *insn, struct insn_state state) { ... if (func && insn_func(insn) && func != insn_func(insn)->pfunc) { ... WARN("%s() falls through to next function %s()", func->name, insn_func(insn)->name); return 1; } ... } We can see that the fixup can be a local label in the following code: arch/loongarch/include/asm/asm-extable.h: .pushsection __ex_table, "a"; \ .balign 4; \ .long ((insn) - .); \ .long ((fixup) - .); \ .short (type); \ .short (data); \ .popsection; .macro _asm_extable, insn, fixup __ASM_EXTABLE_RAW(\insn, \fixup, EX_TYPE_FIXUP, 0) .endm Like arch/loongarch/lib/*.S, just define the symbol 'fault' as a local label in fpu.S. Before: $ readelf -s arch/loongarch/kernel/fpu.o | awk -F: /fault/'{print $2}' 000000000000053c 8 FUNC GLOBAL DEFAULT 1 fault After: $ readelf -s arch/loongarch/kernel/fpu.o | awk -F: /fault/'{print $2}' 000000000000053c 0 NOTYPE LOCAL DEFAULT 1 .L_fpu_fault Co-developed-by: Youling Tang <tangyouling@loongson.cn> Signed-off-by: Youling Tang <tangyouling@loongson.cn> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> |
||
---|---|---|
.. | ||
.gitignore | ||
access-helper.h | ||
acpi.c | ||
alternative.c | ||
asm-offsets.c | ||
cacheinfo.c | ||
cpu-probe.c | ||
crash_dump.c | ||
dma.c | ||
efi-header.S | ||
efi.c | ||
elf.c | ||
entry.S | ||
env.c | ||
fpu.S | ||
ftrace_dyn.c | ||
ftrace.c | ||
genex.S | ||
head.S | ||
hw_breakpoint.c | ||
idle.c | ||
image-vars.h | ||
inst.c | ||
io.c | ||
irq.c | ||
jump_label.c | ||
kfpu.c | ||
kprobes.c | ||
machine_kexec.c | ||
Makefile | ||
mcount_dyn.S | ||
mcount.S | ||
mem.c | ||
module-sections.c | ||
module.c | ||
numa.c | ||
perf_event.c | ||
perf_regs.c | ||
proc.c | ||
process.c | ||
ptrace.c | ||
relocate_kernel.S | ||
relocate.c | ||
reset.c | ||
rethook_trampoline.S | ||
rethook.c | ||
rethook.h | ||
setup.c | ||
signal.c | ||
smp.c | ||
stacktrace.c | ||
switch.S | ||
syscall.c | ||
sysrq.c | ||
time.c | ||
topology.c | ||
traps.c | ||
unaligned.c | ||
unwind_guess.c | ||
unwind_prologue.c | ||
unwind.c | ||
uprobes.c | ||
vdso.c | ||
vmlinux.lds.S |