diff options
Diffstat (limited to 'scripts/link-vmlinux.sh')
| -rwxr-xr-x | scripts/link-vmlinux.sh | 56 | 
1 files changed, 30 insertions, 26 deletions
| diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 5cdd9bc5c385..666f7bbc13eb 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -34,6 +34,10 @@ LD="$1"  KBUILD_LDFLAGS="$2"  LDFLAGS_vmlinux="$3" +is_enabled() { +	grep -q "^$1=y" include/config/auto.conf +} +  # Nice output in kbuild format  # Will be supressed by "make -s"  info() @@ -80,11 +84,11 @@ modpost_link()  		${KBUILD_VMLINUX_LIBS}				\  		--end-group" -	if [ -n "${CONFIG_LTO_CLANG}" ]; then +	if is_enabled CONFIG_LTO_CLANG; then  		gen_initcalls  		lds="-T .tmp_initcalls.lds" -		if [ -n "${CONFIG_MODVERSIONS}" ]; then +		if is_enabled CONFIG_MODVERSIONS; then  			gen_symversions  			lds="${lds} -T .tmp_symversions.lds"  		fi @@ -104,21 +108,21 @@ objtool_link()  	local objtoolcmd;  	local objtoolopt; -	if [ "${CONFIG_LTO_CLANG} ${CONFIG_STACK_VALIDATION}" = "y y" ]; then +	if is_enabled CONFIG_LTO_CLANG && is_enabled CONFIG_STACK_VALIDATION; then  		# Don't perform vmlinux validation unless explicitly requested,  		# but run objtool on vmlinux.o now that we have an object file. -		if [ -n "${CONFIG_UNWINDER_ORC}" ]; then +		if is_enabled CONFIG_UNWINDER_ORC; then  			objtoolcmd="orc generate"  		fi  		objtoolopt="${objtoolopt} --duplicate" -		if [ -n "${CONFIG_FTRACE_MCOUNT_USE_OBJTOOL}" ]; then +		if is_enabled CONFIG_FTRACE_MCOUNT_USE_OBJTOOL; then  			objtoolopt="${objtoolopt} --mcount"  		fi  	fi -	if [ -n "${CONFIG_VMLINUX_VALIDATION}" ]; then +	if is_enabled CONFIG_VMLINUX_VALIDATION; then  		objtoolopt="${objtoolopt} --noinstr"  	fi @@ -127,18 +131,21 @@ objtool_link()  			objtoolcmd="check"  		fi  		objtoolopt="${objtoolopt} --vmlinux" -		if [ -z "${CONFIG_FRAME_POINTER}" ]; then +		if ! is_enabled CONFIG_FRAME_POINTER; then  			objtoolopt="${objtoolopt} --no-fp"  		fi -		if [ -n "${CONFIG_GCOV_KERNEL}" ] || [ -n "${CONFIG_LTO_CLANG}" ]; then +		if is_enabled CONFIG_GCOV_KERNEL || is_enabled CONFIG_LTO_CLANG; then  			objtoolopt="${objtoolopt} --no-unreachable"  		fi -		if [ -n "${CONFIG_RETPOLINE}" ]; then +		if is_enabled CONFIG_RETPOLINE; then  			objtoolopt="${objtoolopt} --retpoline"  		fi -		if [ -n "${CONFIG_X86_SMAP}" ]; then +		if is_enabled CONFIG_X86_SMAP; then  			objtoolopt="${objtoolopt} --uaccess"  		fi +		if is_enabled CONFIG_SLS; then +			objtoolopt="${objtoolopt} --sls" +		fi  		info OBJTOOL ${1}  		tools/objtool/objtool ${objtoolcmd} ${objtoolopt} ${1}  	fi @@ -161,7 +168,7 @@ vmlinux_link()  	# skip output file argument  	shift -	if [ -n "${CONFIG_LTO_CLANG}" ]; then +	if is_enabled CONFIG_LTO_CLANG; then  		# Use vmlinux.o instead of performing the slow LTO link again.  		objs=vmlinux.o  		libs= @@ -189,7 +196,7 @@ vmlinux_link()  		ldflags="${ldflags} ${wl}--strip-debug"  	fi -	if [ -n "${CONFIG_VMLINUX_MAP}" ]; then +	if is_enabled CONFIG_VMLINUX_MAP; then  		ldflags="${ldflags} ${wl}-Map=${output}.map"  	fi @@ -239,15 +246,15 @@ kallsyms()  {  	local kallsymopt; -	if [ -n "${CONFIG_KALLSYMS_ALL}" ]; then +	if is_enabled CONFIG_KALLSYMS_ALL; then  		kallsymopt="${kallsymopt} --all-symbols"  	fi -	if [ -n "${CONFIG_KALLSYMS_ABSOLUTE_PERCPU}" ]; then +	if is_enabled CONFIG_KALLSYMS_ABSOLUTE_PERCPU; then  		kallsymopt="${kallsymopt} --absolute-percpu"  	fi -	if [ -n "${CONFIG_KALLSYMS_BASE_RELATIVE}" ]; then +	if is_enabled CONFIG_KALLSYMS_BASE_RELATIVE; then  		kallsymopt="${kallsymopt} --base-relative"  	fi @@ -312,9 +319,6 @@ if [ "$1" = "clean" ]; then  	exit 0  fi -# We need access to CONFIG_ symbols -. include/config/auto.conf -  # Update version  info GEN .version  if [ -r .version ]; then @@ -343,7 +347,7 @@ tr '\0' '\n' < modules.builtin.modinfo | sed -n 's/^[[:alnum:]:_]*\.file=//p' |  	tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$/.ko/' > modules.builtin  btf_vmlinux_bin_o="" -if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then +if is_enabled CONFIG_DEBUG_INFO_BTF; then  	btf_vmlinux_bin_o=.btf.vmlinux.bin.o  	if ! gen_btf .tmp_vmlinux.btf $btf_vmlinux_bin_o ; then  		echo >&2 "Failed to generate BTF for vmlinux" @@ -355,7 +359,7 @@ fi  kallsymso=""  kallsymso_prev=""  kallsyms_vmlinux="" -if [ -n "${CONFIG_KALLSYMS}" ]; then +if is_enabled CONFIG_KALLSYMS; then  	# kallsyms support  	# Generate section listing all symbols and add it into vmlinux @@ -395,12 +399,15 @@ fi  vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o}  # fill in BTF IDs -if [ -n "${CONFIG_DEBUG_INFO_BTF}" -a -n "${CONFIG_BPF}" ]; then +if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then  	info BTFIDS vmlinux  	${RESOLVE_BTFIDS} vmlinux  fi -if [ -n "${CONFIG_BUILDTIME_TABLE_SORT}" ]; then +info SYSMAP System.map +mksysmap vmlinux System.map + +if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then  	info SORTTAB vmlinux  	if ! sorttable vmlinux; then  		echo >&2 Failed to sort kernel tables @@ -408,11 +415,8 @@ if [ -n "${CONFIG_BUILDTIME_TABLE_SORT}" ]; then  	fi  fi -info SYSMAP System.map -mksysmap vmlinux System.map -  # step a (see comment above) -if [ -n "${CONFIG_KALLSYMS}" ]; then +if is_enabled CONFIG_KALLSYMS; then  	mksysmap ${kallsyms_vmlinux} .tmp_System.map  	if ! cmp -s System.map .tmp_System.map; then |