Revision: 130407 https://trac.macports.org/changeset/130407 Author: jeremyhu@macports.org Date: 2014-12-29 22:13:53 -0800 (Mon, 29 Dec 2014) Log Message: ----------- libcxxabi: Bump to r210661 Revision Links: -------------- https://trac.macports.org/changeset/210661 Modified Paths: -------------- trunk/dports/lang/libcxxabi/Portfile Added Paths: ----------- trunk/dports/lang/libcxxabi/files/ trunk/dports/lang/libcxxabi/files/0001-Revert-Make-libc-abi-use-the-implementation-of-__num.patch Modified: trunk/dports/lang/libcxxabi/Portfile =================================================================== --- trunk/dports/lang/libcxxabi/Portfile 2014-12-30 05:56:40 UTC (rev 130406) +++ trunk/dports/lang/libcxxabi/Portfile 2014-12-30 06:13:53 UTC (rev 130407) @@ -15,13 +15,17 @@ homepage http://libcxxabi.llvm.org/ fetch.type svn -svn.revision 197063 +svn.revision 210661 version ${svn.revision} worksrcdir trunk svn.url http://llvm.org/svn/llvm-project/libcxxabi/trunk set root_path ${prefix}/var/host/${name}-${version}-${revision} +patch.pre_args -p1 +patchfiles \ + 0001-Revert-Make-libc-abi-use-the-implementation-of-__num.patch + variant universal {} use_configure no Added: trunk/dports/lang/libcxxabi/files/0001-Revert-Make-libc-abi-use-the-implementation-of-__num.patch =================================================================== --- trunk/dports/lang/libcxxabi/files/0001-Revert-Make-libc-abi-use-the-implementation-of-__num.patch (rev 0) +++ trunk/dports/lang/libcxxabi/files/0001-Revert-Make-libc-abi-use-the-implementation-of-__num.patch 2014-12-30 06:13:53 UTC (rev 130407) @@ -0,0 +1,179 @@ +From d912ab33ad802340ad7aa5e7e39b9d1bea5fe89a Mon Sep 17 00:00:00 2001 +From: Jeremy Huddleston Sequoia <jeremyhu@apple.com> +Date: Mon, 29 Dec 2014 22:05:22 -0800 +Subject: [PATCH] Revert "Make libc++abi use the implementation of __numstr + from libc++. No functionality change, just removal of duplicated code." + +This reverts commit f7a83f7f3b5788e3ead1c7f2063994699df55085. +--- + src/stdexcept.cpp | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 127 insertions(+), 6 deletions(-) + +diff --git a/src/stdexcept.cpp b/src/stdexcept.cpp +index bd6789e..246eea4 100644 +--- a/src/stdexcept.cpp ++++ b/src/stdexcept.cpp +@@ -7,7 +7,6 @@ + // + //===----------------------------------------------------------------------===// + +-#include "__refstring" + #include "stdexcept" + #include "new" + #include <cstdlib> +@@ -15,25 +14,147 @@ + #include <cstdint> + #include <cstddef> + +-static_assert(sizeof(std::__libcpp_refstring) == sizeof(const char *), ""); ++#if __APPLE__ ++#include <dlfcn.h> ++#include <mach-o/dyld.h> ++#endif ++ ++// Note: optimize for size ++ ++#pragma GCC visibility push(hidden) ++ ++namespace ++{ ++ ++class __libcpp_nmstr ++{ ++private: ++ const char* str_; ++ ++ typedef int count_t; ++ ++ struct _Rep_base ++ { ++ std::size_t len; ++ std::size_t cap; ++ count_t count; ++ }; ++ ++ static const std::ptrdiff_t offset = static_cast<std::ptrdiff_t>(sizeof(_Rep_base)); ++ ++ count_t& count() const _NOEXCEPT {return ((_Rep_base*)(str_ - offset))->count;} ++ ++#if __APPLE__ ++ static ++ const void* ++ compute_gcc_empty_string_storage() _NOEXCEPT ++ { ++ void* handle = dlopen("/usr/lib/libstdc++.6.dylib", RTLD_NOLOAD); ++ if (handle == 0) ++ return 0; ++ return (const char*)dlsym(handle, "_ZNSs4_Rep20_S_empty_rep_storageE") + offset; ++ } ++ ++ static ++ const void* ++ get_gcc_empty_string_storage() _NOEXCEPT ++ { ++ static const void* p = compute_gcc_empty_string_storage(); ++ return p; ++ } ++#endif ++ ++public: ++ explicit __libcpp_nmstr(const char* msg); ++ __libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT; ++ __libcpp_nmstr& operator=(const __libcpp_nmstr& s) _NOEXCEPT; ++ ~__libcpp_nmstr(); ++ const char* c_str() const _NOEXCEPT {return str_;} ++}; ++ ++__libcpp_nmstr::__libcpp_nmstr(const char* msg) ++{ ++ std::size_t len = strlen(msg); ++ str_ = static_cast<const char*>(::operator new(len + 1 + offset)); ++ _Rep_base* c = (_Rep_base*)str_; ++ c->len = c->cap = len; ++ str_ += offset; ++ count() = 0; ++ std::memcpy(const_cast<char*>(c_str()), msg, len + 1); ++} ++ ++inline ++__libcpp_nmstr::__libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT ++ : str_(s.str_) ++{ ++#if __APPLE__ ++ if (str_ != get_gcc_empty_string_storage()) ++#endif ++ __sync_add_and_fetch(&count(), 1); ++} ++ ++__libcpp_nmstr& ++__libcpp_nmstr::operator=(const __libcpp_nmstr& s) _NOEXCEPT ++{ ++ const char* p = str_; ++ str_ = s.str_; ++#if __APPLE__ ++ if (str_ != get_gcc_empty_string_storage()) ++#endif ++ __sync_add_and_fetch(&count(), 1); ++#if __APPLE__ ++ if (p != get_gcc_empty_string_storage()) ++#endif ++ if (__sync_add_and_fetch((count_t*)(p-sizeof(count_t)), count_t(-1)) < 0) ++ { ++ ::operator delete(const_cast<char*>(p-offset)); ++ } ++ return *this; ++} ++ ++inline ++__libcpp_nmstr::~__libcpp_nmstr() ++{ ++#if __APPLE__ ++ if (str_ != get_gcc_empty_string_storage()) ++#endif ++ if (__sync_add_and_fetch(&count(), count_t(-1)) < 0) ++ { ++ ::operator delete(const_cast<char*>(str_ - offset)); ++ } ++} ++ ++} ++ ++#pragma GCC visibility pop + + namespace std // purposefully not using versioning namespace + { + +-logic_error::~logic_error() _NOEXCEPT {} ++logic_error::~logic_error() _NOEXCEPT ++{ ++ __libcpp_nmstr& s = (__libcpp_nmstr&)__imp_; ++ s.~__libcpp_nmstr(); ++} + + const char* + logic_error::what() const _NOEXCEPT + { +- return __imp_.c_str(); ++ __libcpp_nmstr& s = (__libcpp_nmstr&)__imp_; ++ return s.c_str(); + } + +-runtime_error::~runtime_error() _NOEXCEPT {} ++runtime_error::~runtime_error() _NOEXCEPT ++{ ++ __libcpp_nmstr& s = (__libcpp_nmstr&)__imp_; ++ s.~__libcpp_nmstr(); ++} + + const char* + runtime_error::what() const _NOEXCEPT + { +- return __imp_.c_str(); ++ __libcpp_nmstr& s = (__libcpp_nmstr&)__imp_; ++ return s.c_str(); + } + + domain_error::~domain_error() _NOEXCEPT {} +-- +2.2.1 +
participants (1)
-
jeremyhu@macports.org