[130407] trunk/dports/lang/libcxxabi
jeremyhu at macports.org
jeremyhu at macports.org
Mon Dec 29 22:13:53 PST 2014
Revision: 130407
https://trac.macports.org/changeset/130407
Author: jeremyhu at 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 at 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
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20141229/b5227d93/attachment.html>
More information about the macports-changes
mailing list