mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 15:14:18 +08:00
ad7a953c52
This patch changes the way __crc_ symbols are being resolved from using ld to do so to using the assembler, thus allowing these symbols to be marked local (the linker creates then as global ones) and hence allow stripping (for modules) or ignoring (for vmlinux) them. While at this, also strip other generated symbols during module installation. One potentially debatable point is the handling of the flags passeed to gcc when translating the intermediate assembly file into an object: passing $(c_flags) unchanged doesn't work as gcc passes --gdwarf2 to gas whenever is sees any -g* option, even for -g0, and despite the fact that the compiler would have already produced all necessary debug info in the C->assembly translation phase. I took the approach of just filtering out all -g* options, but an alternative to such negative filtering might be to have a positive filter which might, in the ideal case allow just all the -Wa,* options to pass through. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
43 lines
1.2 KiB
Bash
43 lines
1.2 KiB
Bash
#!/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
|
|
|
|
|
|
#####
|
|
# Generate System.map (actual filename passed as second argument)
|
|
|
|
# $NM produces the following output:
|
|
# f0081e80 T alloc_vfsmnt
|
|
|
|
# The second row specify the type of the symbol:
|
|
# A = Absolute
|
|
# B = Uninitialised data (.bss)
|
|
# C = Comon symbol
|
|
# D = Initialised data
|
|
# G = Initialised data for small objects
|
|
# I = Indirect reference to another symbol
|
|
# N = Debugging symbol
|
|
# R = Read only
|
|
# S = Uninitialised data for small objects
|
|
# T = Text code symbol
|
|
# U = Undefined symbol
|
|
# V = Weak symbol
|
|
# W = Weak symbol
|
|
# Corresponding small letters are local symbols
|
|
|
|
# For System.map filter away:
|
|
# a - local absolute symbols
|
|
# U - undefined global symbols
|
|
# N - debugging symbols
|
|
# w - local weak symbols
|
|
|
|
# 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 | grep -v '\( [aNUw] \)\|\( \$[adt]\)' > $2
|