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