<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/6e59675459bc6f396b586da4acccd60a94f9ba5a">https://github.com/macports/macports-legacy-support/commit/6e59675459bc6f396b586da4acccd60a94f9ba5a</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 6e59675459bc6f396b586da4acccd60a94f9ba5a
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Mon May 6 06:10:47 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    provide workaround for pthread_get_stacksize_np
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    see https://github.com/rust-lang/rust/issues/43347
</span><span style='display:block; white-space:pre;color:#404040;'>    fixes https://trac.macports.org/ticket/68015
</span>---
 README.md                       |  5 +++
 include/MacportsLegacySupport.h |  7 +++++
 src/add_symbols.c               |  7 +++++
 src/pthread_get_stacksize_np.c  | 70 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 89 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/README.md b/README.md
</span><span style='display:block; white-space:pre;color:#808080;'>index 9551e8b..4d509ca 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/README.md
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/README.md
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -236,6 +236,11 @@ Wrapped headers and replaced functions are:
</span>     <td>Adds <code>_fstatat$INODE64</code> library symbol</td>
     <td>OSX10.9</td>
   </tr>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td><code>-</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Provides a workaround for bug in <code>pthread_get_stacksize_np</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.4, OSX10.5, OSX10.9, OSX10.10</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span> </table>
 
 For information on building this library outside MacPorts, see BUILDING.txt.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/MacportsLegacySupport.h b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;color:#808080;'>index f1bc4cc..5867647 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -201,4 +201,11 @@
</span> /* library symbol _dirfd */
 #define __MP_LEGACY_SUPPORT_SYMBOL__dirfd__  (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1080)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* fix bug in pthread_get_stacksize_np */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* see https://github.com/rust-lang/rust/issues/43347 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_PTHREAD_GET_STACKSIZE_NP_FIX__ (__APPLE__ && ( \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                            __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ == 101000 || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                            __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ == 1090 || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                            __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ <  1060 ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #endif /* _MACPORTS_LEGACYSUPPORTDEFS_H_ */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/add_symbols.c b/src/add_symbols.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 76aa34a..58aadd2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/add_symbols.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/add_symbols.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -81,3 +81,10 @@ extern const char fstatat$INODE64_tmp7 __asm("$ld$add$os10.7$_fstatat$INODE64");
</span> extern const char fstatat$INODE64_tmp8 __asm("$ld$add$os10.8$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp8 = 0;
 extern const char fstatat$INODE64_tmp9 __asm("$ld$add$os10.9$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp9 = 0;
 #endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !(__MP_LEGACY_SUPPORT_PTHREAD_GET_STACKSIZE_NP_FIX__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char pthread_get_stacksize_np_tmp4 __asm("$ld$add$os10.4$_pthread_get_stacksize_np"); __attribute__((visibility("default"))) const char pthread_get_stacksize_np_tmp4 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char pthread_get_stacksize_np_tmp5 __asm("$ld$add$os10.5$_pthread_get_stacksize_np"); __attribute__((visibility("default"))) const char pthread_get_stacksize_np_tmp5 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char pthread_get_stacksize_np_tmp9 __asm("$ld$add$os10.9$_pthread_get_stacksize_np"); __attribute__((visibility("default"))) const char pthread_get_stacksize_np_tmp9 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char pthread_get_stacksize_np_tmp10 __asm("$ld$add$os10.10$_pthread_get_stacksize_np"); __attribute__((visibility("default"))) const char pthread_get_stacksize_np_tmp10 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pthread_get_stacksize_np.c b/src/pthread_get_stacksize_np.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..6c2051b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pthread_get_stacksize_np.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,70 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* MP support header */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_PTHREAD_GET_STACKSIZE_NP_FIX__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <pthread.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/resource.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1090
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* private system call available on OS X Mavericks (version 10.9) and later */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* see https://github.com/apple-oss-distributions/libpthread/blob/ba8e1488a0e6848b710c5daad2e226f66cfed656/private/pthread/private.h#L34 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pthread_t pthread_main_thread_np(void);
</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 kMaxThreadStackSize 0x40000000 /* from LLVM: 1 << 30 or 1Gb */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+size_t pthread_get_stacksize_np(pthread_t t) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1090
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int is_main_thread = pthread_equal(t, pthread_main_thread_np());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* taken from Apple Libc */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* see https://github.com/apple-oss-distributions/Libc/blob/224a8105d573730ae33f474ae5b63b113123aee4/pthreads/pthread.c#L1167 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* for _PTHREAD_CREATE_PARENT, see https://github.com/apple-oss-distributions/Libc/blob/224a8105d573730ae33f474ae5b63b113123aee4/pthreads/pthread_internals.h#L647C9-L647C31 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* for pthread_t, see https://github.com/apple-oss-distributions/Libc/blob/224a8105d573730ae33f474ae5b63b113123aee4/pthreads/pthread_internals.h#L107 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* for pthread_lock_t, see https://github.com/apple-oss-distributions/Libc/blob/224a8105d573730ae33f474ae5b63b113123aee4/pthreads/pthread_machdep.h#L214C13-L214C27 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          long sig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          struct __darwin_pthread_handler_rec *cleanup_stack;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          int lock;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          __int32_t detached:8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    inherit:8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    policy:8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    freeStackOnExit:1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    newstyle:1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    kernalloc:1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    schedset:1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    wqthread:1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pad:3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    char opaque[__PTHREAD_SIZE__-sizeof(int)-sizeof(__int32_t)];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } *thread = (void*) t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int is_main_thread = ((thread->detached & 4) == 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if ( is_main_thread ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* use LLVM workaround */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* see https://github.com/llvm/llvm-project/blob/617a15a9eac96088ae5e9134248d8236e34b91b1/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp#L414 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* OpenJDK also has a workaround */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* see https://github.com/openjdk/jdk/blob/e833bfc8ac6104522d037e7eb300f5aa112688bb/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp#L715 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct rlimit limit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if( getrlimit(RLIMIT_STACK, &limit) ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          exit(EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if( limit.rlim_cur < kMaxThreadStackSize ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          return limit.rlim_cur;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          return kMaxThreadStackSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* bug only affects main thread */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     size_t (*real_pthread_get_stacksize_np)(pthread_t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     real_pthread_get_stacksize_np = dlsym(RTLD_NEXT, "pthread_get_stacksize_np");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (real_pthread_get_stacksize_np == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          exit(EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return real_pthread_get_stacksize_np(t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_PTHREAD_GET_STACKSIZE_NP_FIX__ */
</span></pre><pre style='margin:0'>

</pre>