<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>