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