From: Neil Horman <nhorman@tuxdriver.com>
To: "Kavanagh, Mark B" <mark.b.kavanagh@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v3] ABI: Add abi checking utility
Date: Fri, 13 Mar 2015 10:10:20 -0400 [thread overview]
Message-ID: <20150313141020.GD28191@hmsreliant.think-freely.org> (raw)
In-Reply-To: <DC5AD7FA266D86499789B1BCAEC715F846D52D59@irsmsx105.ger.corp.intel.com>
On Fri, Mar 13, 2015 at 11:56:59AM +0000, Kavanagh, Mark B wrote:
>
>
> >-----Original Message-----
> >From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Neil Horman
> >Sent: Wednesday, March 4, 2015 4:27 PM
> >To: dev@dpdk.org
> >Subject: [dpdk-dev] [PATCH v3] ABI: Add abi checking utility
> >
> >There was a request for an abi validation utilty for the ongoing ABI stability
> >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
> >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@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
> >---
> > scripts/validate_abi.sh | 248 ++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 248 insertions(+)
> > create mode 100755 scripts/validate_abi.sh
> >
> >diff --git a/scripts/validate_abi.sh b/scripts/validate_abi.sh
> >new file mode 100755
> >index 0000000..899cf5f
> >--- /dev/null
> >+++ b/scripts/validate_abi.sh
> >@@ -0,0 +1,248 @@
> >+#!/bin/sh
> >+# BSD LICENSE
> >+#
> >+# Copyright(c) 2015 Neil Horman. All rights reserved.
> >+# All rights reserved.
> >+#
> >+# Redistribution and use in source and binary forms, with or without
> >+# modification, are permitted provided that the following conditions
> >+# are met:
> >+#
> >+# * Redistributions of source code must retain the above copyright
> >+# notice, this list of conditions and the following disclaimer.
> >+# * Redistributions in binary form must reproduce the above copyright
> >+# notice, this list of conditions and the following disclaimer in
> >+# the documentation and/or other materials provided with the
> >+# distribution.
> >+#
> >+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> >+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> >+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> >+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> >+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> >+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> >+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> >+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> >+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> >+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> >+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> >+
> >+TAG1=$1
> >+TAG2=$2
> >+TARGET=$3
> >+ABI_DIR=`mktemp -d -p /tmp ABI.XXXXXX`
> >+
> >+usage() {
> >+ echo "$0 <TAG1> <TAG2> <TARGET>"
> >+}
> >+
> >+log() {
> >+ local level=$1
> >+ shift
> >+ echo "$*"
> >+}
> >+
> >+validate_tags() {
> >+ git tag -l | grep -q "$TAG1"
> >+ if [ $? -ne 0 ]
> >+ then
> >+ echo "$TAG1 is invalid"
> >+ return
> >+ fi
> >+ git tag -l | grep -q "$TAG2"
> >+ if [ $? -ne 0 ]
> >+ then
> >+ echo "$TAG2 is invalid"
> >+ return
> >+ fi
> >+}
> >+
> >+validate_args() {
> >+ if [ -z "$TAG1" ]
> >+ then
> >+ echo "Must Specify TAG1"
> >+ return
> >+ fi
> >+ if [ -z "$TAG2" ]
> >+ then
> >+ echo "Must Specify TAG2"
> >+ return
> >+ fi
> >+ if [ -z "$TARGET" ]
> >+ then
> >+ echo "Must Specify a build target"
> >+ fi
> >+}
> >+
> >+
> >+cleanup_and_exit() {
> >+ rm -rf $ABI_DIR
> >+ exit $1
> >+}
> >+
> >+###########################################
> >+#START
> >+############################################
> >+
> >+#trap on ctrl-c to clean up
> >+trap cleanup_and_exit SIGINT
> >+
> >+#Save the current branch
> >+CURRENT_BRANCH=`git branch | grep \* | cut -d' ' -f2`
> >+
> >+if [ -z "$CURRENT_BRANCH" ]
> >+then
> >+ CURRENT_BRANCH=`git log --pretty=format:%H HEAD~1..HEAD`
> >+fi
> >+
> >+if [ -n "$VERBOSE" ]
> >+then
> >+ export VERBOSE=/dev/stdout
> >+else
> >+ export VERBOSE=/dev/null
> >+fi
> >+
> >+# Validate that we have all the arguments we need
> >+res=$(validate_args)
> >+if [ -n "$res" ]
> >+then
> >+ echo $res
> >+ usage
> >+ cleanup_and_exit 1
> >+fi
> >+
> >+# Make sure our tags exist
> >+res=$(validate_tags)
> >+if [ -n "$res" ]
> >+then
> >+ echo $res
> >+ cleanup_and_exit 1
> >+fi
> >+
> >+ABICHECK=`which abi-compliance-checker 2>/dev/null`
> >+if [ $? -ne 0 ]
> >+then
> >+ log "INFO" "Cant find abi-compliance-checker utility"
> >+ cleanup_and_exit 1
> >+fi
> >+
> >+ABIDUMP=`which abi-dumper 2>/dev/null`
> >+if [ $? -ne 0 ]
> >+then
> >+ log "INFO" "Cant find abi-dumper utility"
> >+ cleanup_and_exit 1
> >+fi
> >+
> >+log "INFO" "We're going to check and make sure that applications built"
> >+log "INFO" "against DPDK DSOs from tag $TAG1 will still run when executed"
> >+log "INFO" "against DPDK DSOs built from tag $TAG2."
> >+log "INFO" ""
> >+
> >+# Check to make sure we have a clean tree
> >+git status | grep -q clean
> >+if [ $? -ne 0 ]
> >+then
> >+ log "WARN" "Working directory not clean, aborting"
> >+ cleanup_and_exit 1
> >+fi
> >+
> >+# Move to the root of the git tree
> >+cd $(dirname $0)/..
> >+
> >+log "INFO" "Checking out version $TAG1 of the dpdk"
> >+# Move to the old version of the tree
> >+git checkout $TAG1
> >+
> >+# Make sure we configure SHARED libraries
> >+# Also turn off IGB and KNI as those require kernel headers to build
> >+sed -i -e"$ a\CONFIG_RTE_BUILD_SHARED_LIB=y" config/defconfig_$TARGET
> >+sed -i -e"$ a\CONFIG_RTE_EAL_IGB_UIO=n" config/defconfig_$TARGET
> >+sed -i -e"$ a\CONFIG_RTE_LIBRTE_KNI=n" config/defconfig_$TARGET
> >+
> >+# Checking abi compliance relies on using the dwarf information in
> >+# The shared objects. Thats only included in the DSO's if we build
> >+# with -g
> >+export EXTRA_CFLAGS=-g
> >+export EXTRA_LDFLAGS=-g
> >+
> >+# Now configure the build
> >+log "INFO" "Configuring DPDK $TAG1"
> >+make config T=$TARGET O=$TARGET > $VERBOSE 2>&1
> >+
> >+log "INFO" "Building DPDK $TAG1. This might take a moment"
> >+make O=$TARGET > $VERBOSE 2>&1
> >+
> >+if [ $? -ne 0 ]
> >+then
> >+ log "INFO" "THE BUILD FAILED. ABORTING"
>
> If the build fails while TAG1 is checked out, the user must check out their original local branch manually. I'd prefer it if the script checked out $CURRENT_BRANCH in the 'cleanup_and_exit' function.
>
Sure, its in V4.
> Same applies to TAG2, if the user CTRL-C's out of the script, and to any other command that might fail when a particular branch/tag is checked out (for example, the 'sed' commands fail when I run the script; however, they work when I run them on the command line - I'm investigating this currently).
>
What does the log say? Please post it here. If it helps add a set -x to the
top of the script for additional verbosity.
Neil
next prev parent reply other threads:[~2015-03-13 14:10 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-30 21:16 [dpdk-dev] [PATCH] " Neil Horman
2015-02-02 18:18 ` [dpdk-dev] [PATCH v2] " Neil Horman
2015-02-27 13:48 ` Neil Horman
2015-02-27 13:55 ` Thomas Monjalon
2015-03-03 22:18 ` Thomas Monjalon
2015-03-04 11:49 ` Neil Horman
2015-03-04 12:54 ` Thomas Monjalon
2015-03-04 14:39 ` Neil Horman
2015-03-04 15:15 ` Thomas Monjalon
2015-03-04 15:42 ` Neil Horman
2015-03-04 16:15 ` Thomas Monjalon
2015-03-04 16:26 ` [dpdk-dev] [PATCH v3] " Neil Horman
2015-03-04 16:49 ` Thomas Monjalon
2015-03-05 16:57 ` Neil Horman
2015-03-11 19:36 ` Neil Horman
2015-03-13 8:51 ` Thomas Monjalon
2015-03-13 11:56 ` Kavanagh, Mark B
2015-03-13 14:10 ` Neil Horman [this message]
2015-03-13 14:25 ` Kavanagh, Mark B
2015-03-13 14:58 ` Neil Horman
2015-03-13 15:49 ` Kavanagh, Mark B
2015-03-13 14:09 ` [dpdk-dev] [PATCH v4] " Neil Horman
2015-03-17 15:42 ` Thomas Monjalon
2015-03-17 16:47 ` Thomas Monjalon
2015-03-17 18:08 ` Neil Horman
2015-03-17 18:08 ` [dpdk-dev] [PATCH v5] " Neil Horman
2015-03-17 21:17 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150313141020.GD28191@hmsreliant.think-freely.org \
--to=nhorman@tuxdriver.com \
--cc=dev@dpdk.org \
--cc=mark.b.kavanagh@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).