blob: 6375beea81ce7eaf093018343f798655c00be910 [file] [log] [blame]
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +03001<!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; }
Andrey Ponomarenko512878d2016-05-07 18:02:58 +030031 .code {border: dashed 1px gray; background-color: #f0f0f0; padding: 5px; padding-left: 10px; padding-right: 10px;}
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030032 .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>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +030040 <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>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030041
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.
Andrey Ponomarenko8bfdcd82015-09-08 17:58:01 +030062
63 <p/>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +030064 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>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030065
66<table class='summary'><tr><td>
67<div>Table of Contents</div>
68<ul>
69<li><a href="#Downloads">Downloads</a></li>
70<li><a href="#License">License</a></li>
71<li><a href="#Supported_Platforms">Supported Platforms</a></li>
72<li><a href="#Dependencies">Dependencies</a></li>
73<li><a href="#Installation">Installation</a></li>
Andrey Ponomarenkoe3419b42016-01-28 15:06:08 +030074<li><a href="#ABI_Dumper">Usage with ABI Dumper</a></li>
Andrey Ponomarenkoa364f8a2016-04-18 21:40:51 +030075<li><a href="#Usage">Usage (Original)</a></li>
Andrey Ponomarenkoe3419b42016-01-28 15:06:08 +030076<li><a href="#Tutorial">Tutorial</a></li>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030077<li><a href="#Examples">Examples</a></li>
78<li><a href="#BinaryProblems">Detectable Binary-Compatibility Problems</a></li>
79<li><a href="#SourceProblems">Detectable Source-Compatibility Problems</a></li>
80<li><a href="#Dump">Create ABI Dumps</a></li>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030081<li><a href="#Report">Report Format</a></li>
82<li><a href="#Verdict">Verdict on Compatibility</a></li>
83<li><a href="#Error">Error Codes</a></li>
84<li><a href="#FAQ">FAQ</a></li>
85<li><a href="#Similar">Similar Tools</a></li>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030086<li><a href="#Bugs">Bugs</a></li>
87<li><a href="#Maintainers">Maintainers</a></li>
88<li><a href="#ChangeLog">Changes</a></li>
89<li><a href="#Articles">Articles</a></li>
90</ul>
91</td></tr></table>
92
93<a name="Downloads"></a>
94<h2>Downloads</h2>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +030095<p>The latest release can be downloaded from <a href="https://github.com/lvc/abi-compliance-checker/releases">this page</a>.</p>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +030096
97<p>Read-only access to the latest development version:</p>
98
Andrey Ponomarenko512878d2016-05-07 18:02:58 +030099<code class='code'>git clone https://github.com/lvc/abi-compliance-checker.git</code>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300100
101<a name="License"></a>
102<h2>License</h2>
103<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>
104
105<a name="Supported_Platforms"></a>
106<h2>Supported Platforms</h2>
107GNU/Linux, FreeBSD, Mac OS X, MS Windows.
108
109<a name="Dependencies"></a>
110<h2>Dependencies</h2>
111<ul>
112<li>
Andrey Ponomarenkodd172162016-10-04 19:41:25 +0300113 G++ (3.0-4.7, 4.8.3 or newer)
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300114</li>
115<li>
Andrey Ponomarenkodd172162016-10-04 19:41:25 +0300116 GNU Binutils (readelf, c++filt, objdump)
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300117</li>
118<li>
Andrey Ponomarenkodd172162016-10-04 19:41:25 +0300119 Perl 5
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300120</li>
121<li>
Andrey Ponomarenkodd172162016-10-04 19:41:25 +0300122 Ctags
123</li>
124<li>
125 <a href="https://github.com/lvc/abi-dumper">ABI Dumper</a>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300126</li>
127</ul>
128
129WARNING: 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.
130<p/>
131On Mac OS X the tool also requires Xcode (g++, c++filt, nm and otool).
132<p/>
Andrey Ponomarenkodd172162016-10-04 19:41:25 +0300133On 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\).
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300134
135<a name="Installation"></a>
136<h2>Installation</h2>
137<p>The tool is <b>ready-to-use</b> after extracting the archive.</p>
138
139<p>You can also use a Makefile to install the tool into the system:</p>
Andrey Ponomarenko512878d2016-05-07 18:02:58 +0300140<code class='code'>sudo make install prefix=PREFIX [/usr, /usr/local]</code>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300141<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>
142
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300143<p>To verify that the tool is installed correctly and it works on your host run:</p>
Andrey Ponomarenko512878d2016-05-07 18:02:58 +0300144<code class='code'>cd tmp/</code>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300145<p>
Andrey Ponomarenko512878d2016-05-07 18:02:58 +0300146<code class='code'>abi-compliance-checker -test</code>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300147</p>
148
Andrey Ponomarenkoa364f8a2016-04-18 21:40:51 +0300149<a name="ABI_Dumper"></a>
150<h2>Usage with ABI Dumper</h2>
151This new way is based on the analysis of the debug-info from binary objects. It's more reliable, faster and simple way.
152<p/>
153The analyzed library should be compiled with "-g -Og" GCC options to contain DWARF debug info.
154<p/>
155Create ABI dumps for both library versions first using the <a href='https://github.com/lvc/abi-dumper'>ABI Dumper</a> tool:
156<p/>
157<code class='code'>abi-dumper OLD.so -o ABI-0.dump -lver 0</code>
158<p/>
159<code class='code'>abi-dumper NEW.so -o ABI-1.dump -lver 1</code>
160<p/>
161And then compare ABI dumps to create report:
162<p/>
163<code class='code'>abi-compliance-checker -l NAME -old ABI-0.dump -new ABI-1.dump</code>
164<p/>
165The compatibility report will be generated to:
166<p/>
167<code class='code'>compat_reports/NAME/V0_to_V1/compat_report.html</code>
168<p/>
169You can filter out private symbols from the ABI dumps by specifying of additional <code>-public-headers</code> option of the ABI Dumper tool.
170
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300171<a name="Usage"></a>
Andrey Ponomarenkoe3419b42016-01-28 15:06:08 +0300172<h2>Usage (Original)</h2>
173The original usage is based on the analysis of header files and shared objects (without debug-info).
174<p/>
175You 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>):
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300176<p/>
177<div class='listing'>
178<pre>
179<span style='color:Green'>&lt;version&gt;</span>
180 0.3.4
181<span style='color:Green'>&lt;/version&gt;</span>
182
183<span style='color:Green'>&lt;headers&gt;</span>
184 /usr/local/libssh/0.3.4/include/
185<span style='color:Green'>&lt;/headers&gt;</span>
186
187<span style='color:Green'>&lt;libs&gt;</span>
188 /usr/local/libssh/0.3.4/lib/
189<span style='color:Green'>&lt;/libs&gt;</span>
190</pre>
191</div>
192<p/>
193
194Command to compare two versions of a library:
195<p/>
196<code class='code'>abi-compliance-checker -lib NAME -old V1.xml -new V2.xml</code>
197<p/>
198The compatibility report will be generated to:
199<p/>
200<code class='code'>compat_reports/NAME/V1_to_V2/compat_report.html</code>
201<p/>
202
Andrey Ponomarenkoe3419b42016-01-28 15:06:08 +0300203<a name="Tutorial"></a>
204<h2>Tutorial</h2>
205An 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.
206<p/>
207
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300208<a name="Examples"></a>
209<h2>Examples</h2>
210<table class='summary'>
211<tr><th>Library</th><th>Versions</th><th>Report</th></tr>
212<tr>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300213<td>libhttpd</td>
214<td>2.2.31 vs 2.4.1</td>
215<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>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300216</tr>
217<tr>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300218<td>libMagick++</td>
219<td>6.9.0-0 vs 6.9.0-10</td>
220<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>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300221</tr>
222<tr>
223<td>libssh</td>
Andrey Ponomarenkodd99c622016-04-26 19:10:46 +0300224<td>0.3.4 vs 0.3.91</td>
225<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>
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300226</tr>
227</table>
Andrey Ponomarenkoe3419b42016-01-28 15:06:08 +0300228<p/>
229See more report examples at <a href='http://abi-laboratory.pro/tracker/'>http://abi-laboratory.pro/tracker/</a>.
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300230
231<a name="BinaryProblems"></a>
232<h2>Detectable Binary Compatibility Problems</h2>
233<ul>
234<li>
235
236<b>Problems with Data Types</b>
237<ul>
238 <li>
239 Structures and Classes
240 <ul>
241 <li>
242 added/removed fields (change of a memory layout)
243 </li>
244 <li>
245 change of size
246 </li>
247 <li>
248 changed order of fields
249 </li>
250 <li>
251 change of a field type
252 </li>
253 <li>
254 changes in fields (recursive analysis)
255 </li>
256 </ul>
257 </li>
258 <li>
259 Classes
260 <ul>
261 <li>
262 added/removed virtual functions (change of a v-table layout)
263 </li>
264 <li>
265 change of virtual function position
266 </li>
267 <li>
268 overridden virtual functions
269 </li>
270 <li>
271 added/removed base classes
272 </li>
273 <li>
274 changes in base classes (recursive analysis)
275 </li>
276 </ul>
277 </li>
278 <li>
279 Unions
280 <ul>
281 <li>
282 added/removed fields
283 </li>
284 <li>
285 change of size
286 </li>
287 <li>
288 change of a field type
289 </li>
290 <li>
291 changes in fields (recursive analysis)
292 </li>
293 </ul>
294 </li>
295 <li>
296 Enumerations
297 <ul>
298 <li>
299 change of a member value
300 </li>
301 <li>
302 removed/renamed members
303
304 <br/>
305 <br/>
306 </li>
307 </ul>
308 </li>
309</ul>
310
311</li>
312<li>
313
314<b>Problems with Symbols</b>
315<ul>
316 <li>
317 removed symbols (functions or global data)
318 </li>
319 <li>
320 added/removed parameters
321 </li>
322 <li>
323 change of a parameter/return value type
324 </li>
325 <li>
326 change of default parameter value
327 </li>
328 <li>
329 renamed parameters
330 </li>
331 <li>
332 incorrect version change
333 </li>
334 <li>
335 changed attributes (const, volatile, static, etc.)
336
337 <br/>
338 <br/>
339 </li>
340</ul>
341
342</li>
343<li>
344<b>Problems with Constants (#defines)</b>
345<ul>
346<li>
347 changed value
348</li>
349</ul>
350
351</li>
352</ul>
353<p/>
354
Andrey Ponomarenko26742a82016-09-27 18:27:08 +0300355See <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.
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300356
357<a name="SourceProblems"></a>
358<h2>Detectable Source Compatibility Problems</h2>
359<ul>
360<li>
361
362<b>Problems with Data Types</b>
363<ul>
364 <li>
365 Structures, Classes and Unions
366 <ul>
367 <li>
368 removed/renamed fields
369 </li>
370 <li>
371 change of a field type
372 </li>
373 <li>
374 changes in fields (recursive analysis)
375 </li>
376 </ul>
377 </li>
378 <li>
379 Classes
380 <ul>
381 <li>
382 added/removed base classes
383 </li>
384 <li>
385 change access level of a field or method
386 </li>
387 <li>
388 added pure virtual methods
389 </li>
390 </ul>
391 </li>
392 <li>
393 Enumerations
394 <ul>
395 <li>
396 removed/renamed members
397
398 <br/>
399 <br/>
400 </li>
401 </ul>
402 </li>
403</ul>
404</li>
405
406<li>
407
408<b>Problems with Symbols</b>
409<ul>
410 <li>
411 removed symbols (functions or global data)
412 </li>
413 <li>
414 added/removed parameters
415 </li>
416 <li>
417 change of a parameter type
418 </li>
419 <li>
420 removed default value of parameter
421 </li>
422 <li>
423 change of return value type
424 </li>
425 <li>
426 changed attributes (const, static, etc.)
427 </li>
428</ul>
429
430</li>
431
432</ul>
433
434<a name="Dump"></a>
435<h2>Create ABI Dumps</h2>
436The 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.
437<p/>
438The ABI dump consists of:
439
440<ul>
441
442<li>
443 <b>Types Information</b>
444 <ul>
445 <li>
446 Attributes (name, size, header, access, base types, etc.)
447 </li>
448 <li>
449 Fields (name, type, size, position, alignment, access, specifiers, etc.)
450 </li>
451 <li>
452 V-table structure (offsets, entries)
453 </li>
454 <li>
455 Etc.
456 </li>
457 </ul>
458</li>
459
460<li>
461 <b>Symbols Information</b>
462 <ul>
463 <li>
464 Attributes (name, mangled name, header, access, specifiers, etc.)
465 </li>
466 <li>
467 Parameters (name, type, position, alignment, etc.)
468 </li>
469 <li>
470 Etc.
471 </li>
472 </ul>
473</li>
474
475<li>
476 Etc.
477</li>
478
479</ul>
480
481The 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).
482
483<p/>
484The 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.
485<p/>
486To create an ABI dump use <code>-dump</code> option:
487<p/>
488<code class='code'>abi-compliance-checker -lib NAME -dump VER.xml</code>
489<p/>
490The ABI dump will be generated to:
491<p/>
492<code class='code'>abi_dumps/NAME/NAME_VER.abi.tar.gz</code>
493<p/>
494To compare ABI dumps pass them as the descriptors:
495<p/>
496<code class='code'>abi-compliance-checker -lib NAME -old V1.abi.tar.gz -new V2.abi.tar.gz</code>
497
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300498<a name="Report"></a>
499<h2>Report Format</h2>
500The tool supports two formats of a compatibility report: HTML (default) and XML. To generate XML report you should specify <code>-xml</code> additional option.
501<p/>
502The report consists of:
503
504<ul>
505 <li>
506 <b>Test Info</b> - The library name and compared version numbers. Environment info: GCC version and CPU type.
507 </li>
508 <li>
509 <b>Test Results</b> - Verdict on compatibility. Number of header files, shared libraries, symbols and data types checked by the tool.
510 </li>
511 <li>
512 <b>Problem Summary</b> - Classification of compatibility problems.
513 </li>
514 <li>
515 <b>Added Symbols</b> - The list of added symbols.
516 </li>
517 <li>
518 <b>Removed Symbols</b> - The list of removed symbols.
519 </li>
520 <li>
521 <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.
522 </li>
523 <li>
524 <b>Problems with Symbols</b> - The list of compatibility problems caused by changes in symbol parameters or attributes (divided by the severity level).
525 </li>
526 <li>
527 <b>Problems with Constants</b> - The list of changed constants (#defines).
528 </li>
529 <li>
530 <b>Other Changes in Data Types</b> - The list of compatible changes in data types.
531 </li>
532 <li>
533 <b>Other Changes in Symbols</b> - The list of compatible changes in symbols.
534 </li>
535</ul>
536
537<a name="Verdict"></a>
538<h2>Verdict on Compatibility</h2>
539If 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.
540
541<a name="Error"></a>
542<h2>Error Codes</h2>
543<table class='summary'>
544<tr><th>Code</th><th>Meaning</th></tr>
545<tr><td>0</td><td>Compatible. The tool has run without any errors.</td></tr>
546<tr><td>1</td><td>Incompatible. The tool has run without any errors.</td></tr>
547<tr><td>2</td><td>Common error code (undifferentiated).</td></tr>
548<tr><td>3</td><td>A system command is not found.</td></tr>
549<tr><td>4</td><td>Cannot access input files.</td></tr>
550<tr><td>5</td><td>Cannot compile header files.</td></tr>
551<tr><td>6</td><td>Headers have been compiled with minor errors.</td></tr>
552<tr><td>7</td><td>Invalid input ABI dump.</td></tr>
553<tr><td>8</td><td>Unsupported version of input ABI dump.</td></tr>
554<tr><td>9</td><td>Cannot find a module.</td></tr>
555<tr><td>10</td><td>Empty intersection between headers and shared objects.</td></tr>
556<tr><td>11</td><td>Empty set of symbols in headers.</td></tr>
557</table>
558
559<a name="FAQ"></a>
560<h2>FAQ</h2>
561<ul>
562 <li>
563 <b>What is an ABI and how does it differ from an API?</b>
564 <p/>
565 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.
566 </li>
567 <li>
568 <b>Why does this tool need both shared libraries and header files to check ABI compliance?</b>
569 <p/>
570 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.
571 </li>
572</ul>
573
574<a name="Similar"></a>
575<h2>Similar Tools </h2>
576<ul>
577 <li>
578 <b>icheck</b> - C interface ABI/API checker.
579 </li>
580 <li>
581 <b>BCS</b> - The Symbian binary compatibility suite.
582 </li>
583 <li>
584 <b>shlib-compat</b> - ABI compatibility checker that uses DWARF debug info.
585 </li>
586 <li>
587 <b>qbic</b> - A tool to check for binary incompatibilities in Qt4 Toolkit.
588 </li>
589 <li>
590 <b>libabigail</b> - A C++ library for ABI analysis.
591 </li>
592 <li>
593 <b>chkshlib, cmpdylib, cmpshlib</b> - Tools to compare binary symbols.
594 </li>
595</ul>
596
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300597<a name="Bugs"></a>
598<h2>Bugs</h2>
599Please post bug reports, feature requests and questions to the <a href="https://github.com/lvc/abi-compliance-checker/issues">issue tracker</a>.
600<p/>
601
602<a name="Maintainers"></a>
603<h2>Maintainers</h2>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +0300604The tool is developed by <a href="https://www.linkedin.com/in/andreyponomarenko">Andrey Ponomarenko</a>.
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300605
606<a name="ChangeLog"></a>
607<h2>Changes</h2>
608You can find changelog <a href='Changelog.html'>here</a>.
609
610<a name="Articles"></a>
611<h2>Articles</h2>
612
613<ul>
614 <li>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +0300615 <a href='https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a>, KDE TechBase
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300616 </li>
617 <li>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +0300618 <a href='https://community.kde.org/Policies/Binary_Compatibility_Examples'>"Binary Compatibility Examples"</a>, KDE TechBase
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300619 </li>
620 <li>
Andrey Ponomarenko26742a82016-09-27 18:27:08 +0300621 <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
Andrey Ponomarenkod48d9722015-08-13 20:14:50 +0300622 </li>
623 <li>
624 <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
625 </li>
626 <li>
627 <a href='http://refspecs.linux-foundation.org/cxxabi-1.83.html'>"Itanium C++ ABI"</a>, linux-foundation.org
628 </li>
629 <li>
630 <a href='http://www.ros.org/reps/rep-0009.html'>"ABI Compatibility"</a>, Josh Faust
631 </li>
632 <li>
633 <a href='http://blog.famillecollet.com/post/2010/06/20/ABI-%3A-stability-check'>"ABI : stability check"</a>, Les RPM de Remi - Blog
634 </li>
635 <li>
636 <a href='http://www.agner.org/optimize/calling_conventions.pdf'>"Calling conventions for different C++ compilers and operating systems"</a>, Agner Fog
637 </li>
638 <li>
639 <a href='http://www.angelcode.com/dev/callconv/callconv.html'>"Calling conventions on the x86 platform"</a>, Andreas Jonsson
640 </li>
641 <li>
642 <a href='http://blog.qt.digia.com/blog/2009/08/12/some-thoughts-on-binary-compatibility/'>"Some thoughts on binary compatibility"</a>, Thiago Macieira
643 </li>
644 <li>
645 <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
646 </li>
647 <li>
648 <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
649 </li>
650 <li>
651 <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
652 </li>
653 <li>
654 <a href='http://chadaustin.me/cppinterface.html'>"Binary-compatible C++ Interfaces"</a>, Chad Austin
655 </li>
656 <li>
657 <a href='http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html'>"ABI Policy and Guidelines"</a>, gnu.org
658 </li>
659 <li>
660 <a href='http://gcc.gnu.org/onlinedocs/gcc/Compatibility.html'>"Binary Compatibility"</a>, gnu.org
661 </li>
662 <li>
663 <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
664 </li>
665 <li>
666 <a href='http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#binarycompat'>"When binary compatibility breaks"</a>, Debian Library Packaging guide
667 </li>
668 <li>
669 <a href='http://techbase.kde.org/Policies/Library_Code_Policy'>"Library Code Policy"</a>, KDE TechBase
670 </li>
671 <li>
672 <a href='http://people.redhat.com/drepper/dsohowto.pdf'>"How To Write Shared Libraries"</a>, Ulrich Drepper
673 </li>
674 <li>
675 <a href='http://tldp.org/HOWTO/Program-Library-HOWTO/'>"Program Library HOWTO"</a>, linux.org
676 </li>
677 <li>
678 <a href='http://plan99.net/~mike/writing-shared-libraries.html'>"Writing shared libraries"</a>, Mike Hearn
679 </li>
680 <li>
681 <a href='http://www.ayukov.com/essays/linuxdll.html'>"Shared libraries in Linux: growing pains or fundamental problem?"</a>, Sergey Ayukov
682 </li>
683 <li>
684 <a href='http://c2.com/cgi/wiki?FragileBinaryInterfaceProblem'>"Fragile Binary Interface Problem"</a>, Steven Newton
685 </li>
686 <li>
687 <a href='http://www.oocities.org/mrshrap/linker.html'>"The amazing world of library incompatibility"</a>, oocities.org
688 </li>
689 <li>
690 <a href='http://www.elpauer.org/?p=230'>"ABI compatibility in C++"</a>, elpauer.org
691 </li>
692 <li>
693 <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ł Górny
694 </li>
695 <li>
696 <a href='http://sourceware.org/glibc/wiki/Testing/ABI_checker'>"ABI compliance checker Notes"</a>, sourceware.org
697 </li>
698 <li>
699 <a href='http://developer.symbian.org/wiki/index.php/Preserving_Compatibility'>"Preserving Compatibility"</a>, symbian.org
700 </li>
701 <li>
702 <a href='http://www.macieira.org/blog/2012/01/architectures-and-abis-detailed/'>"Architectures and ABIs detailed"</a>, Thiago Macieira's blog
703 </li>
704 <li>
705 <a href='http://accu.org/index.php/journals/1718'>"Interface Versioning in C++"</a>, ACCU
706 </li>
707 <li>
708 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>
709 </li>
710 <li>
711 <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
712 </li>
713 <li>
714 <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
715 </li>
716 <li>
717 <a href='http://debconf14-video.debian.net/video/286/acc-for-abi-breaks'>"ACC for abi breaks"</a>, Dimitri Ledkov
718 </li>
719</ul>
720
721<div class="footer">
722 get the source code on GitHub : <a href="https://github.com/lvc/abi-compliance-checker">lvc/abi-compliance-checker</a>
723</div>
724
725<br/>
726<br/>
727
728</div>
729</body>
730</html>