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 # >> 6 # Usage >> 7 # mksysmap vmlinux System.map [exclude] >> 8 >> 9 >> 10 ##### >> 11 # Generate System.map (actual filename passed as second argument) >> 12 # The following refers to the symbol type as per nm(1). >> 13 10 # readprofile starts reading symbols when _ste 14 # readprofile starts reading symbols when _stext is found, and 11 # continue until it finds a symbol which is no 15 # continue until it finds a symbol which is not either of 'T', 't', 12 # 'W' or 'w'. 16 # 'W' or 'w'. 13 # 17 # >> 18 >> 19 ${NM} -n ${1} | sed >${2} -e " 14 # -------------------------------------------- 20 # --------------------------------------------------------------------------- 15 # Ignored symbol types 21 # Ignored symbol types 16 # 22 # 17 23 18 # a: local absolute symbols 24 # a: local absolute symbols 19 # N: debugging symbols 25 # N: debugging symbols 20 # U: undefined global symbols 26 # U: undefined global symbols 21 # w: local weak symbols 27 # w: local weak symbols 22 / [aNUw] /d 28 / [aNUw] /d 23 29 24 # -------------------------------------------- 30 # --------------------------------------------------------------------------- 25 # Ignored prefixes 31 # Ignored prefixes 26 # (do not forget a space before each pattern) 32 # (do not forget a space before each pattern) 27 33 28 # local symbols for ARM, MIPS, etc. 34 # local symbols for ARM, MIPS, etc. 29 / \\$/d 35 / \\$/d 30 36 31 # local labels, .LBB, .Ltmpxxx, .L__unnamed_xx 37 # local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc. 32 / \.L/d 38 / \.L/d 33 39 34 # arm64 EFI stub namespace 40 # arm64 EFI stub namespace 35 / __efistub_/d 41 / __efistub_/d 36 42 37 # arm64 local symbols in PIE namespace 43 # arm64 local symbols in PIE namespace 38 / __pi_\\$/d 44 / __pi_\\$/d 39 / __pi_\.L/d 45 / __pi_\.L/d 40 46 41 # arm64 local symbols in non-VHE KVM namespace 47 # arm64 local symbols in non-VHE KVM namespace 42 / __kvm_nvhe_\\$/d 48 / __kvm_nvhe_\\$/d 43 / __kvm_nvhe_\.L/d 49 / __kvm_nvhe_\.L/d 44 50 45 # lld arm/aarch64/mips thunks !! 51 # arm64 lld 46 / __[[:alnum:]]*Thunk_/d !! 52 / __AArch64ADRPThunk_/d >> 53 >> 54 # arm lld >> 55 / __ARMV5PILongThunk_/d >> 56 / __ARMV7PILongThunk_/d >> 57 / __ThumbV7PILongThunk_/d >> 58 >> 59 # mips lld >> 60 / __LA25Thunk_/d >> 61 / __microLA25Thunk_/d 47 62 48 # CFI type identifiers 63 # CFI type identifiers 49 / __kcfi_typeid_/d 64 / __kcfi_typeid_/d 50 / __kvm_nvhe___kcfi_typeid_/d 65 / __kvm_nvhe___kcfi_typeid_/d 51 / __pi___kcfi_typeid_/d 66 / __pi___kcfi_typeid_/d 52 67 53 # CRC from modversions 68 # CRC from modversions 54 / __crc_/d 69 / __crc_/d 55 70 56 # EXPORT_SYMBOL (symbol name) 71 # EXPORT_SYMBOL (symbol name) 57 / __kstrtab_/d 72 / __kstrtab_/d 58 73 59 # EXPORT_SYMBOL (namespace) 74 # EXPORT_SYMBOL (namespace) 60 / __kstrtabns_/d 75 / __kstrtabns_/d 61 76 62 # -------------------------------------------- 77 # --------------------------------------------------------------------------- 63 # Ignored suffixes 78 # Ignored suffixes 64 # (do not forget '$' after each pattern) 79 # (do not forget '$' after each pattern) 65 80 66 # arm 81 # arm 67 /_from_arm$/d 82 /_from_arm$/d 68 /_from_thumb$/d 83 /_from_thumb$/d 69 /_veneer$/d 84 /_veneer$/d 70 85 71 # -------------------------------------------- 86 # --------------------------------------------------------------------------- 72 # Ignored symbols (exact match) 87 # Ignored symbols (exact match) 73 # (do not forget a space before and '$' after 88 # (do not forget a space before and '$' after each pattern) 74 89 75 # for LoongArch? 90 # for LoongArch? 76 / L0$/d 91 / L0$/d 77 92 78 # ppc 93 # ppc 79 / _SDA_BASE_$/d 94 / _SDA_BASE_$/d 80 / _SDA2_BASE_$/d 95 / _SDA2_BASE_$/d 81 96 82 # -------------------------------------------- 97 # --------------------------------------------------------------------------- 83 # Ignored patterns 98 # Ignored patterns 84 # (symbols that contain the pattern are ignor 99 # (symbols that contain the pattern are ignored) 85 100 86 # ppc stub 101 # ppc stub 87 /\.long_branch\./d 102 /\.long_branch\./d 88 /\.plt_branch\./d 103 /\.plt_branch\./d >> 104 >> 105 # --------------------------------------------------------------------------- >> 106 # Ignored kallsyms symbols >> 107 # >> 108 # If the 3rd parameter exists, symbols from it will be omitted from the output. >> 109 # This makes kallsyms have the identical symbol lists in the step 1 and 2. >> 110 # Without this, the step2 would get new symbols generated by scripts/kallsyms.c >> 111 # when CONFIG_KALLSYMS_ALL is enabled. That might require one more pass. >> 112 $(if [ $# -ge 3 ]; then ${NM} ${3} | sed -n '/ U /!s:.* \([^ ]*\)$:/ \1$/d:p'; fi) >> 113 "
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.