|  | #!/bin/sh | 
|  | # SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | if [ -z "$SRCARCH" ]; then | 
|  | echo 'sync-check.sh: error: missing $SRCARCH environment variable' >&2 | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | FILES="include/linux/objtool_types.h" | 
|  |  | 
|  | if [ "$SRCARCH" = "x86" ]; then | 
|  | FILES="$FILES | 
|  | arch/x86/include/asm/nops.h | 
|  | arch/x86/include/asm/inat_types.h | 
|  | arch/x86/include/asm/orc_types.h | 
|  | arch/x86/include/asm/emulate_prefix.h | 
|  | arch/x86/lib/x86-opcode-map.txt | 
|  | arch/x86/tools/gen-insn-attr-x86.awk | 
|  | include/linux/static_call_types.h | 
|  | " | 
|  |  | 
|  | SYNC_CHECK_FILES=' | 
|  | arch/x86/include/asm/inat.h | 
|  | arch/x86/include/asm/insn.h | 
|  | arch/x86/lib/inat.c | 
|  | arch/x86/lib/insn.c | 
|  | ' | 
|  | fi | 
|  |  | 
|  | check_2 () { | 
|  | file1=$1 | 
|  | file2=$2 | 
|  |  | 
|  | shift | 
|  | shift | 
|  |  | 
|  | cmd="diff $* $file1 $file2 > /dev/null" | 
|  |  | 
|  | test -f $file2 && { | 
|  | eval $cmd || { | 
|  | echo "Warning: Kernel ABI header at '$file1' differs from latest version at '$file2'" >&2 | 
|  | echo diff -u $file1 $file2 | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | check () { | 
|  | file=$1 | 
|  |  | 
|  | shift | 
|  |  | 
|  | check_2 tools/$file $file $* | 
|  | } | 
|  |  | 
|  | if [ ! -d ../../kernel ] || [ ! -d ../../tools ] || [ ! -d ../objtool ]; then | 
|  | exit 0 | 
|  | fi | 
|  |  | 
|  | cd ../.. | 
|  |  | 
|  | while read -r file_entry; do | 
|  | if [ -z "$file_entry" ]; then | 
|  | continue | 
|  | fi | 
|  |  | 
|  | check $file_entry | 
|  | done <<EOF | 
|  | $FILES | 
|  | EOF | 
|  |  | 
|  | if [ "$SRCARCH" = "x86" ]; then | 
|  | for i in $SYNC_CHECK_FILES; do | 
|  | check $i '-I "^.*\/\*.*__ignore_sync_check__.*\*\/.*$"' | 
|  | done | 
|  | fi |