mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 00:28:52 +02:00 
			
		
		
		
	powerpc: Move script to check relocations at compile time in scripts/
Relocating kernel at runtime is done very early in the boot process, so it is not convenient to check for relocations there and react in case a relocation was not expected. Powerpc architecture has a script that allows to check at compile time for such unexpected relocations: extract the common logic to scripts/ so that other architectures can take advantage of it. Signed-off-by: Alexandre Ghiti <alex@ghiti.fr> Reviewed-by: Anup Patel <anup@brainfault.org> Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Link: https://lore.kernel.org/r/20230329045329.64565-5-alexghiti@rivosinc.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
This commit is contained in:
		
							parent
							
								
									39b3307294
								
							
						
					
					
						commit
						47981b5cc6
					
				
					 2 changed files with 22 additions and 16 deletions
				
			
		|  | @ -15,21 +15,8 @@ if [ $# -lt 3 ]; then | ||||||
| 	exit 1 | 	exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # Have Kbuild supply the path to objdump and nm so we handle cross compilation. |  | ||||||
| objdump="$1" |  | ||||||
| nm="$2" |  | ||||||
| vmlinux="$3" |  | ||||||
| 
 |  | ||||||
| # Remove from the bad relocations those that match an undefined weak symbol |  | ||||||
| # which will result in an absolute relocation to 0. |  | ||||||
| # Weak unresolved symbols are of that form in nm output: |  | ||||||
| # "                  w _binary__btf_vmlinux_bin_end" |  | ||||||
| undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }') |  | ||||||
| 
 |  | ||||||
| bad_relocs=$( | bad_relocs=$( | ||||||
| $objdump -R "$vmlinux" | | ${srctree}/scripts/relocs_check.sh "$@" | | ||||||
| 	# Only look at relocation lines. |  | ||||||
| 	grep -E '\<R_' | |  | ||||||
| 	# These relocations are okay | 	# These relocations are okay | ||||||
| 	# On PPC64: | 	# On PPC64: | ||||||
| 	#	R_PPC64_RELATIVE, R_PPC64_NONE | 	#	R_PPC64_RELATIVE, R_PPC64_NONE | ||||||
|  | @ -44,8 +31,7 @@ R_PPC_ADDR16_LO | ||||||
| R_PPC_ADDR16_HI | R_PPC_ADDR16_HI | ||||||
| R_PPC_ADDR16_HA | R_PPC_ADDR16_HA | ||||||
| R_PPC_RELATIVE | R_PPC_RELATIVE | ||||||
| R_PPC_NONE' | | R_PPC_NONE' | ||||||
| 	([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || cat) |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| if [ -z "$bad_relocs" ]; then | if [ -z "$bad_relocs" ]; then | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								scripts/relocs_check.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								scripts/relocs_check.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  | 
 | ||||||
|  | # Get a list of all the relocations, remove from it the relocations | ||||||
|  | # that are known to be legitimate and return this list to arch specific | ||||||
|  | # script that will look for suspicious relocations. | ||||||
|  | 
 | ||||||
|  | objdump="$1" | ||||||
|  | nm="$2" | ||||||
|  | vmlinux="$3" | ||||||
|  | 
 | ||||||
|  | # Remove from the possible bad relocations those that match an undefined | ||||||
|  | # weak symbol which will result in an absolute relocation to 0. | ||||||
|  | # Weak unresolved symbols are of that form in nm output: | ||||||
|  | # "                  w _binary__btf_vmlinux_bin_end" | ||||||
|  | undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }') | ||||||
|  | 
 | ||||||
|  | $objdump -R "$vmlinux" | | ||||||
|  | 	grep -E '\<R_' | | ||||||
|  | 	([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || cat) | ||||||
		Loading…
	
		Reference in a new issue
	
	 Alexandre Ghiti
						Alexandre Ghiti