mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	 65e1f38d9a
			
		
	
	
		65e1f38d9a
		
	
	
	
	
		
			
			When the CC variable contains quotes, e.g. when using
ccache (make CC="ccache <compiler>"), this script always
fails, so CONFIG_RELR is never enabled, even when the
toolchain supports this feature. Removing the /dev/null
redirect and invoking the script manually shows the issue:
    $ CC='/usr/bin/ccache clang' ./scripts/tools-support-relr.sh
    ./scripts/tools-support-relr.sh: 7: ./scripts/tools-support-relr.sh: /usr/bin/ccache clang: not found
Fix this by un-quoting the variables.
Before:
    $ make ARCH=arm64 CC='/usr/bin/ccache clang' LD=ld.lld \
        NM=llvm-nm OBJCOPY=llvm-objcopy defconfig
    $ grep RELR .config
    CONFIG_ARCH_HAS_RELR=y
With this change:
    $ make ARCH=arm64 CC='/usr/bin/ccache clang' LD=ld.lld \
        NM=llvm-nm OBJCOPY=llvm-objcopy defconfig
    $ grep RELR .config
    CONFIG_TOOLS_SUPPORT_RELR=y
    CONFIG_ARCH_HAS_RELR=y
    CONFIG_RELR=y
Fixes: 5cf896fb6b ("arm64: Add support for relocating the kernel with RELR relocations")
Reported-by: Dmitry Golovin <dima@golovin.in>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Link: https://github.com/ClangBuiltLinux/linux/issues/769
Cc: Peter Collingbourne <pcc@google.com>
Signed-off-by: Ilie Halip <ilie.halip@gmail.com>
Signed-off-by: Will Deacon <will@kernel.org>
		
	
			
		
			
				
	
	
		
			16 lines
		
	
	
	
		
			518 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			16 lines
		
	
	
	
		
			518 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh -eu
 | |
| # SPDX-License-Identifier: GPL-2.0
 | |
| 
 | |
| tmp_file=$(mktemp)
 | |
| trap "rm -f $tmp_file.o $tmp_file $tmp_file.bin" EXIT
 | |
| 
 | |
| cat << "END" | $CC -c -x c - -o $tmp_file.o >/dev/null 2>&1
 | |
| void *p = &p;
 | |
| END
 | |
| $LD $tmp_file.o -shared -Bsymbolic --pack-dyn-relocs=relr -o $tmp_file
 | |
| 
 | |
| # Despite printing an error message, GNU nm still exits with exit code 0 if it
 | |
| # sees a relr section. So we need to check that nothing is printed to stderr.
 | |
| test -z "$($NM $tmp_file 2>&1 >/dev/null)"
 | |
| 
 | |
| $OBJCOPY -O binary $tmp_file $tmp_file.bin
 |