mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-19 03:59:45 +02:00

scripts/kallsyms.c maintains compiler-generated symbols, but we end up with something similar in scripts/mksysmap to avoid the "Inconsistent kallsyms data" error. For example, commitc17a253870
("mksysmap: Fix the mismatch of 'L0' symbols in System.map"). They were separately maintained prior to commit94ff2f63d6
("kbuild: reuse mksysmap output for kallsyms"). Now that scripts/kallsyms.c parses the output of scripts/mksysmap, it makes more sense to collect all the ignored patterns to mksysmap. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
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 non-VHE KVM namespace
/ _kvm_nvhe$/d / _kvm_nvhe.L/d
arm64 lld
/ _AArch64ADRPThunk/d
arm lld
/ _ARMV5PILongThunk/d / _ARMV7PILongThunk/d / _ThumbV7PILongThunk/d
mips lld
/ _LA25Thunk/d / _microLA25Thunk/d
CFI type identifiers
/ _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)
"