PR libstdc++/23773 partial
2006-08-28 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/23773 partial * docs/html/abi.html: Update. From-SVN: r116527
This commit is contained in:
parent
8c093661a3
commit
689e7ddada
2 changed files with 124 additions and 39 deletions
|
@ -1,3 +1,8 @@
|
|||
2006-08-28 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
PR libstdc++/23773 partial
|
||||
* docs/html/abi.html: Update.
|
||||
|
||||
2006-08-28 Roger Sayle <roger@eyesopen.com>
|
||||
Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
|
|
|
@ -168,10 +168,32 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.1: libgcc_s.so.1</li>
|
||||
<li>gcc-3.3.2: libgcc_s.so.1</li>
|
||||
<li>gcc-3.3.3: libgcc_s.so.1</li>
|
||||
<li>gcc-3.4.0: on m68k-linux and hppa-linux this is either libgcc_s.so.1
|
||||
(when configuring <code>--with-sjlj-exceptions</code>) or
|
||||
libgcc_s.so.2. For all others, this is libgcc_s.so.1.
|
||||
<li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: on m68k-linux and hppa-linux
|
||||
this is either libgcc_s.so.1 (when configuring
|
||||
<code>--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all
|
||||
others, this is libgcc_s.so.1. </li> </ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
||||
<li>Symbol versioning on the libgcc_s.so binary.
|
||||
<p>mapfile: gcc/libgcc-std.ver</p>
|
||||
|
||||
<p>It is versioned with the following labels and version
|
||||
definitions, where the version definition is the maximum for a
|
||||
particular release. Labels are cumulative. If a particular release
|
||||
is not listed, it has the same version labels as the preceeding
|
||||
release.</p>
|
||||
<ul>
|
||||
<li>gcc-3.0.0: GCC_3.0</li>
|
||||
<li>gcc-3.3.0: GCC_3.3</li>
|
||||
<li>gcc-3.3.1: GCC_3.3.1</li>
|
||||
<li>gcc-3.3.2: GCC_3.3.2</li>
|
||||
<li>gcc-3.3.4: GCC_3.3.4</li>
|
||||
<li>gcc-3.4.0: GCC_3.4</li>
|
||||
<li>gcc-3.4.2: GCC_3.4.2</li>
|
||||
<li>gcc-3.4.4: GCC_3.4.4</li>
|
||||
<li>gcc-4.0.0: GCC_4.0.0</li>
|
||||
<li>gcc-4.1.0: GCC_4.1.0</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -198,31 +220,17 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.3: libstdc++.so.5.0.5</li>
|
||||
<li>gcc-3.4.0: libstdc++.so.6.0.0</li>
|
||||
<li>gcc-3.4.1: libstdc++.so.6.0.1</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
||||
<li>Symbol versioning on the libgcc_s.so binary.
|
||||
<p>mapfile: gcc/libgcc-std.ver</p>
|
||||
|
||||
<p>It is versioned with the following labels and version definitions:</p>
|
||||
<ul>
|
||||
<li>gcc-3.0.0: GCC_3.0</li>
|
||||
<li>gcc-3.0.1: GCC_3.0</li>
|
||||
<li>gcc-3.0.2: GCC_3.0</li>
|
||||
<li>gcc-3.0.3: GCC_3.0</li>
|
||||
<li>gcc-3.0.4: GCC_3.0</li>
|
||||
<li>gcc-3.1.0: GCC_3.0</li>
|
||||
<li>gcc-3.1.1: GCC_3.0</li>
|
||||
<li>gcc-3.2.0: GCC_3.0</li>
|
||||
<li>gcc-3.2.1: GCC_3.0</li>
|
||||
<li>gcc-3.2.2: GCC_3.0</li>
|
||||
<li>gcc-3.2.3: GCC_3.0</li>
|
||||
<li>gcc-3.3.0: GCC_3.0</li>
|
||||
<li>gcc-3.3.1: GCC_3.0</li>
|
||||
<li>gcc-3.3.2: GCC_3.0</li>
|
||||
<li>gcc-3.3.3: GCC_3.0</li>
|
||||
<li>gcc-3.4.0: GCC_3.0</li>
|
||||
<li>gcc-3.4.2: libstdc++.so.6.0.2</li>
|
||||
<li>gcc-3.4.3: libstdc++.so.6.0.3</li>
|
||||
<li>gcc-3.4.4: libstdc++.so.6.0.3</li>
|
||||
<li>gcc-3.4.5: libstdc++.so.6.0.3</li>
|
||||
<li>gcc-3.4.6: libstdc++.so.6.0.3</li>
|
||||
<li>gcc-4.0.0: libstdc++.so.6.0.4</li>
|
||||
<li>gcc-4.0.1: libstdc++.so.6.0.5</li>
|
||||
<li>gcc-4.0.2: libstdc++.so.6.0.6</li>
|
||||
<li>gcc-4.0.3: libstdc++.so.6.0.7</li>
|
||||
<li>gcc-4.1.0: libstdc++.so.6.0.7</li>
|
||||
<li>gcc-4.1.1: libstdc++.so.6.0.8</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -238,7 +246,8 @@ on ELF systems).</p>
|
|||
release has both versions. (An example of this would be the
|
||||
gcc-3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
|
||||
GLIBCPP_3.2 for symbols that were introduced in the gcc-3.2.0
|
||||
release.)
|
||||
release.) If a particular release is not listed, it has the same
|
||||
version labels as the preceeding release.
|
||||
</p>
|
||||
<ul>
|
||||
<li>gcc-3.0.0: (Error, not versioned)</li>
|
||||
|
@ -258,6 +267,13 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</li>
|
||||
<li>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</li>
|
||||
<li>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</li>
|
||||
<li>gcc-3.4.2: GLIBCXX_3.4.2</li>
|
||||
<li>gcc-3.4.3: GLIBCXX_3.4.3</li>
|
||||
<li>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</li>
|
||||
<li>gcc-4.0.1: GLIBCXX_3.4.5</li>
|
||||
<li>gcc-4.0.2: GLIBCXX_3.4.6</li>
|
||||
<li>gcc-4.0.3: GLIBCXX_3.4.7</li>
|
||||
<li>gcc-4.1.1: GLIBCXX_3.4.8</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -285,9 +301,9 @@ on ELF systems).</p>
|
|||
<li>gcc-3.1.x: 100 (Error, should be 101)</li>
|
||||
<li>gcc-3.2.x: 102</li>
|
||||
<li>gcc-3.3.x: 102</li>
|
||||
<li>gcc-3.4.x: 102 (when n=1)</li>
|
||||
<li>gcc-3.4.x: 1000 + n (when n>1)</li>
|
||||
<li>gcc-3.4.x: 999999 (when n=0)</li>
|
||||
<li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 102 (when n=1)</li>
|
||||
<li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 1000 + n (when n>1)</li>
|
||||
<li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 999999 (when n=0)</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -304,7 +320,7 @@ on ELF systems).</p>
|
|||
<li>gcc-3.1.x: (Error, not versioned) </li>
|
||||
<li>gcc-3.2.x: <code>-fabi-version=1</code></li>
|
||||
<li>gcc-3.3.x: <code>-fabi-version=1</code></li>
|
||||
<li>gcc-3.4.x: <code>-fabi-version=2</code></li>
|
||||
<li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: <code>-fabi-version=2</code></li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -319,9 +335,10 @@ on ELF systems).</p>
|
|||
</p>
|
||||
|
||||
<p>
|
||||
In addition, the pre-defined macro is defined in the file
|
||||
"c++config" in the "libstdc++-v3/include/bits" directory and is
|
||||
changed every night by an automated script.
|
||||
This macro is defined in the file "c++config" in the
|
||||
"libstdc++-v3/include/bits" directory. (Up to gcc-4.1.0, it was
|
||||
changed every night by an automated script. Since gcc-4.1.0, it is
|
||||
the same value as gcc/DATESTAMP.)
|
||||
</p>
|
||||
<p>
|
||||
It is versioned as follows:
|
||||
|
@ -344,11 +361,21 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.3: 20040214</li>
|
||||
<li>gcc-3.4.0: 20040419</li>
|
||||
<li>gcc-3.4.1: 20040701</li>
|
||||
<li>gcc-3.4.2: 20040906</li>
|
||||
<li>gcc-3.4.3: 20041105</li>
|
||||
<li>gcc-3.4.4: 20050519</li>
|
||||
<li>gcc-3.4.5: 20051201</li>
|
||||
<li>gcc-3.4.6: 20060306</li>
|
||||
<li>gcc-4.0.0: 20050421</li>
|
||||
<li>gcc-4.0.1: 20050707</li>
|
||||
<li>gcc-4.0.2: 20050921</li>
|
||||
<li>gcc-4.0.3: 20060309</li>
|
||||
<li>gcc-4.1.0: 20060228</li>
|
||||
<li>gcc-4.1.1: 20060524</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<p>
|
||||
Incremental bumping of a library pre-defined macro,
|
||||
|
@ -384,8 +411,9 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.1: "3.3.1"</li>
|
||||
<li>gcc-3.3.2: "3.3.2"</li>
|
||||
<li>gcc-3.3.3: "3.3.3"</li>
|
||||
<li>gcc-3.4.0: "version-unused"</li>
|
||||
<li>gcc-3.4.1: "version-unused"</li>
|
||||
<li>gcc-3.4.x: "version-unused"</li>
|
||||
<li>gcc-4.0.x: "version-unused"</li>
|
||||
<li>gcc-4.1.x: "version-unused"</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -424,6 +452,17 @@ on ELF systems).</p>
|
|||
<li>gcc-3.3.3: include/c++/3.3.3</li>
|
||||
<li>gcc-3.4.0: include/c++/3.4.0</li>
|
||||
<li>gcc-3.4.1: include/c++/3.4.1</li>
|
||||
<li>gcc-3.4.2: include/c++/3.4.2</li>
|
||||
<li>gcc-3.4.3: include/c++/3.4.3</li>
|
||||
<li>gcc-3.4.4: include/c++/3.4.4</li>
|
||||
<li>gcc-3.4.5: include/c++/3.4.5</li>
|
||||
<li>gcc-3.4.6: include/c++/3.4.6</li>
|
||||
<li>gcc-4.0.0: include/c++/4.0.0</li>
|
||||
<li>gcc-4.0.1: include/c++/4.0.1</li>
|
||||
<li>gcc-4.0.2: include/c++/4.0.2</li>
|
||||
<li>gcc-4.0.3: include/c++/4.0.3</li>
|
||||
<li>gcc-4.1.0: include/c++/4.1.0</li>
|
||||
<li>gcc-4.1.1: include/c++/4.1.1</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</li>
|
||||
|
@ -857,6 +896,29 @@ from both liba, and the dependent libstdc++.so.6, and libb, with the
|
|||
dependent libstdc++.so.5.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 class="left">
|
||||
<a name="Outstanding Issues">Outstanding Issues</a>
|
||||
</h3>
|
||||
|
||||
<p> Some features in the C++ language make versioning especially
|
||||
difficult. In particular, compiler generated constructs such as
|
||||
implicit instantiations for templates, typeinfo information, and
|
||||
virtual tables all may cause ABI leakage across shared library
|
||||
boundaries. Because of this, mixing C++ ABI's is not recommended at
|
||||
this time.
|
||||
</p>
|
||||
|
||||
<p>For more background on this issue, see these bugzilla entries:</p>
|
||||
|
||||
<p>
|
||||
<a href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
|
||||
</p>
|
||||
|
||||
<h3 class="left">
|
||||
<a name="references">Bibliography / Further Reading</a>
|
||||
</h3>
|
||||
|
@ -897,6 +959,24 @@ Ulrich Drepper, "ELF Symbol Versioning"
|
|||
<a href="http://people.redhat.com/drepper/symbol-versioning">http://people.redhat.com/drepper/symbol-versioning</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
C++ ABI for the ARM Architecture
|
||||
<br />
|
||||
<a href="http://www.arm.com/miscPDFs/8033.pdf">http://www.arm.com/miscPDFs/8033.pdf</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Benjamin Kosnik, ISO C++ J16/06-0046
|
||||
<br />
|
||||
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">Dynamic Shared Objects: Survey and Issues</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Benjamin Kosnik, ISO C++ J16/06-0083
|
||||
<br />
|
||||
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">Versioning With Namespaces</a>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue