<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/addca2d1a11e7f5233ea3124a13b971987c5722b">https://github.com/macports/macports-ports/commit/addca2d1a11e7f5233ea3124a13b971987c5722b</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new addca2d1a11 umem: Fix build on Apple Silicon
</span>addca2d1a11 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit addca2d1a11e7f5233ea3124a13b971987c5722b
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Fri Jul 9 09:58:11 2021 -0500
<span style='display:block; white-space:pre;color:#404040;'> umem: Fix build on Apple Silicon
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/61954
</span>---
devel/umem/Portfile | 20 +++++---
devel/umem/files/atomic.patch | 116 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 130 insertions(+), 6 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/umem/Portfile b/devel/umem/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 669d565051f..61af30ac75b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/umem/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/umem/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,9 +1,12 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup omniti-labs portableumem 1.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 1
</span>
name umem
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 1.0.1
</span> description userland slab allocator
long_description Libumem is a library used to detect memory management bugs in applications. \
It is based on the Slab allocator concept. Functions in this library provide fast, scalable \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,8 +22,8 @@ categories devel
</span> license CDDL-1
platforms darwin
maintainers nomaintainer
<span style='display:block; white-space:pre;background:#ffe0e0;'>-homepage https://web.archive.org/web/20111205182722/http://developers.sun.com/solaris/articles/libumem_library.html
</span> master_sites https://web.archive.org/web/20151129071107/https://labs.omniti.com/portableumem/releases/1.0/
<span style='display:block; white-space:pre;background:#e0ffe0;'>+distname ${name}-${version}
</span> use_bzip2 yes
checksums sha1 cdb2a7d3c29df21fc2ca85bcff6d2367c89c5bbe \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,12 +31,17 @@ checksums sha1 cdb2a7d3c29df21fc2ca85bcff6d2367c89c5bbe \
</span> sha256 d6148d236c6e49f0243c712b939f08d654498f3bea80b2319c74247220972cf2 \
size 305999
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles implicit.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# bundled config.{guess,sub} are from 2007, update with copies from automake
</span> depends_build-append port:automake
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles atomic.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ implicit.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- copy -force {*}[glob ${prefix}/share/automake-*/config.{guess,sub}] ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Use newer config.guess and config.sub to support Apple Silicon.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set automake_dirs [glob -directory ${prefix}/share automake-*]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set automake_dir [lindex [lsort -command vercmp $automake_dirs] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ copy -force ${automake_dir}/config.guess ${automake_dir}/config.sub \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}
</span> }
configure.args --mandir=${prefix}/share/man
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/umem/files/atomic.patch b/devel/umem/files/atomic.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9ca8a904f2e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/umem/files/atomic.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,116 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Improve compatibility with PPC (and ARM) platforms.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/omniti-labs/portableumem/commit/cbaa083431161b8f6cdac780d133f5cb6f7d4b30
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- misc.c.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ misc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -66,6 +66,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ERR_SIZE 8192 /* must be a power of 2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static mutex_t umem_error_lock = DEFAULTMUTEX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef NEED_64_LOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++pthread_mutex_t umem_ppc_64inc_lock = PTHREAD_MUTEX_INITIALIZER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char umem_error_buffer[ERR_SIZE] = "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static uint_t umem_error_begin = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- sol_compat.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ sol_compat.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,7 +59,7 @@ static INLINE hrtime_t gethrtime(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static INLINE thread_t _thr_self(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return thr_self();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(_MACH_PORT_T)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__MACH__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CPUHINT() (pthread_mach_thread_np(pthread_self()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define thr_sigsetmask pthread_sigmask
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -114,6 +114,12 @@ static INLINE int thr_create(void *stack_base,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define ec_atomic_inc(a) InterlockedIncrement(a)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define ec_atomic_inc64(a) InterlockedIncrement64(a)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# elif defined(__MACH__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <libkern/OSAtomic.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define ec_atomic_inc(x) OSAtomicIncrement32Barrier((int32_t*)x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if !defined(__ppc__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define ec_atomic_inc64(x) OSAtomicIncrement64Barrier((int64_t*)x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static INLINE uint_t ec_atomic_cas(uint_t *mem, uint_t with, uint_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,6 +130,40 @@ static INLINE uint_t ec_atomic_cas(uint_t *mem, uint_t with, uint_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_cas64(uint64_t *mem, uint64_t with,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint64_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint64_t prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile ("lock; cmpxchgq %1, %2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "=a" (prev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "r" (with), "m" (*(mem)), "0" (cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "pushl %%ebx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "mov 4+%1,%%ecx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "mov %1,%%ebx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "lock;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "cmpxchg8b (%3);"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "popl %%ebx"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "=A" (prev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "m" (with), "A" (cmp), "r" (mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "%ecx", "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_inc64(uint64_t *mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ register uint64_t last;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ last = *mem;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } while (ec_atomic_cas64(mem, last+1, last) != last);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ++last;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define ec_atomic_inc64 ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# error no atomic solution for your platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifndef ec_atomic_inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,7 +179,18 @@ static INLINE uint_t ec_atomic_inc(uint_t *mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifndef ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* yeah, it's not great. It's only used to bump failed allocation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * counts, so it is not critical right now. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define ec_atomic_inc64(a) (*a)++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern pthread_mutex_t umem_ppc_64inc_lock;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_inc64(uint64_t *val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint64_t rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ pthread_mutex_lock(&umem_ppc_64inc_lock);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rval = *val + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *val = rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ pthread_mutex_unlock(&umem_ppc_64inc_lock);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define ec_atomic_inc64 ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define NEED_64_LOCK 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- umem.c.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ umem.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -518,13 +518,10 @@ umem_log_header_t *umem_failure_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ umem_log_header_t *umem_slab_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern thread_t _thr_self(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__MACH__) || defined(__FreeBSD__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef CPUHINT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define CPUHINT() ((int)(_thr_self()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef CPUHINT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define CPUHINT() (_thr_self())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CPUHINT_MAX() INT_MAX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>
</pre>