From 6f9459f7fe7db16b10ad1700fbb5c833e3dd4fec Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Thu, 3 Oct 2019 14:24:53 +0000 Subject: [PATCH] [libc++abi] Do not export some implementation-detail functions Summary: 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. Reviewers: phosek, mclow.lists, EricWF Subscribers: christof, jkorous, dexonsmith, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D68357 llvm-svn: 373602 --- libcxxabi/lib/itanium-base.exp | 5 ----- libcxxabi/src/cxa_exception.h | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/libcxxabi/lib/itanium-base.exp b/libcxxabi/lib/itanium-base.exp index ff0f8128a95..c08c711f7cf 100644 --- a/libcxxabi/lib/itanium-base.exp +++ b/libcxxabi/lib/itanium-base.exp @@ -366,8 +366,3 @@ __ZSt14set_unexpectedPFvvE __ZSt15get_new_handlerv __ZSt15set_new_handlerPFvvE __ZSt9terminatev - -# Misc -__ZN10__cxxabiv119__getExceptionClassEPK17_Unwind_Exception -__ZN10__cxxabiv119__setExceptionClassEP17_Unwind_Exceptiony -__ZN10__cxxabiv121__isOurExceptionClassEPK17_Unwind_Exception diff --git a/libcxxabi/src/cxa_exception.h b/libcxxabi/src/cxa_exception.h index d7999e0a175..c94621d5685 100644 --- a/libcxxabi/src/cxa_exception.h +++ b/libcxxabi/src/cxa_exception.h @@ -23,9 +23,9 @@ static const uint64_t kOurExceptionClass = 0x434C4E47432B2B00; // CLNGC 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)