> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Thomas Monjalon
> Sent: Tuesday, July 7, 2015 3:51 PM
> To: Wu, Jingjing
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v4 1/4] ethdev: rename
> rte_eth_vmdq_mirror_conf
> 
> > Additional, about the validate-abi.sh, does it mean we need to fix all
> > the problems it reports? Or we can decide case by case.
> > Can a Low Severity problem be acceptable?
> 
> We have to decide case by case.
> It makes ABI checking impossible to automate.
> That's why any help is welcome to check the git HEAD for ABI violation.

Hi,

Automated testing for ABI breaks is tricky since it requires some 
interpretation of the errors and the severity level.

However, each report file contains a 2 line summary at the top that can be read 
and parsed. For example (with long lines wrapped):

    head -2 compat_reports/librte_mbuf.so/v2.0.0_to_ABI_CHECK/compat_report.html

    <!-- kind:binary;verdict:compatible;affected:0;added:1;removed:0;
         type_problems_high:0;type_problems_medium:0;type_problems_low:0;
         interface_problems_high:0;interface_problems_medium:0;
         interface_problems_low:0;changed_constants:0;tool_version:1.99.8.5 -->
    <!-- kind:source;verdict:compatible;affected:0;added:1;removed:0;
         type_problems_high:0;type_problems_medium:0;type_problems_low:0;
         interface_problems_high:0;interface_problems_medium:0;
         interface_problems_low:0;changed_constants:0;tool_version:1.99.8.5 -->

This still requires interpretation but it can be used to search for categories 
of incompatibility.

To test if a patchset breaks the API it is possible to do something like the 
following. Say, for example that you have committed 3 commits to your local 
master, you could tag and run the checker like this:

    git checkout master

    git tag -f ABI_CHECK_AFTER
    git tag -f ABI_CHECK_BEFORE HEAD~3

    ./scripts/validate-abi.sh ABI_CHECK_BEFORE ABI_CHECK_AFTER 
x86_64-native-linuxapp-gcc

    grep -lr "kind:binary;verdict:incompatible" compat_reports/

The grep could be extended to match other categories that you are interested 
in. However, it is still probably better to examine the reports manually.

You can also use something this to run a git bisect to find a commit that 
introduced an ABI incompatibility:

    # Tag the head and some known good point in the history.
    git checkout master
    git tag -f ABI_CHECK_END
    git tag -f ABI_CHECK_START v2.0.0

    # Start git bisect with bad and good.
    git bisect start ABI_CHECK_END ABI_CHECK_START

    # Run bisect with a script.
    git bisect run ~/abi_bisect.sh

Where the ~/abi_bisect.sh script that searches for ABI incompatibilities looks 
like this:

    #!/bin/sh

    git tag -f ABI_CHECK_END

    rm -rf compat_reports/

    ./scripts/validate-abi.sh ABI_CHECK_START ABI_CHECK_END 
x86_64-native-linuxapp-gcc

    ! grep -lr "kind:binary;verdict:incompatible" compat_reports/

John.
-- 



Reply via email to