1#!/bin/sed -f
2# SPDX-License-Identifier: GPL-2.0-only
3#
4# sed script to filter out symbols that are not needed for System.map,
5# or not suitable for kallsyms. The input should be 'nm -n <file>'.
6#
7# System.map is used by module-init tools and some debugging
8# tools to retrieve the actual addresses of symbols in the kernel.
9#
10# readprofile starts reading symbols when _stext is found, and
11# continue until it finds a symbol which is not either of 'T', 't',
12# 'W' or 'w'.
13#
14# ---------------------------------------------------------------------------
15# Ignored symbol types
16#
17
18# a: local absolute symbols
19# N: debugging symbols
20# U: undefined global symbols
21# w: local weak symbols
22/ [aNUw] /d
23
24# ---------------------------------------------------------------------------
25# Ignored prefixes
26#  (do not forget a space before each pattern)
27
28# local symbols for ARM, MIPS, etc.
29/ \\$/d
30
31# local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc.
32/ \.L/d
33
34# arm64 EFI stub namespace
35/ __efistub_/d
36
37# arm64 local symbols in PIE namespace
38/ __pi_\\$/d
39/ __pi_\.L/d
40
41# arm64 local symbols in non-VHE KVM namespace
42/ __kvm_nvhe_\\$/d
43/ __kvm_nvhe_\.L/d
44
45# lld arm/aarch64/mips thunks
46/ __[[:alnum:]]*Thunk_/d
47
48# CFI type identifiers
49/ __kcfi_typeid_/d
50/ __kvm_nvhe___kcfi_typeid_/d
51/ __pi___kcfi_typeid_/d
52
53# CRC from modversions
54/ __crc_/d
55
56# EXPORT_SYMBOL (symbol name)
57/ __kstrtab_/d
58
59# EXPORT_SYMBOL (namespace)
60/ __kstrtabns_/d
61
62# ---------------------------------------------------------------------------
63# Ignored suffixes
64#  (do not forget '$' after each pattern)
65
66# arm
67/_from_arm$/d
68/_from_thumb$/d
69/_veneer$/d
70
71# ---------------------------------------------------------------------------
72# Ignored symbols (exact match)
73#  (do not forget a space before and '$' after each pattern)
74
75# for LoongArch?
76/ L0$/d
77
78# ppc
79/ _SDA_BASE_$/d
80/ _SDA2_BASE_$/d
81
82# ---------------------------------------------------------------------------
83# Ignored patterns
84#  (symbols that contain the pattern are ignored)
85
86# ppc stub
87/\.long_branch\./d
88/\.plt_branch\./d
89