#!/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 PIE namespace
/ __pi_\\$/d
/ __pi_\.L/d

# arm64 local symbols in non-VHE KVM namespace
/ __kvm_nvhe_\\$/d
/ __kvm_nvhe_\.L/d

# lld arm/aarch64/mips thunks
/ __[[:alnum:]]*Thunk_/d

# CFI type identifiers
/ __kcfi_typeid_/d
/ __kvm_nvhe___kcfi_typeid_/d
/ __pi___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)
"
