Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: 8514/1: remove duplicate definitions of __vectors_start and __stubs_start

Commit b9b32bf70f2f ("ARM: use linker magic for vectors and vector stubs")
introduced new global definitions of __vectors_start and __stubs_start,
and changed the existing ones to have internal linkage only. However, these
symbols are still visible to kallsyms, and due to the way the .vectors and
.stubs sections are emitted at the base of the VMA space, these duplicate
definitions have conflicting values.

$ nm -n vmlinux |grep -E __vectors|__stubs
00000000 t __vectors_start
00001000 t __stubs_start
c0e77000 T __vectors_start
c0e77020 T __stubs_start

This is completely harmless by itself, since the wrong values are local
symbols that cannot be referenced by other object files directly. However,
since these symbols are also listed in the kallsyms symbol table in some
cases (i.e., CONFIG_KALLSYMS_ALL=y and CONFIG_XIP_KERNEL=y), having these
conflicting values can be confusing. So either remove them, or make them
strictly local.

Acked-by: Chris Brandt <chris.brandt@renesas.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Ard Biesheuvel and committed by
Russell King
b48da558 538bf469

+2 -3
+2 -3
arch/arm/kernel/entry-armv.S
··· 1064 1064 .endm 1065 1065 1066 1066 .section .stubs, "ax", %progbits 1067 - __stubs_start: 1068 1067 @ This must be the first word 1069 1068 .word vector_swi 1070 1069 ··· 1205 1206 .equ vector_fiq_offset, vector_fiq 1206 1207 1207 1208 .section .vectors, "ax", %progbits 1208 - __vectors_start: 1209 + .L__vectors_start: 1209 1210 W(b) vector_rst 1210 1211 W(b) vector_und 1211 - W(ldr) pc, __vectors_start + 0x1000 1212 + W(ldr) pc, .L__vectors_start + 0x1000 1212 1213 W(b) vector_pabt 1213 1214 W(b) vector_dabt 1214 1215 W(b) vector_addrexcptn