[dpdk-dev] [PATCH v4] ABI: Add abi checking utility
Thomas Monjalon
thomas.monjalon at 6wind.com
Tue Mar 17 16:42:31 CET 2015
Hi Neil,
I tested this tool and I see few small improvements possible.
2015-03-13 10:09, Neil Horman:
> There was a request for an abi validation utilty for the ongoing ABI stability
utility
> work. As it turns out there is a abi compliance checker in development that
> seems to be under active development and provides fairly detailed ABI compliance
> reports. Its not yet intellegent enough to understand symbol versioning, but it
intelligent
> does provide the ability to identify symbols which have changed between
> releases, along with details of the change, and offers developers the
> opportunity to identify which symbols then need versioning and validation for a
> given update via manual testing.
>
> This script automates the use of the compliance checker between two arbitrarily
> specified tags within the dpdk tree. To execute enter the $RTE_SDK directory
> and run:
>
> ./scripts/validate_abi.sh $GIT_TAG1 $GIT_TAG2 $CONFIG
>
> where $GIT_TAG1 and 2 are git tags and $CONFIG is a config specification
> suitable for passing as the T= variable in the make config command.
>
> Note the upstream source for the abi compliance checker is here:
> http://ispras.linuxbase.org/index.php/ABI_compliance_checker
>
> It generates a report for each DSO built from the requested tags that developers
> can review to find ABI compliance issues.
>
> Signed-off-by: Neil Horman <nhorman at tuxdriver.com>
>
> ---
>
> Change Notes:
>
> v2) Fixed some typos as requested by Thomas
>
> v3) Fixed some additional typos Thomas requested
> Improved script to work from detached state
> Added some documentation to the changelog
> Added some comments to the scripts
>
> v4) Remove duplicate exports.
> Move restoration of starting branch/comit to cleanup_and_exit
> ---
[...]
> +TAG1=$1
> +TAG2=$2
> +TARGET=$3
> +ABI_DIR=`mktemp -d -p /tmp ABI.XXXXXX`
+JOBS=$(grep -c '^processor' /proc/cpuinfo)
[...]
> +cleanup_and_exit() {
> + rm -rf $ABI_DIR
> + exit $1
> + git checkout $CURRENT_BRANCH
Checkout is never done because of previous exit.
> +}
[...]
> +log "INFO" "Checking out version $TAG1 of the dpdk"
> +# Move to the old version of the tree
> +git checkout $TAG1
What about -q for quiet mode?
[...]
> +log "INFO" "Building DPDK $TAG1. This might take a moment"
> +make O=$TARGET > $VERBOSE 2>&1
-j$JOBS would improve building time
[...]
> +# Move to the new version of the tree
> +log "INFO" "Checking out version $TAG2 of the dpdk"
> +git checkout $TAG2
-q ?
[...]
> +log "INFO" "Building DPDK $TAG2. This might take a moment"
> +make O=$TARGET > $VERBOSE 2>&1
-j ?
[...]
> +# Start comparison of ABI dumps
> +for i in `ls $ABI_DIR/*-1.dump`
> +do
> + NEWNAME=`basename $i`
> + OLDNAME=`basename $i | sed -e"s/1.dump/0.dump/"`
> + LIBNAME=`basename $i | sed -e"s/-ABI-1.dump//"`
> +
> + if [ ! -f $ABI_DIR/$OLDNAME ]
> + then
> + log "INFO" "$OLDNAME DOES NOT EXIST IN $TAG1. SKIPPING..."
> + fi
> +
> + #compare the abi dumps
> + $ABICHECK -l $LIBNAME -old $ABI_DIR/$OLDNAME -new $ABI_DIR/$NEWNAME
> +done
It would be more convenient to generate an HTML index giving access to every
reports for every DSOs.
> +
> +git reset --hard
> +log "INFO" "ABI CHECK COMPLETE. REPORTS ARE IN compat_report directory"
> +cleanup_and_exit 0
After reading the report, it's not clear what would be tolerated or not.
Should we forbid every defects?
More information about the dev
mailing list