[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