Home | History | Annotate | Download | only in doc
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      3 <head>
      4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5   <meta name="keywords" content="C, C++, ABI, API, compatibility, checker" />
      6   <meta name="description" content="A tool for checking backward API/ABI compatibility of a C/C++ library" />
      7   <title>ABI Compliance Checker</title>
      8 
      9   <style type="text/css">
     10     body {
     11       margin-top: 1.0em;
     12       background-color: #deeef7;
     13       font-family: Helvetica, Arial, FreeSans, san-serif;
     14       color: #000000;
     15     }
     16     #container {
     17       margin: 0 auto;
     18       width: 700px;
     19     }
     20     h1 { font-size: 3.8em; color: #211108; margin-bottom: 3px;margin-top:0px;padding-top:0px;}
     21     h1 .small { font-size: 0.4em; }
     22     h1 a { text-decoration: none }
     23     h2 { font-size: 1.5em; color: #211108; }
     24     h3 { text-align: center; color: #211108; }
     25     a { color: #211108; }
     26     .description { font-size: 1.2em; margin-bottom: 30px; margin-top: 30px; font-style: italic;}
     27     .download { float: right; }
     28     pre {padding: 0px;margin: 0px;padding-left: 10px;word-wrap:break-word;white-space: pre-wrap;}
     29     hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
     30     .footer { text-align:center; padding-top:30px; font-style: italic; }
     31     .code {border: dashed 1px gray; background-color: #f0f0f0; padding: 5px; padding-left: 10px; padding-right: 10px;}
     32     .listing {padding: 10px;border: 1px solid black;width: 70%;font-family:"DejaVu Sans Mono", "Monaco", "Courier New", monospace;font-size:14px;}
     33     .summary {border:1px solid black;border-collapse:collapse;}
     34     table.summary td, table.summary th {border:1px solid black;padding:2px;}
     35   </style>
     36 
     37 </head>
     38 
     39 <body>
     40   <a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
     41 
     42   <div id="container">
     43 
     44     <div class="download">
     45       <a href="https://github.com/lvc/abi-compliance-checker/zipball/master">
     46         <img style="border: 0;" width="90" src="https://github.com/images/modules/download/zip.png" alt="" /></a>
     47       <a href="https://github.com/lvc/abi-compliance-checker/tarball/master">
     48         <img style="border: 0;" width="90" src="https://github.com/images/modules/download/tar.png" alt="" /></a>
     49     </div>
     50    
     51     <h1>ABI Compliance Checker</h1>
     52 
     53     <div class="description">
     54       A tool for checking backward API/ABI compatibility of a C/C++ library
     55     </div>
     56 
     57       <p/>
     58       ABI Compliance Checker (ABICC) is a tool for checking backward binary and source-level compatibility of a C/C++ library. The tool checks header files and shared libraries of old and new versions and analyzes changes in API and ABI (ABI=API+compiler ABI) that may break binary and/or source compatibility: changes in calling stack, v-table changes, removed symbols, renamed fields, etc.
     59       
     60       <p/>
     61       Binary incompatibility may result in crashing or incorrect behavior of applications built with an old version of a library if they run on a new one. Source incompatibility may result in recompilation errors with a new library version. The tool is intended for developers of software libraries and Linux maintainers who are interested in ensuring backward compatibility, i.e. allow old applications to run or to be recompiled with newer library versions.
     62       
     63       <p/>
     64       The tool is developed by Andrey Ponomarenko. You can order additional reports for visualization of the ABI structure and high detailed binary compatibility analysis here: <a href='https://abi-laboratory.pro/'>https://abi-laboratory.pro/</a>
     65       
     66       <p/>
     67       The tool is a core of the <a href='https://abi-laboratory.pro/tracker/'>ABI Tracker</a> and Upstream Tracker projects.
     68       
     69 <table class='summary'><tr><td>
     70 <div>Table of Contents</div>
     71 <ul>
     72 <li><a href="#Downloads">Downloads</a></li>
     73 <li><a href="#License">License</a></li>
     74 <li><a href="#Supported_Platforms">Supported Platforms</a></li>
     75 <li><a href="#Dependencies">Dependencies</a></li>
     76 <li><a href="#Installation">Installation</a></li>
     77 <li><a href="#ABI_Dumper">Usage with ABI Dumper</a></li>
     78 <li><a href="#Usage">Usage (Original)</a></li>
     79 <li><a href="#Tutorial">Tutorial</a></li>
     80 <li><a href="#Examples">Examples</a></li>
     81 <li><a href="#BinaryProblems">Detectable Binary-Compatibility Problems</a></li>
     82 <li><a href="#SourceProblems">Detectable Source-Compatibility Problems</a></li>
     83 <li><a href="#TestSuite">Test Suite</a></li>
     84 <li><a href="#Dump">Create ABI Dumps</a></li>
     85 <li><a href="#Report">Report Format</a></li>
     86 <li><a href="#Verdict">Verdict on Compatibility</a></li>
     87 <li><a href="#Error">Error Codes</a></li>
     88 <li><a href="#FAQ">FAQ</a></li>
     89 <li><a href="#Similar">Similar Tools</a></li>
     90 <li><a href="#Bugs">Bugs</a></li>
     91 <li><a href="#Maintainers">Maintainers</a></li>
     92 <li><a href="#ChangeLog">Changes</a></li>
     93 <li><a href="#Articles">Articles</a></li>
     94 </ul>
     95 </td></tr></table>
     96 
     97 <a name="Downloads"></a>
     98 <h2>Downloads</h2>
     99 <p>The latest release can be downloaded from <a href="https://github.com/lvc/abi-compliance-checker/releases">this page</a>.</p>
    100 
    101 <p>Read-only access to the latest development version:</p>
    102 
    103 <code class='code'>git clone https://github.com/lvc/abi-compliance-checker.git</code>
    104 
    105 <a name="License"></a>
    106 <h2>License</h2>
    107 <p>This program is free software. You may use, redistribute and/or modify it under the terms of the <a href="http://www.gnu.org/licenses/">GNU GPL</a> or <a href="http://www.gnu.org/licenses/">GNU LGPL</a></p>
    108 
    109 <a name="Supported_Platforms"></a>
    110 <h2>Supported Platforms</h2>
    111 GNU/Linux, FreeBSD, Mac OS X, MS Windows.
    112     
    113 <a name="Dependencies"></a>
    114 <h2>Dependencies</h2>
    115 <ul>
    116 <li>
    117   G++ (3.0-4.7, 4.8.3 or newer)
    118 </li>
    119 <li>
    120   GNU Binutils (readelf, c++filt, objdump)
    121 </li>
    122 <li>
    123   Perl 5
    124 </li>
    125 <li>
    126   Ctags
    127 </li>
    128 <li>
    129   <a href="https://github.com/lvc/abi-dumper">ABI Dumper</a>
    130 </li>
    131 </ul>
    132 
    133 WARNING: if you are using ccache program (i.e. gcc points to /usr/lib/ccache/gcc) then it should be newer than 3.1.2 or disabled. 
    134 <p/>
    135 On Mac OS X the tool also requires Xcode (g++, c++filt, nm and otool).
    136 <p/>
    137 On MS Windows the tool also requires MinGW, MS Visual C++ (dumpbin, undname, cl), Active Perl 5, adding of tool locations to the PATH and execution of vcvars64.bat script (C:\Microsoft Visual Studio 9.0\VC\bin\). 
    138 
    139 <a name="Installation"></a>
    140 <h2>Installation</h2>
    141 <p>The tool is <b>ready-to-use</b> after extracting the archive.</p>
    142 
    143 <p>You can also use a Makefile to install the tool into the system:</p>
    144 <code class='code'>sudo make install prefix=PREFIX [/usr, /usr/local]</code>
    145 <p>This command will install the <code>abi-compliance-checker</code> program into the <code>PREFIX/bin</code> system directory and private modules into the <code>PREFIX/share</code>.</p>
    146 
    147 <p>To verify that the tool is installed correctly and it works on your host run:</p>
    148 <code class='code'>cd tmp/</code>
    149 <p>
    150 <code class='code'>abi-compliance-checker -test</code>
    151 </p>
    152 
    153 <a name="ABI_Dumper"></a>
    154 <h2>Usage with ABI Dumper</h2>
    155 This new way is based on the analysis of the debug-info from binary objects. It's more reliable, faster and simple way. 
    156 <p/>
    157 The analyzed library should be compiled with "-g -Og" GCC options to contain DWARF debug info.
    158 <p/>
    159 Create ABI dumps for both library versions first using the <a href='https://github.com/lvc/abi-dumper'>ABI Dumper</a> tool:
    160 <p/>
    161 <code class='code'>abi-dumper OLD.so -o ABI-0.dump -lver 0</code>
    162 <p/>
    163 <code class='code'>abi-dumper NEW.so -o ABI-1.dump -lver 1</code>
    164 <p/>
    165 And then compare ABI dumps to create report:
    166 <p/>
    167 <code class='code'>abi-compliance-checker -l NAME -old ABI-0.dump -new ABI-1.dump</code>
    168 <p/>
    169 The compatibility report will be generated to:
    170 <p/>
    171 <code class='code'>compat_reports/NAME/V0_to_V1/compat_report.html</code>
    172 <p/>
    173 You can filter out private symbols from the ABI dumps by specifying of additional <code>-public-headers</code> option of the ABI Dumper tool. 
    174 
    175 <a name="Usage"></a>
    176 <h2>Usage (Original)</h2>
    177 The original usage is based on the analysis of header files and shared objects (without debug-info). 
    178 <p/>
    179 You should provide <a href='Xml-Descriptor.html'>XML descriptors</a> for two library versions (<code>v1.xml</code> and <code>v2.xml</code> files) in order to run the analysis. Library descriptor is a simple XML-file that specifies version number, paths to header files and shared libraries and other optional information. An example of the descriptor is the following (<code>0.3.4.xml</code>):
    180 <p/>
    181 <div class='listing'>
    182 <pre>
    183 <span style='color:Green'>&lt;version&gt;</span>
    184     0.3.4
    185 <span style='color:Green'>&lt;/version&gt;</span>
    186 
    187 <span style='color:Green'>&lt;headers&gt;</span>
    188     /usr/local/libssh/0.3.4/include/
    189 <span style='color:Green'>&lt;/headers&gt;</span>
    190 
    191 <span style='color:Green'>&lt;libs&gt;</span>
    192     /usr/local/libssh/0.3.4/lib/
    193 <span style='color:Green'>&lt;/libs&gt;</span>
    194 </pre>
    195 </div>
    196 <p/>
    197 
    198 Command to compare two versions of a library:
    199 <p/>
    200 <code class='code'>abi-compliance-checker -lib NAME -old V1.xml -new V2.xml</code>
    201 <p/>
    202 The compatibility report will be generated to:
    203 <p/>
    204 <code class='code'>compat_reports/NAME/V1_to_V2/compat_report.html</code>
    205 <p/>
    206 
    207 <a name="Tutorial"></a>
    208 <h2>Tutorial</h2>
    209 An excellent tutorial <a href='http://blog.famillecollet.com/post/2010/06/20/ABI-%3A-stability-check'>"ABI: stability check"</a> is available at Les RPM de Remi Blog. See also <a href='http://sourceware.org/glibc/wiki/Testing/ABI_checker'>ABI compliance checker Notes</a> at glibc wiki. 
    210 <p/>
    211 
    212 <a name="Examples"></a>
    213 <h2>Examples</h2>
    214 <table class='summary'>
    215 <tr><th>Library</th><th>Versions</th><th>Report</th></tr>
    216 <tr>
    217 <td>libhttpd</td>
    218 <td>2.2.31 vs 2.4.1</td>
    219 <td><a href='http://abi-laboratory.pro/tracker/compat_report/httpd/2.2.31/2.4.1/58f6a/abi_compat_report.html'>report</a></td>
    220 </tr>
    221 <tr>
    222 <td>libMagick++</td>
    223 <td>6.9.0-0 vs 6.9.0-10</td>
    224 <td><a href='http://abi-laboratory.pro/tracker/compat_report/imagemagick/6.9.0-0/6.9.0-10/c3418/abi_compat_report.html'>report</a></td>
    225 </tr>
    226 <tr>
    227 <td>libssh</td>
    228 <td>0.3.4 vs 0.3.91</td>
    229 <td><a href='http://abi-laboratory.pro/tracker/compat_report/libssh/0.3.4/0.3.91/1f31d/abi_compat_report.html'>report</a></td>
    230 </tr>
    231 </table>
    232 <p/>
    233 See more report examples at <a href='http://abi-laboratory.pro/tracker/'>http://abi-laboratory.pro/tracker/</a>. 
    234 
    235 <a name="BinaryProblems"></a>
    236 <h2>Detectable Binary Compatibility Problems</h2>
    237 <ul>
    238 <li>
    239 
    240 <b>Problems with Data Types</b>
    241 <ul>
    242     <li>
    243     Structures and Classes
    244         <ul>
    245             <li>
    246                 added/removed fields (change of a memory layout)
    247             </li>
    248             <li>
    249                 change of size
    250             </li>
    251             <li>
    252                 changed order of fields
    253             </li>
    254             <li>
    255                 change of a field type
    256             </li>
    257             <li>
    258                 changes in fields (recursive analysis)
    259             </li>
    260         </ul>
    261     </li>
    262     <li>
    263     Classes
    264         <ul>
    265             <li>
    266                 added/removed virtual functions (change of a v-table layout)
    267             </li>
    268             <li>
    269                 change of virtual function position
    270             </li>
    271             <li>
    272                 overridden virtual functions
    273             </li>
    274             <li>
    275                 added/removed base classes
    276             </li>
    277             <li>
    278                 changes in base classes (recursive analysis)
    279             </li>
    280         </ul>
    281     </li>
    282     <li>
    283     Unions
    284         <ul>
    285             <li>
    286                 added/removed fields
    287             </li>
    288             <li>
    289                 change of size
    290             </li>
    291             <li>
    292                 change of a field type
    293             </li>
    294             <li>
    295                 changes in fields (recursive analysis)
    296             </li>
    297         </ul>
    298     </li>
    299     <li>
    300     Enumerations
    301         <ul>
    302             <li>
    303                 change of a member value
    304             </li>
    305             <li>
    306                 removed/renamed members
    307                 
    308                 <br/>
    309                 <br/>
    310             </li>
    311         </ul>
    312     </li>
    313 </ul>
    314 
    315 </li>
    316 <li>
    317 
    318 <b>Problems with Symbols</b>
    319 <ul>
    320     <li>
    321         removed symbols (functions or global data)
    322     </li>
    323     <li>
    324         added/removed parameters
    325     </li>
    326     <li>
    327         change of a parameter/return value type
    328     </li>
    329     <li>
    330         change of default parameter value
    331     </li>
    332     <li>
    333         renamed parameters
    334     </li>
    335     <li>
    336         incorrect version change
    337     </li>
    338     <li>
    339         changed attributes (const, volatile, static, etc.)
    340         
    341         <br/>
    342         <br/>
    343     </li>
    344 </ul>
    345 
    346 </li>
    347 <li>
    348 <b>Problems with Constants (#defines)</b>
    349 <ul>
    350 <li>
    351     changed value 
    352 </li>
    353 </ul>
    354 
    355 </li>
    356 </ul>
    357 <p/>
    358 
    359 See <a href='https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a> article from KDE TechBase for more info. 
    360 
    361 <a name="SourceProblems"></a>
    362 <h2>Detectable Source Compatibility Problems</h2>
    363 <ul>
    364 <li>
    365 
    366 <b>Problems with Data Types</b>
    367 <ul>
    368     <li>
    369     Structures, Classes and Unions
    370         <ul>
    371             <li>
    372                 removed/renamed fields
    373             </li>
    374             <li>
    375                 change of a field type
    376             </li>
    377             <li>
    378                  changes in fields (recursive analysis)
    379             </li>
    380         </ul>
    381     </li>
    382     <li>
    383     Classes
    384         <ul>
    385             <li>
    386                 added/removed base classes
    387             </li>
    388             <li>
    389                 change access level of a field or method
    390             </li>
    391             <li>
    392                  added pure virtual methods
    393             </li>
    394         </ul>
    395     </li>
    396     <li>
    397     Enumerations
    398         <ul>
    399             <li>
    400                 removed/renamed members
    401                 
    402                 <br/>
    403                 <br/>
    404             </li>
    405         </ul>
    406     </li>
    407 </ul>
    408 </li>
    409 
    410 <li>
    411 
    412 <b>Problems with Symbols</b>
    413 <ul>
    414     <li>
    415         removed symbols (functions or global data) 
    416     </li>
    417     <li>
    418         added/removed parameters 
    419     </li>
    420     <li>
    421         change of a parameter type 
    422     </li>
    423     <li>
    424         removed default value of parameter
    425     </li>
    426     <li>
    427         change of return value type 
    428     </li>
    429     <li>
    430         changed attributes (const, static, etc.) 
    431     </li>
    432 </ul>
    433 
    434 </li>
    435 
    436 </ul>
    437 
    438 <a name="TestSuite"></a>
    439 <h2>Test Suite</h2>
    440 The tool is tested properly in the <a href='https://abi-laboratory.pro/tracker/'>ABI Tracker</a> and Upstream Tracker projects, by the community and by the internal test suite:
    441 <p/>
    442 <code class='code'>abi-compliance-checker -test</code>
    443 <p/>
    444 There are about 100 basic tests for C and about 200 basic tests for C++ API/ABI breaks.
    445 
    446 <a name="Dump"></a>
    447 <h2>Create ABI Dumps</h2>
    448 The library ABI is a representation of the library API at the binary level. The ABI dump is a dump of the model of the ABI used in the tool.
    449 <p/>
    450 The ABI dump consists of:
    451 
    452 <ul>
    453 
    454 <li>
    455     <b>Types Information</b>
    456     <ul>
    457         <li>
    458             Attributes (name, size, header, access, base types, etc.)
    459         </li>
    460         <li>
    461             Fields (name, type, size, position, alignment, access, specifiers, etc.)
    462         </li>
    463         <li>
    464             V-table structure (offsets, entries)
    465         </li>
    466         <li>
    467             Etc. 
    468         </li>
    469     </ul>
    470 </li>
    471 
    472 <li>
    473     <b>Symbols Information</b>
    474     <ul>
    475         <li>
    476             Attributes (name, mangled name, header, access, specifiers, etc.)
    477         </li>
    478         <li>
    479             Parameters (name, type, position, alignment, etc.)
    480         </li>
    481         <li>
    482             Etc.
    483         </li>
    484     </ul>
    485 </li>
    486 
    487 <li>
    488     Etc.
    489 </li>
    490 
    491 </ul>
    492 
    493 The ABI dump can be used to create a snapshot of a library ABI in the particular environment and then compare it with any other state of the ABI changed due to changes in the environment (compiler version, external libraries, etc.) or changes in the library API (header files).
    494 
    495 <p/>
    496 The typical case is the comparing of two versions of the same library that require incompatible states of the environment (i.e. these versions cannot be installed simultaneously). In this case one can create a dump for one version of the library and then switch the environment and create ABI dump for other version of the library. Two ABI dumps can be compared by the tool to create the API compatibility report.
    497 <p/>
    498 To create an ABI dump use <code>-dump</code> option:
    499 <p/>
    500 <code class='code'>abi-compliance-checker -lib NAME -dump VER.xml</code>
    501 <p/>
    502 The ABI dump will be generated to:
    503 <p/>
    504 <code class='code'>abi_dumps/NAME/NAME_VER.abi.tar.gz</code>
    505 <p/>
    506 To compare ABI dumps pass them as the descriptors:
    507 <p/>
    508 <code class='code'>abi-compliance-checker -lib NAME -old V1.abi.tar.gz -new V2.abi.tar.gz</code>
    509 
    510 <a name="Report"></a>
    511 <h2>Report Format</h2>
    512 The tool supports two formats of a compatibility report: HTML (default) and XML. To generate XML report you should specify <code>-xml</code> additional option.
    513 <p/>
    514 The report consists of:
    515 
    516 <ul>
    517     <li>
    518         <b>Test Info</b> - The library name and compared version numbers. Environment info: GCC version and CPU type.
    519     </li>
    520     <li>
    521         <b>Test Results</b> - Verdict on compatibility. Number of header files, shared libraries, symbols and data types checked by the tool.
    522     </li>
    523     <li>
    524         <b>Problem Summary</b> - Classification of compatibility problems.
    525     </li>
    526     <li>
    527         <b>Added Symbols</b> - The list of added symbols.
    528     </li>
    529     <li>
    530         <b>Removed Symbols</b> - The list of removed symbols.
    531     </li>
    532     <li>
    533         <b>Problems with Data Types</b> - The list of compatibility problems caused by changes in data types (divided by the severity level: High, Medium and Low). List of affected symbols.
    534     </li>
    535     <li>
    536         <b>Problems with Symbols</b> - The list of compatibility problems caused by changes in symbol parameters or attributes (divided by the severity level).
    537     </li>
    538     <li>
    539         <b>Problems with Constants</b> - The list of changed constants (#defines).
    540     </li>
    541     <li>
    542         <b>Other Changes in Data Types</b> - The list of compatible changes in data types.
    543     </li>
    544     <li>
    545         <b>Other Changes in Symbols</b> - The list of compatible changes in symbols.
    546     </li>
    547 </ul>
    548 
    549 <a name="Verdict"></a>
    550 <h2>Verdict on Compatibility</h2>
    551 If the tool detects problems with high or medium level of severity or at least one removed symbol then the compatibility verdict is <b>incompatible</b> (otherwise <b>compatible</b>). Low-severity problems can be considered as <b>warnings</b> and don't affect the compatibility verdict unless the <code>-strict</code> option is specified.
    552 
    553 <a name="Error"></a>
    554 <h2>Error Codes</h2>
    555 <table class='summary'>
    556 <tr><th>Code</th><th>Meaning</th></tr>
    557 <tr><td>0</td><td>Compatible. The tool has run without any errors.</td></tr>
    558 <tr><td>1</td><td>Incompatible. The tool has run without any errors.</td></tr>
    559 <tr><td>2</td><td>Common error code (undifferentiated).</td></tr>
    560 <tr><td>3</td><td>A system command is not found.</td></tr>
    561 <tr><td>4</td><td>Cannot access input files.</td></tr>
    562 <tr><td>5</td><td>Cannot compile header files.</td></tr>
    563 <tr><td>6</td><td>Headers have been compiled with minor errors.</td></tr>
    564 <tr><td>7</td><td>Invalid input ABI dump.</td></tr>
    565 <tr><td>8</td><td>Unsupported version of input ABI dump.</td></tr>
    566 <tr><td>9</td><td>Cannot find a module.</td></tr>
    567 <tr><td>10</td><td>Empty intersection between headers and shared objects.</td></tr>
    568 <tr><td>11</td><td>Empty set of symbols in headers.</td></tr>
    569 </table>
    570 
    571 <a name="FAQ"></a>
    572 <h2>FAQ</h2>
    573 <ul>
    574     <li>
    575         <b>What is an ABI and how does it differ from an API?</b>
    576         <p/>
    577         An Application Binary Interface (ABI) is the set of supported run-time interfaces provided by a software component or set of components for applications to use, whereas an Application Programming Interface (API) is the set of build-time interfaces. The ABI may be defined by the formula: ABI = API + compiler ABI.
    578     </li>
    579     <li>
    580         <b>Why does this tool need both shared libraries and header files to check ABI compliance?</b>
    581         <p/>
    582         Without header files it is impossible to determine public symbols in ABI and data type definitions. Without shared libraries it is impossible to determine exported symbols in the ABI of the target library and also impossible to detect added/removed symbols. 
    583     </li>
    584 </ul>
    585 
    586 <a name="Similar"></a>
    587 <h2>Similar Tools </h2>
    588 <ul>
    589     <li>
    590          <b>icheck</b> - C interface ABI/API checker.
    591     </li>
    592     <li>
    593          <b>BCS</b> - The Symbian binary compatibility suite.
    594     </li>
    595     <li>
    596          <b>shlib-compat</b> - ABI compatibility checker that uses DWARF debug info.
    597     </li>
    598     <li>
    599          <b>qbic</b> - A tool to check for binary incompatibilities in Qt4 Toolkit.
    600     </li>
    601     <li>
    602          <b>libabigail</b> - A C++ library for ABI analysis.
    603     </li>
    604     <li>
    605          <b>chkshlib, cmpdylib, cmpshlib</b> - Tools to compare binary symbols.
    606     </li>
    607 </ul>
    608 
    609 <a name="Bugs"></a>
    610 <h2>Bugs</h2>
    611 Please post bug reports, feature requests and questions to the <a href="https://github.com/lvc/abi-compliance-checker/issues">issue tracker</a>.
    612 <p/>
    613 
    614 <a name="Maintainers"></a>
    615 <h2>Maintainers</h2>
    616 The tool is developed by <a href="https://www.linkedin.com/in/andreyponomarenko">Andrey Ponomarenko</a>.
    617 
    618 <a name="ChangeLog"></a>
    619 <h2>Changes</h2>
    620 You can find changelog <a href='Changelog.html'>here</a>.
    621 
    622 <a name="Articles"></a>
    623 <h2>Articles</h2>
    624 
    625 <ul>
    626     <li>
    627         <a href='https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a>, KDE TechBase 
    628     </li>
    629     <li>
    630         <a href='https://community.kde.org/Policies/Binary_Compatibility_Examples'>"Binary Compatibility Examples"</a>, KDE TechBase 
    631     </li>
    632     <li>
    633         <a href='https://www.computer.org/csdl/proceedings/valid/2010/4146/00/4146a057-abs.html'>"Automated Verification of Shared Libraries for Backward Binary Compatibility"</a>, A. Ponomarenko and V. Rubanov, VALID 2010
    634     </li>
    635     <li>
    636         <a href='http://www.springerlink.com/content/905067689q7n0166/'>"Backward compatibility of software interfaces: Steps towards automatic verification"</a>, A. Ponomarenko and V. Rubanov, Programming and Computer Software 2012
    637     </li>
    638     <li>
    639         <a href='http://refspecs.linux-foundation.org/cxxabi-1.83.html'>"Itanium C++ ABI"</a>, linux-foundation.org 
    640     </li>
    641     <li>
    642         <a href='http://www.ros.org/reps/rep-0009.html'>"ABI Compatibility"</a>, Josh Faust 
    643     </li>
    644     <li>
    645         <a href='http://blog.famillecollet.com/post/2010/06/20/ABI-%3A-stability-check'>"ABI : stability check"</a>, Les RPM de Remi - Blog 
    646     </li>
    647     <li>
    648         <a href='http://www.agner.org/optimize/calling_conventions.pdf'>"Calling conventions for different C++ compilers and operating systems"</a>, Agner Fog 
    649     </li>
    650     <li>
    651         <a href='http://www.angelcode.com/dev/callconv/callconv.html'>"Calling conventions on the x86 platform"</a>, Andreas Jonsson
    652     </li>
    653     <li>
    654         <a href='http://blog.qt.digia.com/blog/2009/08/12/some-thoughts-on-binary-compatibility/'>"Some thoughts on binary compatibility"</a>, Thiago Macieira
    655     </li>
    656     <li>
    657         <a href='http://syrcose.ispras.ru/2009/files/02_paper.pdf'>"Binary Compatibility of C++ shared libraries on GNU/Linux"</a>, Pavel Shved, Denis Silakov
    658     </li>
    659     <li>
    660         <a href='http://www.usenix.org/publications/library/proceedings/als00/2000papers/papers/full_papers/browndavid/browndavid_html/'>"Library Interface Versioning in Solaris and Linux"</a>, David J. Brown and Karl Runge
    661     </li>
    662     <li>
    663         <a href='http://h21007.www2.hp.com/portal/download/files/prot/files/STK/pdfs/V_4version.pdf'>"Steps to Version Your Shared Library"</a>, hp.com
    664     </li>
    665     <li>
    666         <a href='http://chadaustin.me/cppinterface.html'>"Binary-compatible C++ Interfaces"</a>, Chad Austin
    667     </li>
    668     <li>
    669         <a href='http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html'>"ABI Policy and Guidelines"</a>, gnu.org
    670     </li>
    671     <li>
    672         <a href='http://gcc.gnu.org/onlinedocs/gcc/Compatibility.html'>"Binary Compatibility"</a>, gnu.org
    673     </li>
    674     <li>
    675         <a href='http://www.oracle.com/technetwork/articles/servers-storage-dev/stablecplusplusabi-333927.html'>"Stability of the C++ ABI: Evolution of a Programing Language"</a>, Stephen Clamage
    676     </li>
    677     <li>
    678         <a href='http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#binarycompat'>"When binary compatibility breaks"</a>, Debian Library Packaging guide
    679     </li>
    680     <li>
    681         <a href='http://techbase.kde.org/Policies/Library_Code_Policy'>"Library Code Policy"</a>, KDE TechBase
    682     </li>
    683     <li>
    684         <a href='http://people.redhat.com/drepper/dsohowto.pdf'>"How To Write Shared Libraries"</a>, Ulrich Drepper
    685     </li>
    686     <li>
    687         <a href='http://tldp.org/HOWTO/Program-Library-HOWTO/'>"Program Library HOWTO"</a>, linux.org
    688     </li>
    689     <li>
    690         <a href='http://plan99.net/~mike/writing-shared-libraries.html'>"Writing shared libraries"</a>, Mike Hearn
    691     </li>
    692     <li>
    693         <a href='http://www.ayukov.com/essays/linuxdll.html'>"Shared libraries in Linux: growing pains or fundamental problem?"</a>, Sergey Ayukov
    694     </li>
    695     <li>
    696         <a href='http://c2.com/cgi/wiki?FragileBinaryInterfaceProblem'>"Fragile Binary Interface Problem"</a>, Steven Newton
    697     </li>
    698     <li>
    699         <a href='http://www.oocities.org/mrshrap/linker.html'>"The amazing world of library incompatibility"</a>, oocities.org
    700     </li>
    701     <li>
    702         <a href='http://www.elpauer.org/?p=230'>"ABI compatibility in C++"</a>, elpauer.org
    703     </li>
    704     <li>
    705         <a href='http://blogs.gentoo.org/mgorny/2012/08/20/the-impact-of-cxx-templates-on-library-abi/'>"The impact of C++ templates on library ABI"</a>, Micha Grny
    706     </li>
    707     <li>
    708         <a href='http://sourceware.org/glibc/wiki/Testing/ABI_checker'>"ABI compliance checker Notes"</a>, sourceware.org
    709     </li>
    710     <li>
    711         <a href='http://developer.symbian.org/wiki/index.php/Preserving_Compatibility'>"Preserving Compatibility"</a>, symbian.org
    712     </li>
    713     <li>
    714         <a href='http://www.macieira.org/blog/2012/01/architectures-and-abis-detailed/'>"Architectures and ABIs detailed"</a>, Thiago Macieira's blog
    715     </li>
    716     <li>
    717         <a href='http://accu.org/index.php/journals/1718'>"Interface Versioning in C++"</a>, ACCU
    718     </li>
    719     <li>
    720         Processor ABI standards: <a href='http://refspecs.linuxbase.org/elf/abi386-4.pdf'>Intel386</a>, <a href='http://www.x86-64.org/documentation/abi.pdf'>AMD64</a>, <a href='http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf'>ARM</a>, <a href='http://refspecs.linuxbase.org/elf/elfspec_ppc.pdf'>PowerPC</a>, <a href='http://download.boulder.ibm.com/ibmdl/pub/software/dw/linux390/docu/l390abi0.pdf'> S/390</a>, <a href='http://refspecs.linuxbase.org/elf/IA64-SysV-psABI.pdf'>Itanium</a>, <a href='http://refspecs.linuxbase.org/elf/mipsabi.pdf'>MIPS</a>, <a href='sparc.org/wp-content/uploads/2014/01/psABI3rd.pdf.gz'>SPARC</a>, <a href='http://refspecs.linuxbase.org/elf/elf-pa.pdf'>PA-RISK</a>, <a href='http://www.linux-m32r.org/cmn/m32r/M32R-elf-abi.pdf'>M32R</a>
    721     </li>
    722     <li>
    723         <a href='https://refspecs.linuxbase.org/elf/gabi41.pdf'>"Generic ABI Standard"</a>, <a href='http://refspecs.linuxbase.org/elf/'>"ELF and ABI Standards"</a>, freestandards.org
    724     </li>
    725     <li>
    726         <a href='http://events.linuxfoundation.org/sites/events/files/slides/Binary_Compatibility_for_library_devs.pdf'>"Binary compatibility for library developers"</a>, <a href='https://www.youtube.com/watch?v=PHrXGHDd9no'>Video</a>, Thiago Macieira
    727     </li>
    728     <li>
    729         <a href='http://debconf14-video.debian.net/video/286/acc-for-abi-breaks'>"ACC for abi breaks"</a>, Dimitri Ledkov
    730     </li>
    731 </ul>
    732 
    733 <div class="footer">
    734     get the source code on GitHub : <a href="https://github.com/lvc/abi-compliance-checker">lvc/abi-compliance-checker</a>
    735 </div>
    736 
    737 <br/>
    738 <br/>
    739 
    740 </div>
    741 </body>
    742 </html>
    743