summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2012-02-02 20:47:28 +0000
committerHoward Hinnant <hhinnant@apple.com>2012-02-02 20:47:28 +0000
commiteaa65afc7bff75649cab2a4be4ce18f82554db5b (patch)
tree7396b684027c1d47b99a8a297ced48ee4f4ea042 /libcxxabi/src
parent90ef25c05ed63aab61a946231332e2e708eb6b8d (diff)
downloadbcm5719-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.cpp4
-rw-r--r--libcxxabi/src/abort_message.h3
-rw-r--r--libcxxabi/src/cxa_demangle.cpp6
-rw-r--r--libcxxabi/src/cxa_exception.cpp4
-rw-r--r--libcxxabi/src/cxa_exception.hpp6
-rw-r--r--libcxxabi/src/private_typeinfo.cpp12
-rw-r--r--libcxxabi/src/private_typeinfo.h99
-rw-r--r--libcxxabi/src/typeinfo.cpp4
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
OpenPOWER on IntegriCloud