mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 13:25:20 +02:00

[ Upstream commita951884d82
] lld is now able to build ARMv4 and ARMv4T kernels, which means it can generate thunks for those (__ARMv4PILongThunk_*, __ARMv4PILongBXThunk_*) that can interfere with kallsyms table generation since they do not get ignore like the corresponding ARMv5+ ones are: Inconsistent kallsyms data Try "make KALLSYMS_EXTRA_PASS=1" as a workaround Replace the hardcoded list of thunk symbols with a more general regex that covers this one along with future symbols that follow the same pattern. Fixes:5eb6e28043
("ARM: 9289/1: Allow pre-ARMv5 builds with ld.lld 16.0.0 and newer") Fixes:efe6e30680
("kallsyms: fix nonconverging kallsyms table with lld") Suggested-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
2.6 KiB
Executable File
2.6 KiB
Executable File
#!/bin/sh -x
Based on the vmlinux file create the System.map file
System.map is used by module-init tools and some debugging
tools to retrieve the actual addresses of symbols in the kernel.
Usage
mksysmap vmlinux System.map [exclude]
Generate System.map (actual filename passed as second argument)
The following refers to the symbol type as per nm(1).
readprofile starts reading symbols when _stext is found, and
continue until it finds a symbol which is not either of 'T', 't',
'W' or 'w'.
${NM} -n ${1} | sed >${2} -e "
---------------------------------------------------------------------------
Ignored symbol types
a: local absolute symbols
N: debugging symbols
U: undefined global symbols
w: local weak symbols
/ [aNUw] /d
---------------------------------------------------------------------------
Ignored prefixes
(do not forget a space before each pattern)
local symbols for ARM, MIPS, etc.
/ \$/d
local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc.
/ .L/d
arm64 EFI stub namespace
/ _efistub/d
arm64 local symbols in PIE namespace
/ _pi\$/d / _pi.L/d
arm64 local symbols in non-VHE KVM namespace
/ _kvm_nvhe\$/d / _kvm_nvhe.L/d
lld arm/aarch64/mips thunks
/ _:alnum:*Thunk/d
CFI type identifiers
/ _kcfi_typeid/d / _kvm_nvhe___kcfi_typeid/d / _pi___kcfi_typeid/d
CRC from modversions
/ _crc/d
EXPORT_SYMBOL (symbol name)
/ _kstrtab/d
EXPORT_SYMBOL (namespace)
/ _kstrtabns/d
---------------------------------------------------------------------------
Ignored suffixes
(do not forget '$' after each pattern)
arm
/_from_arm$/d /_from_thumb$/d /_veneer$/d
---------------------------------------------------------------------------
Ignored symbols (exact match)
(do not forget a space before and '$' after each pattern)
for LoongArch?
/ L0$/d
ppc
/ SDA_BASE$/d / SDA2_BASE$/d
---------------------------------------------------------------------------
Ignored patterns
(symbols that contain the pattern are ignored)
ppc stub
/.long_branch./d /.plt_branch./d
---------------------------------------------------------------------------
Ignored kallsyms symbols
If the 3rd parameter exists, symbols from it will be omitted from the output.
This makes kallsyms have the identical symbol lists in the step 1 and 2.
Without this, the step2 would get new symbols generated by scripts/kallsyms.c
when CONFIG_KALLSYMS_ALL is enabled. That might require one more pass.
$(if [ $# -ge 3 ]; then ${NM} {3} | sed -n '/ U /!s:.* \([^ ]*\)
:/ \1$/d:p'; fi)
"