kernel_samsung_a34x-permissive/scripts/abi/FinalABI.sh
2024-04-28 15:49:01 +02:00

107 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
green='\e[0;32m'
red='\e[0;31m'
eol='\e[0m'
BASE_DIR=$PWD
ABI_DIR=$BASE_DIR/scripts/abi
ABI_XML_DIR=$BASE_DIR/scripts/abi/abi_xml
ABI_RESULT_DIR=$BASE_DIR/scripts/abi/abi_xml
ORI_ABI_XML=abi_ori.xml
TARGET_ABI_XML=abi_target.xml
ABI_REPORT=abi-report.out
FINAL_ABI_REPORT=abi-report-final.out
#include abi_white_list to bypass violations
source $ABI_DIR/abi_white_list
#Find Delete/Changed/Added and leaf type change
#check_arr=("\[D\]" "\[C\]" "\[A\]" "^'.*' changed:$")
#Find Delete/Changed and leaf type change
check_arr=("\[D\]" "\[C\]" "^'.*' changed:$")
is_abi_violation_bypass=0
declare -i abi_violation_count=0
function print_usage(){
echo -e "${green}Script for auto generate \
$ABI_RESULT_DIR/$FINAL_ABI_REPORT from $ABI_RESULT_DIR/$ABI_REPORT ${eol}"
echo ""
echo -e "${red}Command for local test:${eol}"
echo ""
echo -e "${green}Example:${eol} ${red}./scripts/abi/FinalABI.sh${eol}"
echo ""
echo -e "${green}Script for auto generate \
$FINAL_ABI_REPORT by specified abi_result_path ${eol}"
echo ""
echo -e "${red}Command for local test:${eol}"
echo "[abi_result_path] ./scripts/abi/FinalABI.sh"
echo ""
echo -e "${green}Description:${eol}"
echo "[abi_result_path]: absolute path to generate fianl abi report"
echo ""
echo -e "${green}Example:${eol} ${red}abi_result_path=absolute_path \
/scripts/abi/FinalABI.sh${eol}"
exit -1
}
if [ -z "$abi_result_path" ]
then
echo "ABI_XML_DIR=$ABI_XML_DIR"
echo "ABI_RESULT_DIR=$ABI_RESULT_DIR"
else
ABI_RESULT_DIR=$abi_result_path
echo "ABI_XML_DIR=$ABI_XML_DIR"
echo "ABI_RESULT_DIR=$ABI_RESULT_DIR"
fi
if [[ "$1" == "h" ]] || [[ "$1" == "help" ]]
then
print_usage
fi
#remove temp files first
rm -rf $ABI_RESULT_DIR/$FINAL_ABI_REPORT
exec < $ABI_RESULT_DIR/$ABI_REPORT
while read line
do
for ((i=0; i < ${#check_arr[@]}; i++))
do
if [[ $line =~ ${check_arr[$i]} ]]
then
is_abi_violation_bypass=0
for ((j=0; j < ${#bypass_arr[@]}; j++))
do
if [[ $line =~ ${bypass_arr[$j]} ]]
then
is_abi_violation_bypass=1
break
fi
done
if [[ $is_abi_violation_bypass == 0 ]]
then
abi_violation_count+=1
fi
break
fi
done
#write $line to $FINAL_ABI_REPORT if $is_abi_violation = 0
if [[ $is_abi_violation_bypass == 0 ]]
then
echo $line >> $ABI_RESULT_DIR/$FINAL_ABI_REPORT
fi
done
if [[ $abi_violation_count == 0 ]]
then
echo "ABI Monitor check PASS!!!"
else
echo "ABI Monitor check FAILED!!!\
Final abi_violation_count=$abi_violation_count!!!"
echo "Please check report: $ABI_RESULT_DIR/$FINAL_ABI_REPORT for details."
fi
exit $abi_violation_count