11da177e4SLinus Torvalds#!/bin/sh -x 21da177e4SLinus Torvalds# Based on the vmlinux file create the System.map file 31da177e4SLinus Torvalds# System.map is used by module-init tools and some debugging 4943ffb58SAdrian Bunk# tools to retrieve the actual addresses of symbols in the kernel. 51da177e4SLinus Torvalds# 61da177e4SLinus Torvalds# Usage 71da177e4SLinus Torvalds# mksysmap vmlinux System.map 81da177e4SLinus Torvalds 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds##### 111da177e4SLinus Torvalds# Generate System.map (actual filename passed as second argument) 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds# $NM produces the following output: 141da177e4SLinus Torvalds# f0081e80 T alloc_vfsmnt 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds# The second row specify the type of the symbol: 171da177e4SLinus Torvalds# A = Absolute 181da177e4SLinus Torvalds# B = Uninitialised data (.bss) 194fec5420SMasatake YAMATO# C = Common symbol 201da177e4SLinus Torvalds# D = Initialised data 211da177e4SLinus Torvalds# G = Initialised data for small objects 221da177e4SLinus Torvalds# I = Indirect reference to another symbol 231da177e4SLinus Torvalds# N = Debugging symbol 241da177e4SLinus Torvalds# R = Read only 251da177e4SLinus Torvalds# S = Uninitialised data for small objects 261da177e4SLinus Torvalds# T = Text code symbol 271da177e4SLinus Torvalds# U = Undefined symbol 281da177e4SLinus Torvalds# V = Weak symbol 291da177e4SLinus Torvalds# W = Weak symbol 301da177e4SLinus Torvalds# Corresponding small letters are local symbols 311da177e4SLinus Torvalds 321da177e4SLinus Torvalds# For System.map filter away: 331da177e4SLinus Torvalds# a - local absolute symbols 341da177e4SLinus Torvalds# U - undefined global symbols 35aab34ac8SSam Ravnborg# N - debugging symbols 361da177e4SLinus Torvalds# w - local weak symbols 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds# readprofile starts reading symbols when _stext is found, and 391da177e4SLinus Torvalds# continue until it finds a symbol which is not either of 'T', 't', 40c1346169SMasahiro Yamada# 'W' or 'w'. 41c1346169SMasahiro Yamada# 42c1346169SMasahiro Yamada# Ignored prefixes: 43*a2833d1bSMasahiro Yamada# $ - local symbols for ARM, MIPS, etc. 44*a2833d1bSMasahiro Yamada# .L - local labels, .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. 45c1346169SMasahiro Yamada# __crc_ - modversions 46*a2833d1bSMasahiro Yamada# 47*a2833d1bSMasahiro Yamada# Ignored symbols: 48*a2833d1bSMasahiro Yamada# L0 - for LoongArch? 49*a2833d1bSMasahiro Yamada 50*a2833d1bSMasahiro Yamada$NM -n $1 | grep -v \ 51*a2833d1bSMasahiro Yamada -e ' [aNUw] ' \ 52*a2833d1bSMasahiro Yamada -e ' \$' \ 53*a2833d1bSMasahiro Yamada -e ' \.L' \ 54*a2833d1bSMasahiro Yamada -e ' __crc_' \ 55*a2833d1bSMasahiro Yamada -e ' L0$' \ 56*a2833d1bSMasahiro Yamada> $2 57