xref: /linux/scripts/mksysmap (revision 71025b8565a383223ea2d94325db37cdabbcc453)
11da177e4SLinus Torvalds#!/bin/sh -x
21da177e4SLinus Torvalds# Based on the vmlinux file create the System.map file
31da177e4SLinus Torvalds# System.map is used by module-init tools and some debugging
4943ffb58SAdrian Bunk# tools to retrieve the actual addresses of symbols in the kernel.
51da177e4SLinus Torvalds#
61da177e4SLinus Torvalds# Usage
7ca09bf48SMasahiro Yamada# mksysmap vmlinux System.map [exclude]
81da177e4SLinus Torvalds
91da177e4SLinus Torvalds
101da177e4SLinus Torvalds#####
111da177e4SLinus Torvalds# Generate System.map (actual filename passed as second argument)
12e9f76363SMasahiro Yamada# The following refers to the symbol type as per nm(1).
131da177e4SLinus Torvalds
141da177e4SLinus Torvalds# readprofile starts reading symbols when _stext is found, and
151da177e4SLinus Torvalds# continue until it finds a symbol which is not either of 'T', 't',
16c1346169SMasahiro Yamada# 'W' or 'w'.
17c1346169SMasahiro Yamada#
18a2833d1bSMasahiro Yamada
19c4802044SMasahiro Yamada${NM} -n ${1} | sed >${2} -e "
20c4802044SMasahiro Yamada# ---------------------------------------------------------------------------
21c4802044SMasahiro Yamada# Ignored symbol types
22c4802044SMasahiro Yamada#
23c4802044SMasahiro Yamada
24c4802044SMasahiro Yamada# a: local absolute symbols
25c4802044SMasahiro Yamada# N: debugging symbols
26c4802044SMasahiro Yamada# U: undefined global symbols
27c4802044SMasahiro Yamada# w: local weak symbols
28c4802044SMasahiro Yamada/ [aNUw] /d
29c4802044SMasahiro Yamada
30c4802044SMasahiro Yamada# ---------------------------------------------------------------------------
31c4802044SMasahiro Yamada# Ignored prefixes
32c4802044SMasahiro Yamada#  (do not forget a space before each pattern)
33c4802044SMasahiro Yamada
34c4802044SMasahiro Yamada# local symbols for ARM, MIPS, etc.
35ec336aa8SPierre-Clément Tosi/ \\$/d
36c4802044SMasahiro Yamada
37c4802044SMasahiro Yamada# local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc.
38c4802044SMasahiro Yamada/ \.L/d
39c4802044SMasahiro Yamada
40320e7c9dSMasahiro Yamada# arm64 EFI stub namespace
41320e7c9dSMasahiro Yamada/ __efistub_/d
42320e7c9dSMasahiro Yamada
43200dd957SPierre-Clément Tosi# arm64 local symbols in PIE namespace
44200dd957SPierre-Clément Tosi/ __pi_\\$/d
45200dd957SPierre-Clément Tosi/ __pi_\.L/d
46200dd957SPierre-Clément Tosi
47320e7c9dSMasahiro Yamada# arm64 local symbols in non-VHE KVM namespace
48ec336aa8SPierre-Clément Tosi/ __kvm_nvhe_\\$/d
49320e7c9dSMasahiro Yamada/ __kvm_nvhe_\.L/d
50320e7c9dSMasahiro Yamada
51320e7c9dSMasahiro Yamada# arm64 lld
52320e7c9dSMasahiro Yamada/ __AArch64ADRPThunk_/d
53320e7c9dSMasahiro Yamada
54320e7c9dSMasahiro Yamada# arm lld
55320e7c9dSMasahiro Yamada/ __ARMV5PILongThunk_/d
56320e7c9dSMasahiro Yamada/ __ARMV7PILongThunk_/d
57320e7c9dSMasahiro Yamada/ __ThumbV7PILongThunk_/d
58320e7c9dSMasahiro Yamada
59320e7c9dSMasahiro Yamada# mips lld
60320e7c9dSMasahiro Yamada/ __LA25Thunk_/d
61320e7c9dSMasahiro Yamada/ __microLA25Thunk_/d
62320e7c9dSMasahiro Yamada
63320e7c9dSMasahiro Yamada# CFI type identifiers
64320e7c9dSMasahiro Yamada/ __kcfi_typeid_/d
65*71025b85SPierre-Clément Tosi/ __kvm_nvhe___kcfi_typeid_/d
66*71025b85SPierre-Clément Tosi/ __pi___kcfi_typeid_/d
67320e7c9dSMasahiro Yamada
68c4802044SMasahiro Yamada# CRC from modversions
69c4802044SMasahiro Yamada/ __crc_/d
70c4802044SMasahiro Yamada
71c4802044SMasahiro Yamada# EXPORT_SYMBOL (symbol name)
72c4802044SMasahiro Yamada/ __kstrtab_/d
73c4802044SMasahiro Yamada
74c4802044SMasahiro Yamada# EXPORT_SYMBOL (namespace)
75c4802044SMasahiro Yamada/ __kstrtabns_/d
76c4802044SMasahiro Yamada
77c4802044SMasahiro Yamada# ---------------------------------------------------------------------------
78320e7c9dSMasahiro Yamada# Ignored suffixes
79320e7c9dSMasahiro Yamada#  (do not forget '$' after each pattern)
80320e7c9dSMasahiro Yamada
81320e7c9dSMasahiro Yamada# arm
82320e7c9dSMasahiro Yamada/_from_arm$/d
83320e7c9dSMasahiro Yamada/_from_thumb$/d
84320e7c9dSMasahiro Yamada/_veneer$/d
85320e7c9dSMasahiro Yamada
86320e7c9dSMasahiro Yamada# ---------------------------------------------------------------------------
87c4802044SMasahiro Yamada# Ignored symbols (exact match)
88c4802044SMasahiro Yamada#  (do not forget a space before and '$' after each pattern)
89c4802044SMasahiro Yamada
90c4802044SMasahiro Yamada# for LoongArch?
91c4802044SMasahiro Yamada/ L0$/d
92ca09bf48SMasahiro Yamada
93320e7c9dSMasahiro Yamada# ppc
94320e7c9dSMasahiro Yamada/ _SDA_BASE_$/d
95320e7c9dSMasahiro Yamada/ _SDA2_BASE_$/d
96320e7c9dSMasahiro Yamada
97320e7c9dSMasahiro Yamada# ---------------------------------------------------------------------------
98320e7c9dSMasahiro Yamada# Ignored patterns
99320e7c9dSMasahiro Yamada#  (symbols that contain the pattern are ignored)
100320e7c9dSMasahiro Yamada
101320e7c9dSMasahiro Yamada# ppc stub
102320e7c9dSMasahiro Yamada/\.long_branch\./d
103320e7c9dSMasahiro Yamada/\.plt_branch\./d
104320e7c9dSMasahiro Yamada
105ca09bf48SMasahiro Yamada# ---------------------------------------------------------------------------
106ca09bf48SMasahiro Yamada# Ignored kallsyms symbols
107ca09bf48SMasahiro Yamada#
108ca09bf48SMasahiro Yamada# If the 3rd parameter exists, symbols from it will be omitted from the output.
109ca09bf48SMasahiro Yamada# This makes kallsyms have the identical symbol lists in the step 1 and 2.
110ca09bf48SMasahiro Yamada# Without this, the step2 would get new symbols generated by scripts/kallsyms.c
111ca09bf48SMasahiro Yamada# when CONFIG_KALLSYMS_ALL is enabled. That might require one more pass.
112ca09bf48SMasahiro Yamada$(if [ $# -ge 3 ]; then ${NM} ${3} | sed -n '/ U /!s:.* \([^ ]*\)$:/ \1$/d:p'; fi)
113c4802044SMasahiro Yamada"
114