2016-10-14 10:27:44 +08:00
ABI Changelog
==============
This changelog contains information about ABI changes in libc++. Specifically
the addition and deletion of symbols from the libc++ dylib.
Each entry should start with the revision number followed by a description of
the change. The entry should contain a summary of the ABI changes made,
including what symbols were added, removed, or changed.
To generate a summary use "sym_diff.py" diffing against the appropriate ABI list.
Afterwards the ABI list should be updated to include the new changes.
New entries should be added directly below the "Version" header.
2018-05-30 07:52:14 +08:00
-----------
2018-10-31 07:24:02 +08:00
Version 8.0
2018-05-30 07:52:14 +08:00
-----------
2018-10-27 04:08:43 +08:00
* r345260 - Making libc++ build under -fvisibility=hidden
2018-10-25 20:13:43 +08:00
The change marks __thread_specific_ptr<__thread_struct>::__at_thread_exit(void*)
with hidden visibility. This removes a symbol from the shared libraries,
however this is not an ABI break because it's impossible for programs linking
against libc++.dylib to actually depend on that symbol. The reason is that
the symbol is exported from the shared library through an implicit
instantiation present in the dylib itself only. Furthermore, if a user's
dylib was implicitly instantiating __thread_specific_ptr<T>::__at_thread_exit
(because it's defined in the headers), marking that symbol as hidden would
not be an ABI break for them because none of their users could actually be
using the symbol in their dylib (because it's an implicit instantiation).
This change also marks __start_std_streams as hidden -- this variable is
only required to initialize the streams, and nobody should depend on it
from outside the dylib.
x86_64-linux-gnu
----------------
Symbol removed: _ZNSt3__121__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
Symbol removed: _ZNSt3__119__start_std_streamsE
x86_64-apple-darwin16.0
-----------------------
Symbol removed: __ZNSt3__221__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
Symbol removed: __ZNSt3__119__start_std_streamsE
2018-10-31 07:24:02 +08:00
-----------
Version 7.0
-----------
2018-10-25 20:13:43 +08:00
2018-09-23 02:05:28 +08:00
* r338479 - Elementary string conversions for integral types
The change emits __u64toa and __u32toa under std::__1::__itoa.
x86_64-linux-gnu
----------------
Symbol added: _ZNSt3__16__itoa8__u64toaEmPc
Symbol added: _ZNSt3__16__itoa8__u32toaEjPc
x86_64-apple-darwin16.0
-----------------------
2018-09-24 05:10:06 +08:00
Symbol added: __ZNSt3__16__itoa8__u64toaEyPc
Symbol added: __ZNSt3__16__itoa8__u32toaEjPc
2018-09-23 02:05:28 +08:00
2018-05-30 07:52:14 +08:00
* r333467 - Fix embarrasing typo in uncaught_exceptions.
This bug caused __uncaught_exception to be ODR used instead of
__uncaught_exceptions. This change is non-ABI breaking because the symbols
for std::uncaught_exception and std::uncaught_exceptions haven't changed,
and because users shouldn't be depending directly on libc++ exporting
__uncaught_exception/__uncaught_exceptions.
All Platforms
----------------
SYMBOL REMOVED: __cxa_uncaught_exception
Symbol added: __cxa_uncaught_exceptions
2017-03-02 10:51:27 +08:00
-----------
Version 5.0
-----------
2017-09-18 05:00:27 +08:00
* r313500 - Fix undefined "___cxa_deleted_virtual" symbol in macosx
2017-09-18 04:59:43 +08:00
x86_64-linux-gnu
----------------
No changes
x86_64-apple-darwin16.0
-----------------------
Symbol added: ___cxa_deleted_virtual
[libc++] Make _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS export members
When building libc++ with hidden visibility, we want explicit template
instantiations to export members. This is consistent with existing
Windows behavior, and is necessary for clients to be able to link
against a hidden visibility built libc++ without running into lots of
missing symbols.
An unfortunate side effect, however, is that any template methods of a
class with an explicit instantiation will get default visibility when
instantiated, unless the methods are explicitly marked inline or hidden
visibility. This is not desirable for clients of libc++ headers who wish
to control their visibility, and led to PR30642.
Annotate all problematic methods with an explicit visibility specifier
to avoid this. The problematic methods were found by running
https://github.com/smeenai/bad-visibility-finder against the libc++
headers after making the _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS change. The
methods were marked with the new _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
macro, which was created for this purpose.
It should be noted that _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS was originally
intended to expand to default visibility, and was changed to expanding
to default type visibility to fix PR30642. The visibility macro
documentation was not updated accordingly, however, so this change makes
the macro consistent with its documentation again, while explicitly
fixing the methods which resulted in that PR.
Differential Revision: https://reviews.llvm.org/D29157
llvm-svn: 296731
2017-03-02 11:02:50 +08:00
* r296729 - Remove std::num_get template methods which should be inline
2017-03-02 10:51:27 +08:00
These functions should never have had visible definitions in the dylib but
since they were previously not specified with 'inline' they accidentally
got emitted. This change is non-ABI breaking because every "linkage unit"
must contain its own definition.
x86_64-linux-gnu
----------------
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
x86_64-apple-darwin16.0
-----------------------
No changes
2016-10-14 10:27:44 +08:00
-----------
Version 4.0
-----------
2016-12-28 13:20:27 +08:00
* r290651 - Add _LIBCPP_ASSERT debug handling functions
2016-12-28 12:58:52 +08:00
All Platforms
-------------
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKNS_19__libcpp_debug_infoE
Symbol added: _ZNSt3__124__libcpp_debug_exceptionD1Ev
Symbol added: _ZTINSt3__124__libcpp_debug_exceptionE
Symbol added: _ZNSt3__129__libcpp_throw_debug_functionERKNS_19__libcpp_debug_infoE
Symbol added: _ZNSt3__124__libcpp_debug_exceptionD2Ev
Symbol added: _ZNSt3__129__libcpp_abort_debug_functionERKNS_19__libcpp_debug_infoE
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKS0_
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1Ev
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKNS_19__libcpp_debug_infoE
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2Ev
Symbol added: _ZTSNSt3__124__libcpp_debug_exceptionE
Symbol added: _ZNSt3__123__libcpp_debug_functionE
Symbol added: _ZNKSt3__124__libcpp_debug_exception4whatEv
Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKS0_
Symbol added: _ZNSt3__124__libcpp_debug_exceptionD0Ev
Symbol added: _ZTVNSt3__124__libcpp_debug_exceptionE
Symbol added: _ZNSt3__127__libcpp_set_debug_functionEPFvRKNS_19__libcpp_debug_infoEE
2016-12-03 07:11:28 +08:00
* r288547 - Implement C++17 <variant>
All Platforms
-------------
Symbol added: _ZTVSt18bad_variant_access
Symbol added: _ZTISt18bad_variant_access
Symbol added: _ZTSSt18bad_variant_access
Symbol added: _ZNKSt18bad_variant_access4whatEv
2017-03-02 10:51:27 +08:00
* r285537 - Remove std::string::append template methods which should be inline
2016-10-31 11:40:29 +08:00
These functions should never have had visible definitions in the dylib but
since they were previously not specified with 'inline' they accidentally
got emitted. This change is non-ABI breaking because every "linkage unit"
must contain its own definition.
x86_64-linux-gnu
----------------
SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
x86_64-apple-darwin16.0
-----------------------
No changes
[libcxx] Build with -fvisibility-inlines-hidden -- Remove 20 inline definitions from the dylib
Summary:
This patch turns on `-fvisibility-inlines-hidden` when building the dylib. This is important so that libc++.dylib doesn't accidentally export inline-functions which are ODR used somewhere in the dylib.
On OS X this change has no effect on the current ABI of the dylib. Unfortunately on Linux there are already ~20 inline functions which are unintentionally exported by the dylib. Almost all of these are implicitly generated destructors. I believe removing these function definitions is safe because every "linkage unit" which uses these functions has its own definition, and therefore shouldn't be dependent on libc++.dylib to provide them.
Also could a FreeBSD maintainer comment on the ABI compatibility of this patch?
Reviewers: mclow.lists, emaste, dexonsmith, joker-eph-DISABLED, jroelofs, danalbert, mehdi_amini, compnerd, dim
Subscribers: beanz, mgorny, cfe-commits, modocache
Differential Revision: https://reviews.llvm.org/D25593
llvm-svn: 285101
2016-10-26 03:43:44 +08:00
2016-10-26 03:44:38 +08:00
* r285101 - Add -fvisibility-inlines-hidden when building libc++.
[libcxx] Build with -fvisibility-inlines-hidden -- Remove 20 inline definitions from the dylib
Summary:
This patch turns on `-fvisibility-inlines-hidden` when building the dylib. This is important so that libc++.dylib doesn't accidentally export inline-functions which are ODR used somewhere in the dylib.
On OS X this change has no effect on the current ABI of the dylib. Unfortunately on Linux there are already ~20 inline functions which are unintentionally exported by the dylib. Almost all of these are implicitly generated destructors. I believe removing these function definitions is safe because every "linkage unit" which uses these functions has its own definition, and therefore shouldn't be dependent on libc++.dylib to provide them.
Also could a FreeBSD maintainer comment on the ABI compatibility of this patch?
Reviewers: mclow.lists, emaste, dexonsmith, joker-eph-DISABLED, jroelofs, danalbert, mehdi_amini, compnerd, dim
Subscribers: beanz, mgorny, cfe-commits, modocache
Differential Revision: https://reviews.llvm.org/D25593
llvm-svn: 285101
2016-10-26 03:43:44 +08:00
Although this change removes symbols, it should still be non-ABI breaking
since all of the definitions removed are inline functions. For this reason
removing these symbols is safe because every "linkage unit" which uses these
functions will contain their own definition.
x86_64-linux-gnu
----------------
SYMBOL REMOVED: _ZNSt12bad_any_castD0Ev
SYMBOL REMOVED: _ZNSt12experimental15fundamentals_v112bad_any_castD0Ev
SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDiED0Ev
SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDsED0Ev
SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IwED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb0EED0Ev
SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb1EED0Ev
SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD0Ev
SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD2Ev
SYMBOL REMOVED: _ZNSt3__117__libcpp_sscanf_lEPKcP15__locale_structS1_z
SYMBOL REMOVED: _ZNSt3__119__libcpp_asprintf_lEPPcP15__locale_structPKcz
SYMBOL REMOVED: _ZNSt3__119__libcpp_snprintf_lEPcmP15__locale_structPKcz
SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev
SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev
SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IwED0Ev
x86_64-apple-darwin16.0
-----------------------
No Changes - inline symbols are already hidden
2016-10-14 14:47:37 +08:00
* r284206 - Implement C++17 aligned allocation in <new>
2016-10-14 14:46:30 +08:00
x86_64-linux-gnu
----------------
Symbol added: posix_memalign@GLIBC_2.2.5
Symbol added: _ZdaPvSt11align_val_t
Symbol added: _ZdlPvSt11align_val_t
Symbol added: _ZnamSt11align_val_t
Symbol added: _ZdaPvmSt11align_val_t
Symbol added: _ZdlPvmSt11align_val_t
Symbol added: _ZdlPvSt11align_val_tRKSt9nothrow_t
Symbol added: _ZnwmSt11align_val_tRKSt9nothrow_t
Symbol added: _ZnamSt11align_val_tRKSt9nothrow_t
Symbol added: _ZdaPvSt11align_val_tRKSt9nothrow_t
Symbol added: _ZnwmSt11align_val_t
2016-10-14 10:27:44 +08:00
* r283980 - Implement C++17 <optional>
x86_64-linux-gnu
----------------
Symbol added: _ZTISt19bad_optional_access
Symbol added: _ZNSt19bad_optional_accessD0Ev
Symbol added: _ZNSt19bad_optional_accessD1Ev
Symbol added: _ZNSt19bad_optional_accessD2Ev
Symbol added: _ZTVSt19bad_optional_access
Symbol added: _ZTSSt19bad_optional_access
2016-10-14 13:10:06 +08:00
* r278310 - Implement C++17 <any>
x86_64-linux-gnu
----------------
Symbol added: _ZNKSt12bad_any_cast4whatEv
Symbol added: _ZNSt12bad_any_castD0Ev
Symbol added: _ZTISt12bad_any_cast
Symbol added: _ZTSSt12bad_any_cast
Symbol added: _ZTVSt12bad_any_cast
2017-02-17 09:53:16 +08:00
2017-02-17 09:56:57 +08:00
* r295398 - Remove basic_string::insert and basic_string::replace template methods
which should be inline.
2017-02-17 09:53:16 +08:00
These functions should never have had visible definitions in the dylib but
since they were previously not specified with 'inline' they accidentally
got emitted. This change is non-ABI breaking because every "linkage unit"
must contain its own definition.
x86_64-linux-gnu
----------------
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_
SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
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_
SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_