[libcxx-commits] [PATCH] D68357: [libc++abi] Do not export some implementation-detail functions

Louis Dionne via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Oct 2 14:24:18 PDT 2019


ldionne created this revision.
ldionne added reviewers: phosek, mclow.lists.
Herald added a reviewer: EricWF.
Herald added subscribers: libcxx-commits, dexonsmith, jkorous, christof.
Herald added a project: libc++.

Those functions started being mistakenly exported from the libc++abi
shared library after commit r344152 in 2018. Removing these symbols is
technically an ABI break. However, they are not part of the C++ ABI,
they haven't ever been re-exported from libc++, and they are not
declared in any public header, so it's very unlikely that calls to
these functions exist out there. Also, the functions have reserved
names, so any impacted user would have to have tried really hard
being broken by this removal.

Note that avoiding this kind of problem is exactly why we're now
controlling exported symbols explicitly with a textual list.

Also note that applying the hidden visibility attribute is necessary
because the list of exported symbols is only used on Apple platforms
for the time being.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D68357

Files:
  libcxxabi/lib/itanium-base.exp
  libcxxabi/src/cxa_exception.h


Index: libcxxabi/src/cxa_exception.h
===================================================================
--- libcxxabi/src/cxa_exception.h
+++ libcxxabi/src/cxa_exception.h
@@ -23,9 +23,9 @@
 static const uint64_t kOurDependentExceptionClass = 0x434C4E47432B2B01; // CLNGC++\1
 static const uint64_t get_vendor_and_language     = 0xFFFFFFFFFFFFFF00; // mask for CLNGC++
 
-uint64_t __getExceptionClass  (const _Unwind_Exception*);
-void     __setExceptionClass  (      _Unwind_Exception*, uint64_t);
-bool     __isOurExceptionClass(const _Unwind_Exception*);
+_LIBCXXABI_HIDDEN uint64_t __getExceptionClass  (const _Unwind_Exception*);
+_LIBCXXABI_HIDDEN void     __setExceptionClass  (      _Unwind_Exception*, uint64_t);
+_LIBCXXABI_HIDDEN bool     __isOurExceptionClass(const _Unwind_Exception*);
 
 struct _LIBCXXABI_HIDDEN __cxa_exception {
 #if defined(__LP64__) || defined(_LIBCXXABI_ARM_EHABI)
Index: libcxxabi/lib/itanium-base.exp
===================================================================
--- libcxxabi/lib/itanium-base.exp
+++ libcxxabi/lib/itanium-base.exp
@@ -366,8 +366,3 @@
 __ZSt15get_new_handlerv
 __ZSt15set_new_handlerPFvvE
 __ZSt9terminatev
-
-# Misc
-__ZN10__cxxabiv119__getExceptionClassEPK17_Unwind_Exception
-__ZN10__cxxabiv119__setExceptionClassEP17_Unwind_Exceptiony
-__ZN10__cxxabiv121__isOurExceptionClassEPK17_Unwind_Exception


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68357.222913.patch
Type: text/x-patch
Size: 1365 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20191002/276650d5/attachment.bin>


More information about the libcxx-commits mailing list