diff options
author | Howard Hinnant <hhinnant@apple.com> | 2012-02-02 20:47:28 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2012-02-02 20:47:28 +0000 |
commit | eaa65afc7bff75649cab2a4be4ce18f82554db5b (patch) | |
tree | 7396b684027c1d47b99a8a297ced48ee4f4ea042 /libcxxabi/src | |
parent | 90ef25c05ed63aab61a946231332e2e708eb6b8d (diff) | |
download | bcm5719-llvm-eaa65afc7bff75649cab2a4be4ce18f82554db5b.tar.gz bcm5719-llvm-eaa65afc7bff75649cab2a4be4ce18f82554db5b.zip |
Work on restricting symbol visibility.
llvm-svn: 149633
Diffstat (limited to 'libcxxabi/src')
-rw-r--r-- | libcxxabi/src/abort_message.cpp | 4 | ||||
-rw-r--r-- | libcxxabi/src/abort_message.h | 3 | ||||
-rw-r--r-- | libcxxabi/src/cxa_demangle.cpp | 6 | ||||
-rw-r--r-- | libcxxabi/src/cxa_exception.cpp | 4 | ||||
-rw-r--r-- | libcxxabi/src/cxa_exception.hpp | 6 | ||||
-rw-r--r-- | libcxxabi/src/private_typeinfo.cpp | 12 | ||||
-rw-r--r-- | libcxxabi/src/private_typeinfo.h | 99 | ||||
-rw-r--r-- | libcxxabi/src/typeinfo.cpp | 4 |
8 files changed, 81 insertions, 57 deletions
diff --git a/libcxxabi/src/abort_message.cpp b/libcxxabi/src/abort_message.cpp index 67264983538..7beb86b5bbd 100644 --- a/libcxxabi/src/abort_message.cpp +++ b/libcxxabi/src/abort_message.cpp @@ -12,6 +12,8 @@ #include <stdarg.h> #include "abort_message.h" +#pragma GCC visibility push(hidden) + #if __APPLE__ # if defined(__has_include) && __has_include(<CrashReporterClient.h>) # define HAVE_CRASHREPORTERCLIENT_H 1 @@ -54,3 +56,5 @@ void abort_message(const char* format, ...) abort(); } + +#pragma GCC visibility pop diff --git a/libcxxabi/src/abort_message.h b/libcxxabi/src/abort_message.h index 26caecd8e79..2c5cb204664 100644 --- a/libcxxabi/src/abort_message.h +++ b/libcxxabi/src/abort_message.h @@ -12,6 +12,8 @@ #include <stdio.h> +#pragma GCC visibility push(hidden) + #ifdef __cplusplus extern "C" { #endif @@ -25,6 +27,7 @@ __attribute__((visibility("hidden"), noreturn)) } #endif +#pragma GCC visibility pop #endif diff --git a/libcxxabi/src/cxa_demangle.cpp b/libcxxabi/src/cxa_demangle.cpp index 4f0ba1c4aa7..1135c99b120 100644 --- a/libcxxabi/src/cxa_demangle.cpp +++ b/libcxxabi/src/cxa_demangle.cpp @@ -10692,9 +10692,6 @@ __demangle_tree::__parse() } } -#pragma GCC visibility pop -#pragma GCC visibility push(default) - __demangle_tree __demangle(const char* mangled_name, char* buf, size_t bs) { @@ -10772,6 +10769,9 @@ printf("\n"); } // __libcxxabi +#pragma GCC visibility pop +#pragma GCC visibility push(default) + extern "C" { diff --git a/libcxxabi/src/cxa_exception.cpp b/libcxxabi/src/cxa_exception.cpp index 6f482a2b623..b866f9e4df8 100644 --- a/libcxxabi/src/cxa_exception.cpp +++ b/libcxxabi/src/cxa_exception.cpp @@ -34,6 +34,8 @@ namespace __cxxabiv1 { +#pragma GCC visibility push(default) + // Utility routines static inline @@ -615,4 +617,6 @@ __cxa_uncaught_exception() throw() } // extern "C" +#pragma GCC visibility pop + } // abi diff --git a/libcxxabi/src/cxa_exception.hpp b/libcxxabi/src/cxa_exception.hpp index 2b128aa803f..d70de0eb6a5 100644 --- a/libcxxabi/src/cxa_exception.hpp +++ b/libcxxabi/src/cxa_exception.hpp @@ -17,6 +17,8 @@ namespace __cxxabiv1 { +#pragma GCC visibility push(hidden) + static const uint64_t kOurExceptionClass = 0x434C4E47432B2B00; // CLNGC++\0 static const uint64_t kOurDependentExceptionClass = 0x434C4E47432B2B01; // CLNGC++\1 static const uint64_t get_vendor_and_language = 0xFFFFFFFFFFFFFF00; // mask for CLNGC++ @@ -103,10 +105,14 @@ static const uint64_t get_vendor_and_language = 0xFFFFFFFFFFFFFF00; // mask #endif }; +#pragma GCC visibility pop +#pragma GCC visibility push(default) + extern "C" __cxa_eh_globals * __cxa_get_globals (); extern "C" __cxa_eh_globals * __cxa_get_globals_fast (); extern "C" void * __cxa_allocate_dependent_exception (); extern "C" void __cxa_free_dependent_exception (void * dependent_exception); +#pragma GCC visibility pop }
\ No newline at end of file diff --git a/libcxxabi/src/private_typeinfo.cpp b/libcxxabi/src/private_typeinfo.cpp index 0469502312d..269116b66fa 100644 --- a/libcxxabi/src/private_typeinfo.cpp +++ b/libcxxabi/src/private_typeinfo.cpp @@ -12,7 +12,7 @@ namespace __cxxabiv1 { -//#pragma GCC visibility push(hidden) +#pragma GCC visibility push(hidden) // __shim_type_info @@ -84,8 +84,6 @@ __pointer_to_member_type_info::~__pointer_to_member_type_info() { } -#pragma GCC visibility push(hidden) - // can_catch // A handler is a match for an exception object of type E if @@ -318,7 +316,7 @@ __pointer_type_info::can_catch(const __shim_type_info* thrown_type, return false; } -//#pragma GCC visibility pop +#pragma GCC visibility pop #pragma GCC visibility push(default) // __dynamic_cast @@ -398,9 +396,9 @@ __pointer_type_info::can_catch(const __shim_type_info* thrown_type, extern "C" void* __dynamic_cast(const void* static_ptr, - const __class_type_info* static_type, - const __class_type_info* dst_type, - std::ptrdiff_t src2dst_offset) + const __class_type_info* static_type, + const __class_type_info* dst_type, + std::ptrdiff_t src2dst_offset) { // Possible future optimization: Take advantage of src2dst_offset // Currently clang always sets src2dst_offset to -1 (no hint). diff --git a/libcxxabi/src/private_typeinfo.h b/libcxxabi/src/private_typeinfo.h index 979e4d35714..fec081ab8fc 100644 --- a/libcxxabi/src/private_typeinfo.h +++ b/libcxxabi/src/private_typeinfo.h @@ -16,9 +16,9 @@ namespace __cxxabiv1 { -//#pragma GCC visibility push(hidden) +#pragma GCC visibility push(hidden) -class __shim_type_info +class __attribute__ ((__visibility__("hidden"))) __shim_type_info : public std::type_info { public: @@ -27,36 +27,36 @@ public: virtual bool can_catch(const __shim_type_info* thrown_type, void*& adjustedPtr) const = 0; }; -class __fundamental_type_info +class __attribute__ ((__visibility__("default"))) __fundamental_type_info : public __shim_type_info { public: - virtual ~__fundamental_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__fundamental_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; -class __array_type_info +class __attribute__ ((__visibility__("default"))) __array_type_info : public __shim_type_info { public: - virtual ~__array_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__array_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; -class __function_type_info +class __attribute__ ((__visibility__("default"))) __function_type_info : public __shim_type_info { public: - virtual ~__function_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__function_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; -class __enum_type_info +class __attribute__ ((__visibility__("default"))) __enum_type_info : public __shim_type_info { public: - virtual ~__enum_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__enum_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; enum @@ -118,33 +118,43 @@ struct __dynamic_cast_info }; // Has no base class -class __class_type_info +class __attribute__ ((__visibility__("default"))) __class_type_info : public __shim_type_info { public: - virtual ~__class_type_info(); - - void process_static_type_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; - void process_static_type_below_dst(__dynamic_cast_info*, const void*, int) const; - void process_found_base_class(__dynamic_cast_info*, void*, int) const; - virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; - virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; - virtual bool can_catch(const __shim_type_info*, void*&) const; - virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__class_type_info(); + + __attribute__ ((__visibility__("hidden"))) + void process_static_type_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + void process_static_type_below_dst(__dynamic_cast_info*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + void process_found_base_class(__dynamic_cast_info*, void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) + virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; }; // Has one non-virtual public base class at offset zero -class __si_class_type_info +class __attribute__ ((__visibility__("default"))) __si_class_type_info : public __class_type_info { public: const __class_type_info* __base_type; - virtual ~__si_class_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual ~__si_class_type_info(); - virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; - virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; - virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; }; struct __base_class_type_info @@ -166,7 +176,7 @@ public: }; // Has one or more base classes -class __vmi_class_type_info +class __attribute__ ((__visibility__("default"))) __vmi_class_type_info : public __class_type_info { public: @@ -182,14 +192,17 @@ public: // more derived objects }; - virtual ~__vmi_class_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual ~__vmi_class_type_info(); - virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; - virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; - virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void search_below_dst(__dynamic_cast_info*, const void*, int) const; + __attribute__ ((__visibility__("hidden"))) + virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const; }; -class __pbase_type_info +class __attribute__ ((__visibility__("default"))) __pbase_type_info : public __shim_type_info { public: @@ -205,28 +218,28 @@ public: __incomplete_class_mask = 0x10 }; - virtual ~__pbase_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__pbase_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; -class __pointer_type_info +class __attribute__ ((__visibility__("default"))) __pointer_type_info : public __pbase_type_info { public: - virtual ~__pointer_type_info(); - virtual bool can_catch(const __shim_type_info*, void*&) const; + __attribute__ ((__visibility__("hidden"))) virtual ~__pointer_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual bool can_catch(const __shim_type_info*, void*&) const; }; -class __pointer_to_member_type_info +class __attribute__ ((__visibility__("default"))) __pointer_to_member_type_info : public __pbase_type_info { public: const __class_type_info* __context; - virtual ~__pointer_to_member_type_info(); + __attribute__ ((__visibility__("hidden"))) virtual ~__pointer_to_member_type_info(); }; -//#pragma GCC visibility pop +#pragma GCC visibility pop } // __cxxabiv1 diff --git a/libcxxabi/src/typeinfo.cpp b/libcxxabi/src/typeinfo.cpp index f1ae504b3c8..9313be04a39 100644 --- a/libcxxabi/src/typeinfo.cpp +++ b/libcxxabi/src/typeinfo.cpp @@ -9,8 +9,6 @@ #include <typeinfo> -#pragma GCC visibility push(default) - namespace std { @@ -53,5 +51,3 @@ bad_typeid::what() const _NOEXCEPT } } // std - -#pragma GCC visibility pop |