linux-yocto/scripts/mksysmap
Masahiro Yamada ca09bf48f9 scripts/kallsyms: exclude symbols generated by itself dynamically
Drop the symbols generated by scripts/kallsyms itself automatically
instead of maintaining the symbol list manually.

Pass the kallsyms object from the previous kallsyms step (if it exists)
as the third parameter of scripts/mksysmap, which will weed out the
generated symbols from the input to the next kallsyms step.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2023-04-17 11:03:56 +09:00

1.8 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

CRC from modversions

/ _crc/d

EXPORT_SYMBOL (symbol name)

/ _kstrtab/d

EXPORT_SYMBOL (namespace)

/ _kstrtabns/d

---------------------------------------------------------------------------

Ignored symbols (exact match)

(do not forget a space before and '$' after each pattern)

for LoongArch?

/ L0$/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) "