#!/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 # arm64 lld / __AArch64ADRPThunk_/d # arm lld / __ARMV5PILongThunk_/d / __ARMV7PILongThunk_/d / __ThumbV7PILongThunk_/d # mips lld / __LA25Thunk_/d / __microLA25Thunk_/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) "