From 689e7ddada015f50d4e535902f3079add578bbcc Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Mon, 28 Aug 2006 20:18:22 +0000 Subject: [PATCH] PR libstdc++/23773 partial 2006-08-28 Benjamin Kosnik PR libstdc++/23773 partial * docs/html/abi.html: Update. From-SVN: r116527 --- libstdc++-v3/ChangeLog | 5 + libstdc++-v3/docs/html/abi.html | 158 ++++++++++++++++++++++++-------- 2 files changed, 124 insertions(+), 39 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index eedd86e8654..ebfcdc4d654 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2006-08-28 Benjamin Kosnik + + PR libstdc++/23773 partial + * docs/html/abi.html: Update. + 2006-08-28 Roger Sayle Paolo Carlini diff --git a/libstdc++-v3/docs/html/abi.html b/libstdc++-v3/docs/html/abi.html index 1971b3aa63d..dcbd4388491 100644 --- a/libstdc++-v3/docs/html/abi.html +++ b/libstdc++-v3/docs/html/abi.html @@ -168,10 +168,32 @@ on ELF systems).

  • gcc-3.3.1: libgcc_s.so.1
  • gcc-3.3.2: libgcc_s.so.1
  • gcc-3.3.3: libgcc_s.so.1
  • -
  • gcc-3.4.0: on m68k-linux and hppa-linux this is either libgcc_s.so.1 - (when configuring --with-sjlj-exceptions) or - libgcc_s.so.2. For all others, this is libgcc_s.so.1. +
  • 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 + --with-sjlj-exceptions) or libgcc_s.so.2. For all + others, this is libgcc_s.so.1.
  • +

    + +
  • Symbol versioning on the libgcc_s.so binary. +

    mapfile: gcc/libgcc-std.ver

    + +

    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.

    +
      +
    • gcc-3.0.0: GCC_3.0
    • +
    • gcc-3.3.0: GCC_3.3
    • +
    • gcc-3.3.1: GCC_3.3.1
    • +
    • gcc-3.3.2: GCC_3.3.2
    • +
    • gcc-3.3.4: GCC_3.3.4
    • +
    • gcc-3.4.0: GCC_3.4
    • +
    • gcc-3.4.2: GCC_3.4.2
    • +
    • gcc-3.4.4: GCC_3.4.4
    • +
    • gcc-4.0.0: GCC_4.0.0
    • +
    • gcc-4.1.0: GCC_4.1.0

  • @@ -198,31 +220,17 @@ on ELF systems).

  • gcc-3.3.3: libstdc++.so.5.0.5
  • gcc-3.4.0: libstdc++.so.6.0.0
  • gcc-3.4.1: libstdc++.so.6.0.1
  • - -

    - - -
  • Symbol versioning on the libgcc_s.so binary. -

    mapfile: gcc/libgcc-std.ver

    - -

    It is versioned with the following labels and version definitions:

    -
      -
    • gcc-3.0.0: GCC_3.0
    • -
    • gcc-3.0.1: GCC_3.0
    • -
    • gcc-3.0.2: GCC_3.0
    • -
    • gcc-3.0.3: GCC_3.0
    • -
    • gcc-3.0.4: GCC_3.0
    • -
    • gcc-3.1.0: GCC_3.0
    • -
    • gcc-3.1.1: GCC_3.0
    • -
    • gcc-3.2.0: GCC_3.0
    • -
    • gcc-3.2.1: GCC_3.0
    • -
    • gcc-3.2.2: GCC_3.0
    • -
    • gcc-3.2.3: GCC_3.0
    • -
    • gcc-3.3.0: GCC_3.0
    • -
    • gcc-3.3.1: GCC_3.0
    • -
    • gcc-3.3.2: GCC_3.0
    • -
    • gcc-3.3.3: GCC_3.0
    • -
    • gcc-3.4.0: GCC_3.0
    • +
    • gcc-3.4.2: libstdc++.so.6.0.2
    • +
    • gcc-3.4.3: libstdc++.so.6.0.3
    • +
    • gcc-3.4.4: libstdc++.so.6.0.3
    • +
    • gcc-3.4.5: libstdc++.so.6.0.3
    • +
    • gcc-3.4.6: libstdc++.so.6.0.3
    • +
    • gcc-4.0.0: libstdc++.so.6.0.4
    • +
    • gcc-4.0.1: libstdc++.so.6.0.5
    • +
    • gcc-4.0.2: libstdc++.so.6.0.6
    • +
    • gcc-4.0.3: libstdc++.so.6.0.7
    • +
    • gcc-4.1.0: libstdc++.so.6.0.7
    • +
    • gcc-4.1.1: libstdc++.so.6.0.8

  • @@ -238,7 +246,8 @@ on ELF systems).

    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.

    • gcc-3.0.0: (Error, not versioned)
    • @@ -258,6 +267,13 @@ on ELF systems).

    • gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1
    • gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3
    • gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3
    • +
    • gcc-3.4.2: GLIBCXX_3.4.2
    • +
    • gcc-3.4.3: GLIBCXX_3.4.3
    • +
    • gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1
    • +
    • gcc-4.0.1: GLIBCXX_3.4.5
    • +
    • gcc-4.0.2: GLIBCXX_3.4.6
    • +
    • gcc-4.0.3: GLIBCXX_3.4.7
    • +
    • gcc-4.1.1: GLIBCXX_3.4.8

    @@ -285,9 +301,9 @@ on ELF systems).

  • gcc-3.1.x: 100 (Error, should be 101)
  • gcc-3.2.x: 102
  • gcc-3.3.x: 102
  • -
  • gcc-3.4.x: 102 (when n=1)
  • -
  • gcc-3.4.x: 1000 + n (when n>1)
  • -
  • gcc-3.4.x: 999999 (when n=0)
  • +
  • gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 102 (when n=1)
  • +
  • gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 1000 + n (when n>1)
  • +
  • gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: 999999 (when n=0)
  • @@ -304,7 +320,7 @@ on ELF systems).

  • gcc-3.1.x: (Error, not versioned)
  • gcc-3.2.x: -fabi-version=1
  • gcc-3.3.x: -fabi-version=1
  • -
  • gcc-3.4.x: -fabi-version=2
  • +
  • gcc-3.4.x, gcc-4.0.x, gcc-4.1.x: -fabi-version=2
  • @@ -319,9 +335,10 @@ on ELF systems).

    - 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.)

    It is versioned as follows: @@ -344,11 +361,21 @@ on ELF systems).

  • gcc-3.3.3: 20040214
  • gcc-3.4.0: 20040419
  • gcc-3.4.1: 20040701
  • +
  • gcc-3.4.2: 20040906
  • +
  • gcc-3.4.3: 20041105
  • +
  • gcc-3.4.4: 20050519
  • +
  • gcc-3.4.5: 20051201
  • +
  • gcc-3.4.6: 20060306
  • +
  • gcc-4.0.0: 20050421
  • +
  • gcc-4.0.1: 20050707
  • +
  • gcc-4.0.2: 20050921
  • +
  • gcc-4.0.3: 20060309
  • +
  • gcc-4.1.0: 20060228
  • +
  • gcc-4.1.1: 20060524
  • -
  • Incremental bumping of a library pre-defined macro, @@ -384,8 +411,9 @@ on ELF systems).

  • gcc-3.3.1: "3.3.1"
  • gcc-3.3.2: "3.3.2"
  • gcc-3.3.3: "3.3.3"
  • -
  • gcc-3.4.0: "version-unused"
  • -
  • gcc-3.4.1: "version-unused"
  • +
  • gcc-3.4.x: "version-unused"
  • +
  • gcc-4.0.x: "version-unused"
  • +
  • gcc-4.1.x: "version-unused"
  • @@ -424,6 +452,17 @@ on ELF systems).

  • gcc-3.3.3: include/c++/3.3.3
  • gcc-3.4.0: include/c++/3.4.0
  • gcc-3.4.1: include/c++/3.4.1
  • +
  • gcc-3.4.2: include/c++/3.4.2
  • +
  • gcc-3.4.3: include/c++/3.4.3
  • +
  • gcc-3.4.4: include/c++/3.4.4
  • +
  • gcc-3.4.5: include/c++/3.4.5
  • +
  • gcc-3.4.6: include/c++/3.4.6
  • +
  • gcc-4.0.0: include/c++/4.0.0
  • +
  • gcc-4.0.1: include/c++/4.0.1
  • +
  • gcc-4.0.2: include/c++/4.0.2
  • +
  • gcc-4.0.3: include/c++/4.0.3
  • +
  • gcc-4.1.0: include/c++/4.1.0
  • +
  • gcc-4.1.1: include/c++/4.1.1
  • @@ -857,6 +896,29 @@ from both liba, and the dependent libstdc++.so.6, and libb, with the dependent libstdc++.so.5.

    + +

    + Outstanding Issues +

    + +

    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. +

    + +

    For more background on this issue, see these bugzilla entries:

    + +

    +24660: versioning weak symbols in libstdc++ +

    + +

    +19664: libstdc++ headers should have pop/push of the visibility around the declarations +

    +

    Bibliography / Further Reading

    @@ -897,6 +959,24 @@ Ulrich Drepper, "ELF Symbol Versioning" http://people.redhat.com/drepper/symbol-versioning

    +

    +C++ ABI for the ARM Architecture +
    +http://www.arm.com/miscPDFs/8033.pdf +

    + +

    +Benjamin Kosnik, ISO C++ J16/06-0046 +
    +Dynamic Shared Objects: Survey and Issues +

    + +

    +Benjamin Kosnik, ISO C++ J16/06-0083 +
    +Versioning With Namespaces +

    +