linux-stable/arch/loongarch/kernel
Tiezhu Yang 8f58c571bf LoongArch: Define symbol 'fault' as a local label in fpu.S
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>
2023-09-06 22:53:10 +08:00
..
.gitignore LoongArch: Add build infrastructure 2022-06-03 20:09:27 +08:00
access-helper.h LoongArch: Add exception/interrupt handling 2022-06-03 20:09:28 +08:00
acpi.c LoongArch: Add SMT (Simultaneous Multi-Threading) support 2023-06-29 20:58:43 +08:00
alternative.c LoongArch: Use common function sign_extend64() 2023-01-17 11:42:16 +08:00
asm-offsets.c LoongArch: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL 2023-06-20 18:38:38 -04:00
cacheinfo.c LoongArch: Refactor cache probe and flush methods 2022-10-12 16:36:14 +08:00
cpu-probe.c LoongArch: Introduce hardware page table walker 2023-06-29 20:58:44 +08:00
crash_dump.c LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
dma.c LoongArch: Use acpi_arch_dma_setup() and remove ARCH_HAS_PHYS_TO_DMA 2022-09-24 18:39:21 +02:00
efi-header.S LoongArch: Calculate various sizes in the linker script 2023-06-29 20:58:42 +08:00
efi.c LoongArch changes for v6.2 2022-12-19 08:23:27 -06:00
elf.c LoongArch: Add ELF and module support 2022-06-03 20:09:28 +08:00
entry.S LoongArch: Mark some assembler symbols as non-kprobe-able 2023-02-25 22:12:17 +08:00
env.c LoongArch: Add FDT booting support from efi system table 2022-12-14 08:41:53 +08:00
fpu.S LoongArch: Define symbol 'fault' as a local label in fpu.S 2023-09-06 22:53:10 +08:00
ftrace_dyn.c LoongArch: ftrace: Add direct call support 2023-05-01 17:19:53 +08:00
ftrace.c LoongArch/ftrace: Add basic support 2022-12-14 08:41:53 +08:00
genex.S LoongArch: Relay BCE exceptions to userland as SIGSEGV with si_code=SEGV_BNDERR 2023-05-01 17:19:27 +08:00
head.S LoongArch: Calculate various sizes in the linker script 2023-06-29 20:58:42 +08:00
hw_breakpoint.c LoongArch: Fix hw_breakpoint_control() for watchpoints 2023-08-26 22:21:57 +08:00
idle.c arch/idle: Change arch_cpu_idle() behavior: always exit with IRQs disabled 2023-01-13 11:48:15 +01:00
image-vars.h efi: loongarch: Drop exports of unused string routines 2022-11-09 12:42:02 +01:00
inst.c LoongArch: Add larch_insn_gen_break() to generate break insns 2023-06-29 20:58:44 +08:00
io.c LoongArch: Add misc common routines 2022-06-03 20:09:28 +08:00
irq.c LoongArch: Clean up the architectural interrupt definitions 2023-05-01 17:19:10 +08:00
jump_label.c LoongArch: Add jump-label implementation 2023-06-29 20:58:44 +08:00
kfpu.c LoongArch: Provide kernel fpu functions 2023-05-01 17:19:27 +08:00
kprobes.c LoongArch: Use larch_insn_gen_break() for kprobes 2023-06-29 20:58:44 +08:00
machine_kexec.c LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
Makefile LoongArch: Add uprobes support 2023-06-29 20:58:44 +08:00
mcount_dyn.S LoongArch: Remove unneeded #include <asm/export.h> 2023-08-25 23:40:26 +08:00
mcount.S LoongArch: Replace #include <asm/export.h> with #include <linux/export.h> 2023-08-25 23:40:26 +08:00
mem.c LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
module-sections.c LoongArch: modules/ftrace: Initialize PLT at load time 2022-12-14 08:41:54 +08:00
module.c LoongArch: modules/ftrace: Initialize PLT at load time 2022-12-14 08:41:54 +08:00
numa.c LoongArch: Use static defined zero page rather than allocated 2023-09-06 22:53:10 +08:00
perf_event.c LoongArch: Fix perf event id calculation 2023-06-15 14:35:52 +08:00
perf_regs.c LoongArch: Add perf events support 2022-10-12 16:36:14 +08:00
proc.c LoongArch: Introduce hardware page table walker 2023-06-29 20:58:44 +08:00
process.c LoongArch: Put the body of play_dead() into arch_cpu_idle_dead() 2023-08-25 23:40:38 +08:00
ptrace.c LoongArch: Ensure FP/SIMD registers in the core dump file is up to date 2023-08-26 22:21:57 +08:00
relocate_kernel.S LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
relocate.c LoongArch: Add support for kernel address space layout randomization (KASLR) 2023-02-25 22:12:17 +08:00
reset.c LoongArch: Add hibernation (ACPI S4) support 2022-12-14 08:41:53 +08:00
rethook_trampoline.S LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
rethook.c LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
rethook.h LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
setup.c LoongArch: Fix CMDLINE_EXTEND and CMDLINE_BOOTLOADER handling 2023-07-28 10:30:42 +08:00
signal.c LoongArch: Add vector extensions support 2023-06-29 20:58:43 +08:00
smp.c LoongArch: Put the body of play_dead() into arch_cpu_idle_dead() 2023-08-25 23:40:38 +08:00
stacktrace.c LoongArch: Check unwind_error() in arch_stack_walk() 2023-04-19 12:07:27 +08:00
switch.S LoongArch: Add basic STACKPROTECTOR support 2022-12-14 08:41:53 +08:00
syscall.c LoongArch: Add system call support 2022-06-03 20:09:28 +08:00
sysrq.c LoongArch: Add SysRq-x (TLB Dump) support 2022-10-12 16:36:14 +08:00
time.c loongarch: Provide noinstr sched_clock_read() 2023-06-05 21:11:05 +02:00
topology.c LoongArch: Do not create sysfs control file for io master CPUs 2022-10-12 16:36:08 +08:00
traps.c LoongArch: Return earlier in die() if notify_die() returns NOTIFY_STOP 2023-08-25 23:40:26 +08:00
unaligned.c LoongArch: Delete unnecessary debugfs checking 2023-06-29 20:58:42 +08:00
unwind_guess.c LoongArch: Strip guess unwinder out from prologue unwinder 2023-01-17 11:42:16 +08:00
unwind_prologue.c LoongArch: Check unwind_error() in arch_stack_walk() 2023-04-19 12:07:27 +08:00
unwind.c LoongArch: Check unwind_error() in arch_stack_walk() 2023-04-19 12:07:27 +08:00
uprobes.c LoongArch: Add uprobes support 2023-06-29 20:58:44 +08:00
vdso.c LoongArch: Add support to clone a time namespace 2023-06-29 20:58:43 +08:00
vmlinux.lds.S LoongArch: Calculate various sizes in the linker script 2023-06-29 20:58:42 +08:00