<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e731b511d4860ad2609d7b3c046771f3aa4b1871">https://github.com/macports/macports-ports/commit/e731b511d4860ad2609d7b3c046771f3aa4b1871</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit e731b511d4860ad2609d7b3c046771f3aa4b1871
</span>Author: Julien Rabinow <randprefix.github@fastmail.com>
AuthorDate: Tue Feb 8 18:37:20 2022 -0800

<span style='display:block; white-space:pre;color:#404040;'>    gdb: add patch to prevent lock-ups when running a binary
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Workaround for this bug https://sourceware.org/bugzilla/show_bug.cgi?id=24069
</span><span style='display:block; white-space:pre;color:#404040;'>    which causes GDB to hang when running a binary. gdb may still hang, but
</span><span style='display:block; white-space:pre;color:#404040;'>    a ^C (Control-C) will unlock it.
</span><span style='display:block; white-space:pre;color:#404040;'>    While the root cause is still unknown and the patch included here is only a
</span><span style='display:block; white-space:pre;color:#404040;'>    workaround, the patch has reportedly a near-100% success rate in preventing
</span><span style='display:block; white-space:pre;color:#404040;'>    lock-ups so it's still an improvement on the status quo.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Let's keep an eye on the bug and revert this commit once one of 2 things
</span><span style='display:block; white-space:pre;color:#404040;'>    happen:
</span><span style='display:block; white-space:pre;color:#404040;'>     - this patch gets merged into master
</span><span style='display:block; white-space:pre;color:#404040;'>     - the root cause is debugged and the proper fix is shipped from
</span><span style='display:block; white-space:pre;color:#404040;'>       upstream
</span>---
 devel/gdb/Portfile                      |  8 ++++++++
 devel/gdb/files/patch-darwin-nat.c.diff | 36 +++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/gdb/Portfile b/devel/gdb/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 28b68ed3e6b..a09c5b3a4f3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/gdb/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/gdb/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -90,6 +90,14 @@ post-destroot {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# These patches should be removed once they get merged into mainstream.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Fingers crossed they get merged in for gdb 11.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://sourceware.org/bugzilla/show_bug.cgi?id=24069
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patch-darwin-nat.c.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> set pythons_suffixes {27 35 36 37 38 39 310}
 
 set pythons_ports {}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/gdb/files/patch-darwin-nat.c.diff b/devel/gdb/files/patch-darwin-nat.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..d94eefea6f5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/gdb/files/patch-darwin-nat.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,36 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6388567..c20db68 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- gdb/darwin-nat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ gdb/darwin-nat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1096,18 +1096,28 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             status->kind = TARGET_WAITKIND_EXITED;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             status->value.integer = WEXITSTATUS (wstatus);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  res_pid, wstatus);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          else if (WIFSTOPPED (wstatus))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            status->kind = TARGET_WAITKIND_IGNORE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            inferior_debug (4, _("darwin_wait: pid %d received WIFSTOPPED\n"), res_pid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return minus_one_ptid;
</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;'>+           {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             status->kind = TARGET_WAITKIND_SIGNALLED;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             status->value.sig = gdb_signal_from_host (WTERMSIG (wstatus));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          inferior_debug (4, _("darwin_wait: pid=%d received signal %d\n"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  res_pid, status->value.sig);
</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;'>+-        inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        res_pid, wstatus);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        //inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   //     res_pid, wstatus);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Looks necessary on Leopard and harmless...  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        wait4 (inf->pid, &wstatus, 0, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // wait4 (inf->pid, &wstatus, 0, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return ptid_t (inf->pid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       }
</span></pre><pre style='margin:0'>

</pre>