Home | History | Annotate | Download | only in abi
      1 ABI Changelog
      2 ==============
      3 This changelog contains information about ABI changes in libc++. Specifically
      4 the addition and deletion of symbols from the libc++ dylib.
      5 
      6 Each entry should start with the revision number followed by a description of
      7 the change. The entry should contain a summary of the ABI changes made,
      8 including what symbols were added, removed, or changed.
      9 
     10 To generate a summary use "sym_diff.py" diffing against the appropriate ABI list.
     11 Afterwards the ABI list should be updated to include the new changes.
     12 
     13 New entries should be added directly below the "Version" header.
     14 
     15 -----------
     16 Version 8.0
     17 -----------
     18 
     19 * rXXXXX - Remove std::bad_array_length
     20 
     21   The change removes the definition of std::bad_array_length (which never made
     22   it into the standard) from the headers and the dylib. This is technically an
     23   ABI break because the symbols are shipped starting with mac OSX 10.13, however
     24   users couldn't be relying on the functionality because it is marked as being
     25   unavailable using Clang's availability attribute.
     26 
     27   x86_64-apple-darwin16.0
     28   -----------------------
     29   Symbol removed: __ZNKSt16bad_array_length4whatEv
     30   Symbol removed: __ZNKSt16bad_array_length4whatEv
     31   Symbol removed: __ZNSt16bad_array_lengthC1Ev
     32   Symbol removed: __ZNSt16bad_array_lengthC1Ev
     33   Symbol removed: __ZNSt16bad_array_lengthC2Ev
     34   Symbol removed: __ZNSt16bad_array_lengthC2Ev
     35   Symbol removed: __ZNSt16bad_array_lengthD0Ev
     36   Symbol removed: __ZNSt16bad_array_lengthD0Ev
     37   Symbol removed: __ZNSt16bad_array_lengthD1Ev
     38   Symbol removed: __ZNSt16bad_array_lengthD1Ev
     39   Symbol removed: __ZNSt16bad_array_lengthD2Ev
     40   Symbol removed: __ZNSt16bad_array_lengthD2Ev
     41   Symbol removed: __ZTISt16bad_array_length
     42   Symbol removed: __ZTISt16bad_array_length
     43   Symbol removed: __ZTSSt16bad_array_length
     44   Symbol removed: __ZTSSt16bad_array_length
     45   Symbol removed: __ZTVSt16bad_array_length
     46   Symbol removed: __ZTVSt16bad_array_length
     47 
     48 * r347395 - Making libc++ build under -fvisibility=hidden on Linux
     49 
     50   The change marks several function templates as hidden. This removes symbols
     51   from the shared library, but this is not an ABI break because it's impossible
     52   for programs linking against libc++.so to actually depend on that symbol.
     53   The reason is that the symbol is exported from the shared library through
     54   an implicit instantiation present in the shared object itself only. Furthermore,
     55   if a user's shared object was implicitly instantiating one of these functions,
     56   marking that symbol as hidden would not be an ABI break for them because none
     57   of their users could actually be using the symbol in their dylib (because
     58   it's an implicit instantiation).
     59 
     60   x86_64-linux-gnu
     61   ----------------
     62   Symbol removed: _ZNSt3__125__num_get_signed_integralIlEET_PKcS3_Rji
     63   Symbol removed: _ZNSt3__125__num_get_signed_integralIxEET_PKcS3_Rji
     64   Symbol removed: _ZNSt3__127__num_get_unsigned_integralIjEET_PKcS3_Rji
     65   Symbol removed: _ZNSt3__127__num_get_unsigned_integralImEET_PKcS3_Rji
     66   Symbol removed: _ZNSt3__127__num_get_unsigned_integralItEET_PKcS3_Rji
     67   Symbol removed: _ZNSt3__127__num_get_unsigned_integralIyEET_PKcS3_Rji
     68   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIaaEEPaEEjT0_S5_S5_S5_S5_T_
     69   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIccEEPcEEjT0_S5_S5_S5_S5_T_
     70   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIddEEPdEEjT0_S5_S5_S5_S5_T_
     71   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIffEEPfEEjT0_S5_S5_S5_S5_T_
     72   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIhhEEPhEEjT0_S5_S5_S5_S5_T_
     73   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIiiEEPiEEjT0_S5_S5_S5_S5_T_
     74   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIjjEEPjEEjT0_S5_S5_S5_S5_T_
     75   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIllEEPlEEjT0_S5_S5_S5_S5_T_
     76   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessImmEEPmEEjT0_S5_S5_S5_S5_T_
     77   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIssEEPsEEjT0_S5_S5_S5_S5_T_
     78   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIttEEPtEEjT0_S5_S5_S5_S5_T_
     79   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIwwEEPwEEjT0_S5_S5_S5_S5_T_
     80   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIxxEEPxEEjT0_S5_S5_S5_S5_T_
     81   Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIyyEEPyEEjT0_S5_S5_S5_S5_T_
     82   Symbol removed: _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_
     83   Symbol removed: _ZSt18make_exception_ptrINSt3__112future_errorEESt13exception_ptrT_
     84 
     85 * r345260 - Making libc++ build under -fvisibility=hidden on Mac OS
     86 
     87   The change marks __thread_specific_ptr<__thread_struct>::__at_thread_exit(void*)
     88   with hidden visibility. This removes a symbol from the shared libraries,
     89   however this is not an ABI break because it's impossible for programs linking
     90   against libc++.dylib to actually depend on that symbol. The reason is that
     91   the symbol is exported from the shared library through an implicit
     92   instantiation present in the dylib itself only. Furthermore, if a user's
     93   dylib was implicitly instantiating __thread_specific_ptr<T>::__at_thread_exit
     94   (because it's defined in the headers), marking that symbol as hidden would
     95   not be an ABI break for them because none of their users could actually be
     96   using the symbol in their dylib (because it's an implicit instantiation).
     97 
     98   This change also marks __start_std_streams as hidden -- this variable is
     99   only required to initialize the streams, and nobody should depend on it
    100   from outside the dylib.
    101 
    102   x86_64-linux-gnu
    103   ----------------
    104   Symbol removed: _ZNSt3__121__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
    105   Symbol removed: _ZNSt3__119__start_std_streamsE
    106 
    107   x86_64-apple-darwin16.0
    108   -----------------------
    109   Symbol removed: __ZNSt3__221__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
    110   Symbol removed: __ZNSt3__119__start_std_streamsE
    111 
    112 -----------
    113 Version 7.0
    114 -----------
    115 
    116 * r338479 - Elementary string conversions for integral types
    117 
    118   The change emits __u64toa and __u32toa under std::__1::__itoa.
    119 
    120   x86_64-linux-gnu
    121   ----------------
    122   Symbol added: _ZNSt3__16__itoa8__u64toaEmPc
    123   Symbol added: _ZNSt3__16__itoa8__u32toaEjPc
    124 
    125   x86_64-apple-darwin16.0
    126   -----------------------
    127   Symbol added: __ZNSt3__16__itoa8__u64toaEyPc
    128   Symbol added: __ZNSt3__16__itoa8__u32toaEjPc
    129 
    130 
    131 * r333467 - Fix embarrasing typo in uncaught_exceptions.
    132 
    133   This bug caused __uncaught_exception to be ODR used instead of
    134   __uncaught_exceptions. This change is non-ABI breaking because the symbols
    135   for std::uncaught_exception and std::uncaught_exceptions haven't changed,
    136   and because users shouldn't be depending directly on libc++ exporting
    137   __uncaught_exception/__uncaught_exceptions.
    138 
    139   All Platforms
    140   ----------------
    141   SYMBOL REMOVED: __cxa_uncaught_exception
    142   Symbol added: __cxa_uncaught_exceptions
    143 
    144 
    145 -----------
    146 Version 5.0
    147 -----------
    148 
    149 * r313500 - Fix undefined "___cxa_deleted_virtual" symbol in macosx
    150 
    151   x86_64-linux-gnu
    152   ----------------
    153   No changes
    154 
    155   x86_64-apple-darwin16.0
    156   -----------------------
    157   Symbol added: ___cxa_deleted_virtual
    158 
    159 * r296729 - Remove std::num_get template methods which should be inline
    160 
    161   These functions should never have had visible definitions in the dylib but
    162   since they were previously not specified with 'inline' they accidentally
    163   got emitted. This change is non-ABI breaking because every "linkage unit"
    164   must contain its own definition.
    165 
    166   x86_64-linux-gnu
    167   ----------------
    168   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
    169   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
    170   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
    171   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
    172   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
    173   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
    174   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
    175   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
    176   SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
    177   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
    178   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
    179   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
    180   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
    181   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
    182   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
    183   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
    184   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
    185   SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
    186 
    187   x86_64-apple-darwin16.0
    188   -----------------------
    189   No changes
    190 
    191 -----------
    192 Version 4.0
    193 -----------
    194 
    195 * r290651 - Add _LIBCPP_ASSERT debug handling functions
    196 
    197   All Platforms
    198   -------------
    199   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKNS_19__libcpp_debug_infoE
    200   Symbol added: _ZNSt3__124__libcpp_debug_exceptionD1Ev
    201   Symbol added: _ZTINSt3__124__libcpp_debug_exceptionE
    202   Symbol added: _ZNSt3__129__libcpp_throw_debug_functionERKNS_19__libcpp_debug_infoE
    203   Symbol added: _ZNSt3__124__libcpp_debug_exceptionD2Ev
    204   Symbol added: _ZNSt3__129__libcpp_abort_debug_functionERKNS_19__libcpp_debug_infoE
    205   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKS0_
    206   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1Ev
    207   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKNS_19__libcpp_debug_infoE
    208   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2Ev
    209   Symbol added: _ZTSNSt3__124__libcpp_debug_exceptionE
    210   Symbol added: _ZNSt3__123__libcpp_debug_functionE
    211   Symbol added: _ZNKSt3__124__libcpp_debug_exception4whatEv
    212   Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKS0_
    213   Symbol added: _ZNSt3__124__libcpp_debug_exceptionD0Ev
    214   Symbol added: _ZTVNSt3__124__libcpp_debug_exceptionE
    215   Symbol added: _ZNSt3__127__libcpp_set_debug_functionEPFvRKNS_19__libcpp_debug_infoEE
    216 
    217 * r288547 - Implement C++17 <variant>
    218 
    219   All Platforms
    220   -------------
    221   Symbol added: _ZTVSt18bad_variant_access
    222   Symbol added: _ZTISt18bad_variant_access
    223   Symbol added: _ZTSSt18bad_variant_access
    224   Symbol added: _ZNKSt18bad_variant_access4whatEv
    225 
    226 * r285537 - Remove std::string::append template methods which should be inline
    227 
    228   These functions should never have had visible definitions in the dylib but
    229   since they were previously not specified with 'inline' they accidentally
    230   got emitted. This change is non-ABI breaking because every "linkage unit"
    231   must contain its own definition.
    232 
    233   x86_64-linux-gnu
    234   ----------------
    235   SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
    236   SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
    237 
    238   x86_64-apple-darwin16.0
    239   -----------------------
    240   No changes
    241 
    242 * r285101 - Add -fvisibility-inlines-hidden when building libc++.
    243 
    244   Although this change removes symbols, it should still be non-ABI breaking
    245   since all of the definitions removed are inline functions. For this reason
    246   removing these symbols is safe because every "linkage unit" which uses these
    247   functions will contain their own definition.
    248 
    249   x86_64-linux-gnu
    250   ----------------
    251   SYMBOL REMOVED: _ZNSt12bad_any_castD0Ev
    252   SYMBOL REMOVED: _ZNSt12experimental15fundamentals_v112bad_any_castD0Ev
    253   SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDiED0Ev
    254   SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDsED0Ev
    255   SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IwED0Ev
    256   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev
    257   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev
    258   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev
    259   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev
    260   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb0EED0Ev
    261   SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb1EED0Ev
    262   SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD0Ev
    263   SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD2Ev
    264   SYMBOL REMOVED: _ZNSt3__117__libcpp_sscanf_lEPKcP15__locale_structS1_z
    265   SYMBOL REMOVED: _ZNSt3__119__libcpp_asprintf_lEPPcP15__locale_structPKcz
    266   SYMBOL REMOVED: _ZNSt3__119__libcpp_snprintf_lEPcmP15__locale_structPKcz
    267   SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev
    268   SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev
    269   SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IwED0Ev
    270 
    271   x86_64-apple-darwin16.0
    272   -----------------------
    273   No Changes - inline symbols are already hidden
    274 
    275 
    276 * r284206 - Implement C++17 aligned allocation in <new>
    277 
    278   x86_64-linux-gnu
    279   ----------------
    280   Symbol added: posix_memalign (a] GLIBC_2.2.5
    281   Symbol added: _ZdaPvSt11align_val_t
    282   Symbol added: _ZdlPvSt11align_val_t
    283   Symbol added: _ZnamSt11align_val_t
    284   Symbol added: _ZdaPvmSt11align_val_t
    285   Symbol added: _ZdlPvmSt11align_val_t
    286   Symbol added: _ZdlPvSt11align_val_tRKSt9nothrow_t
    287   Symbol added: _ZnwmSt11align_val_tRKSt9nothrow_t
    288   Symbol added: _ZnamSt11align_val_tRKSt9nothrow_t
    289   Symbol added: _ZdaPvSt11align_val_tRKSt9nothrow_t
    290   Symbol added: _ZnwmSt11align_val_t
    291 
    292 * r283980 - Implement C++17 <optional>
    293 
    294   x86_64-linux-gnu
    295   ----------------
    296   Symbol added: _ZTISt19bad_optional_access
    297   Symbol added: _ZNSt19bad_optional_accessD0Ev
    298   Symbol added: _ZNSt19bad_optional_accessD1Ev
    299   Symbol added: _ZNSt19bad_optional_accessD2Ev
    300   Symbol added: _ZTVSt19bad_optional_access
    301   Symbol added: _ZTSSt19bad_optional_access
    302 
    303 * r278310 - Implement C++17 <any>
    304 
    305   x86_64-linux-gnu
    306   ----------------
    307   Symbol added: _ZNKSt12bad_any_cast4whatEv
    308   Symbol added: _ZNSt12bad_any_castD0Ev
    309   Symbol added: _ZTISt12bad_any_cast
    310   Symbol added: _ZTSSt12bad_any_cast
    311   Symbol added: _ZTVSt12bad_any_cast
    312 
    313 * r295398 - Remove basic_string::insert and basic_string::replace template methods
    314     which should be inline.
    315 
    316   These functions should never have had visible definitions in the dylib but
    317   since they were previously not specified with 'inline' they accidentally
    318   got emitted. This change is non-ABI breaking because every "linkage unit"
    319   must contain its own definition.
    320 
    321   x86_64-linux-gnu
    322   ----------------
    323   SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertIPKcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorISA_EE5valueENS_11__wrap_iterIPcEEE4typeENSB_IS8_EESA_SA_
    324   SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
    325   SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertIPKwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorISA_EE5valueENS_11__wrap_iterIPwEEE4typeENSB_IS8_EESA_SA_
    326   SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
    327