|  | #!/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) | 
|  | " |