mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 05:15:23 +02:00

The backslash characters escaping '$' in the command to sed (intended to prevent it from interpreting '$' as "end-of-line") are currently being consumed by the Shell (where they mean that sh should not evaluate what follows '$' as a variable name). This means that sed -e "/ \$/d" executes the script / $/d instead of the intended / \$/d So escape twice in mksysmap any '$' that actually needs to reach sed escaped so that the backslash survives the Shell. Fixes:c4802044a0
("scripts/mksysmap: use sed with in-line comments") Fixes:320e7c9d44
("scripts/kallsyms: move compiler-generated symbol patterns to mksysmap") Signed-off-by: Pierre-Clément Tosi <ptosi@google.com> Signed-off-by: Masahiro Yamada <masahiroy@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 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)
"