1 #!/bin/sed -f !! 1 #!/bin/sh -x 2 # SPDX-License-Identifier: GPL-2.0-only !! 2 # Based on the vmlinux file create the System.map file 3 # << 4 # sed script to filter out symbols that are no << 5 # or not suitable for kallsyms. The input shou << 6 # << 7 # System.map is used by module-init tools and 3 # System.map is used by module-init tools and some debugging 8 # tools to retrieve the actual addresses of sy 4 # tools to retrieve the actual addresses of symbols in the kernel. 9 # 5 # 10 # readprofile starts reading symbols when _ste !! 6 # Usage 11 # continue until it finds a symbol which is no !! 7 # mksysmap vmlinux System.map 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 << 32 / \.L/d << 33 << 34 # arm64 EFI stub namespace << 35 / __efistub_/d << 36 8 37 # arm64 local symbols in PIE namespace << 38 / __pi_\\$/d << 39 / __pi_\.L/d << 40 9 41 # arm64 local symbols in non-VHE KVM namespace !! 10 ##### 42 / __kvm_nvhe_\\$/d !! 11 # Generate System.map (actual filename passed as second argument) 43 / __kvm_nvhe_\.L/d << 44 12 45 # lld arm/aarch64/mips thunks !! 13 # $NM produces the following output: 46 / __[[:alnum:]]*Thunk_/d !! 14 # f0081e80 T alloc_vfsmnt >> 15 >> 16 # The second row specify the type of the symbol: >> 17 # A = Absolute >> 18 # B = Uninitialised data (.bss) >> 19 # C = Comon symbol >> 20 # D = Initialised data >> 21 # G = Initialised data for small objects >> 22 # I = Indirect reference to another symbol >> 23 # N = Debugging symbol >> 24 # R = Read only >> 25 # S = Uninitialised data for small objects >> 26 # T = Text code symbol >> 27 # U = Undefined symbol >> 28 # V = Weak symbol >> 29 # W = Weak symbol >> 30 # Corresponding small letters are local symbols >> 31 >> 32 # For System.map filter away: >> 33 # a - local absolute symbols >> 34 # U - undefined global symbols >> 35 # N - debugging symbols >> 36 # w - local weak symbols 47 37 48 # CFI type identifiers !! 38 # readprofile starts reading symbols when _stext is found, and 49 / __kcfi_typeid_/d !! 39 # continue until it finds a symbol which is not either of 'T', 't', 50 / __kvm_nvhe___kcfi_typeid_/d !! 40 # 'W' or 'w'. __crc_ are 'A' and placed in the middle 51 / __pi___kcfi_typeid_/d !! 41 # so we just ignore them to let readprofile continue to work. 52 !! 42 # (At least sparc64 has __crc_ in the middle). 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 << 74 << 75 # for LoongArch? << 76 / L0$/d << 77 << 78 # ppc << 79 / _SDA_BASE_$/d << 80 / _SDA2_BASE_$/d << 81 43 82 # -------------------------------------------- !! 44 $NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2 83 # Ignored patterns << 84 # (symbols that contain the pattern are ignor << 85 45 86 # ppc stub << 87 /\.long_branch\./d << 88 /\.plt_branch\./d <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.