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