summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2016-07-23 13:23:37 +0000
committerjhb <jhb@FreeBSD.org>2016-07-23 13:23:37 +0000
commitf90fd33ed1232232615e3c3c3b192bc514185930 (patch)
tree34bda6726a04cbf085dc12350828af35a824a518
parenta397495eff87d8490e695b89aa19bf98f227248d (diff)
downloadFreeBSD-ports-f90fd33ed1232232615e3c3c3b192bc514185930.zip
FreeBSD-ports-f90fd33ed1232232615e3c3c3b192bc514185930.tar.gz
A few more recent patches that were merged to upstream GDB:
- Handle version 1a of NT_PRPSINFO notes which include the pr_pid field. - Replace patch-sigev with upstream version. Note that upstream GDB doesn't define SIGLIBRT on older OS versions, so do that in the port Makefile instead. - Use PT_GET_EVENT_MASK/PT_SET_EVENT_MASK (new in 12). - Fix a bug where fork and LWP events weren't enabled in new child processes when following child processes after a fork. - Handle "real" vfork done events via PTRACE_VFORK (new in 12). PR: 211254 Approved by: luca.pizzamiglio@gmail.com (maintainer)
-rw-r--r--devel/gdb/Makefile14
-rw-r--r--devel/gdb/files/commit-0064d2283
-rw-r--r--devel/gdb/files/commit-5fa14c630
-rw-r--r--devel/gdb/files/commit-bc7b765102
-rw-r--r--devel/gdb/files/commit-da95a26123
-rw-r--r--devel/gdb/files/commit-dbaed38157
-rw-r--r--devel/gdb/files/patch-sigev65
7 files changed, 507 insertions, 67 deletions
diff --git a/devel/gdb/Makefile b/devel/gdb/Makefile
index 409fb9b..08b3d5a 100644
--- a/devel/gdb/Makefile
+++ b/devel/gdb/Makefile
@@ -3,7 +3,7 @@
PORTNAME= gdb
PORTVERSION= 7.11.1
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= devel
MASTER_SITES= GNU
@@ -43,7 +43,12 @@ EXTRA_PATCHES= ${FILESDIR}/commit-21002a6 \
${FILESDIR}/commit-bb2a62e \
${FILESDIR}/commit-8607ea6 \
${FILESDIR}/commit-2c5c2a3 \
- ${FILESDIR}/commit-ee95032
+ ${FILESDIR}/commit-ee95032 \
+ ${FILESDIR}/commit-bc7b765 \
+ ${FILESDIR}/commit-0064d22 \
+ ${FILESDIR}/commit-da95a26 \
+ ${FILESDIR}/commit-5fa14c6 \
+ ${FILESDIR}/commit-dbaed38
VER= ${PORTVERSION:S/.//g}
PLIST_SUB= VER=${VER}
@@ -84,6 +89,11 @@ TUI_CONFIGURE_ENABLE= tui
.include <bsd.port.options.mk>
+.if ${OSVERSION} < 1000010
+# FreeBSD 9.x and earlier do not define SIGLIBRT in <sys/signal.h>
+CFLAGS+= -DSIGLIBRT=33
+.endif
+
.if ! ${PORT_OPTIONS:MBUNDLED_READLINE}
EXCLUDE+= readline
.endif
diff --git a/devel/gdb/files/commit-0064d22 b/devel/gdb/files/commit-0064d22
new file mode 100644
index 0000000..5e77881
--- /dev/null
+++ b/devel/gdb/files/commit-0064d22
@@ -0,0 +1,83 @@
+commit 0064d22386b99c047bbff3bcc73b6bfce9c29b4c
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Mon Jul 4 19:19:48 2016 -0700
+
+ Handle version 1a of FreeBSD's NT_PRSINFO.
+
+ Version 1a adds a pr_pid member containing the process ID of the
+ terminating process. The presence of pr_pid is inferred from the
+ note's size.
+
+ bfd/ChangeLog:
+
+ * elf.c (elfcore_grok_freebsd_psinfo): Check for minimum note size
+ and handle pr_pid if present.
+
+diff --git bfd/elf.c bfd/elf.c
+index 2cc64e8..ba1774e 100644
+--- bfd/elf.c
++++ bfd/elf.c
+@@ -9590,27 +9590,36 @@ elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
+ {
+ size_t offset;
+
+- /* Check for version 1 in pr_version. */
+- if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
+- return FALSE;
+- offset = 4;
+-
+- /* Skip over pr_psinfosz. */
+ switch (abfd->arch_info->bits_per_word)
+ {
+ case 32:
+- offset += 4;
++ if (note->descsz < 108)
++ return FALSE;
+ break;
+
+ case 64:
+- offset += 4; /* Padding before pr_psinfosz. */
+- offset += 8;
++ if (note->descsz < 120)
++ return FALSE;
+ break;
+
+ default:
+ return FALSE;
+ }
+
++ /* Check for version 1 in pr_version. */
++ if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
++ return FALSE;
++ offset = 4;
++
++ /* Skip over pr_psinfosz. */
++ if (abfd->arch_info->bits_per_word == 32)
++ offset += 4;
++ else
++ {
++ offset += 4; /* Padding before pr_psinfosz. */
++ offset += 8;
++ }
++
+ /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
+ elf_tdata (abfd)->core->program
+ = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
+@@ -9619,6 +9628,17 @@ elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
+ /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
+ elf_tdata (abfd)->core->command
+ = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
++ offset += 81;
++
++ /* Padding before pr_pid. */
++ offset += 2;
++
++ /* The pr_pid field was added in version "1a". */
++ if (note->descsz < offset + 4)
++ return TRUE;
++
++ elf_tdata (abfd)->core->pid
++ = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
+
+ return TRUE;
+ }
diff --git a/devel/gdb/files/commit-5fa14c6 b/devel/gdb/files/commit-5fa14c6
new file mode 100644
index 0000000..66f5432
--- /dev/null
+++ b/devel/gdb/files/commit-5fa14c6
@@ -0,0 +1,30 @@
+commit 5fa14c6b9789bad6f91dd21889f7b1a0eb75c6d0
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Fri Jul 15 17:01:21 2016 -0700
+
+ Enable ptrace events on new child processes.
+
+ New child processes on FreeBSD do not inherit optional ptrace events
+ such as fork and LWP events from the parent process. Instead,
+ explicitly enable events on new children when reporting a fork
+ event.
+
+ gdb/ChangeLog:
+
+ * fbsd-nat.c (fbsd_wait): Use "fbsd_enable_proc_events" on
+ new child processes.
+
+diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
+index 508ab19..5e4304e 100644
+--- gdb/fbsd-nat.c
++++ gdb/fbsd-nat.c
+@@ -836,6 +836,9 @@ fbsd_wait (struct target_ops *ops,
+ child_ptid = ptid_build (child, pl.pl_lwpid, 0);
+ }
+
++ /* Enable additional events on the child process. */
++ fbsd_enable_proc_events (ptid_get_pid (child_ptid));
++
+ /* For vfork, the child process will have the P_PPWAIT
+ flag set. */
+ fbsd_fetch_kinfo_proc (child, &kp);
diff --git a/devel/gdb/files/commit-bc7b765 b/devel/gdb/files/commit-bc7b765
new file mode 100644
index 0000000..5791ffe
--- /dev/null
+++ b/devel/gdb/files/commit-bc7b765
@@ -0,0 +1,102 @@
+commit bc7b765ab71f967eb2a9c3da111d7529eec46fbe
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Sun Jul 3 11:56:21 2016 -0700
+
+ Pass SIGLIBRT directly to child processes.
+
+ FreeBSD's librt uses SIGLIBRT as an internal signal to implement
+ SIGEV_THREAD sigevent notifications. Similar to SIGLWP or SIGCANCEL
+ this signal should be passed through to child processes by default.
+
+ include/ChangeLog:
+
+ * signals.def: Add GDB_SIGNAL_LIBRT.
+
+ gdb/ChangeLog:
+
+ * common/signals.c (gdb_signal_from_host): Handle SIGLIBRT.
+ (do_gdb_signal_to_host): Likewise.
+ * infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to
+ programs.
+ * proc-events.c (signal_table): Add entry for SIGLIBRT.
+
+diff --git gdb/common/signals.c gdb/common/signals.c
+index 45c0c73..f84935d 100644
+--- gdb/common/signals.c
++++ gdb/common/signals.c
+@@ -331,6 +331,10 @@ gdb_signal_from_host (int hostsig)
+ if (hostsig == SIGINFO)
+ return GDB_SIGNAL_INFO;
+ #endif
++#if defined (SIGLIBRT)
++ if (hostsig == SIGLIBRT)
++ return GDB_SIGNAL_LIBRT;
++#endif
+
+ #if defined (REALTIME_LO)
+ if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
+@@ -584,6 +588,10 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
+ case GDB_SIGNAL_INFO:
+ return SIGINFO;
+ #endif
++#if defined (SIGLIBRT)
++ case GDB_SIGNAL_LIBRT:
++ return SIGLIBRT;
++#endif
+
+ default:
+ #if defined (REALTIME_LO)
+diff --git gdb/infrun.c gdb/infrun.c
+index 70a0790..257ac8a 100644
+--- gdb/infrun.c
++++ gdb/infrun.c
+@@ -9409,6 +9409,8 @@ leave it stopped or free to run as needed."),
+ signal_print[GDB_SIGNAL_WAITING] = 0;
+ signal_stop[GDB_SIGNAL_CANCEL] = 0;
+ signal_print[GDB_SIGNAL_CANCEL] = 0;
++ signal_stop[GDB_SIGNAL_LIBRT] = 0;
++ signal_print[GDB_SIGNAL_LIBRT] = 0;
+
+ /* Update cached state. */
+ signal_cache_update (-1);
+diff --git gdb/proc-events.c gdb/proc-events.c
+index b291d31..daa6f58 100644
+--- gdb/proc-events.c
++++ gdb/proc-events.c
+@@ -1536,6 +1536,9 @@ static struct trans signal_table[] =
+ #ifdef SIGAIO
+ { SIGAIO, "SIGAIO", "Asynchronous I/O signal" },
+ #endif
++#ifdef SIGLIBRT
++ { SIGLIBRT, "SIGLIBRT", "Used by librt" },
++#endif
+
+ /* FIXME: add real-time signals. */
+ };
+diff --git include/gdb/ChangeLog include/gdb/ChangeLog
+index f05ba4b..05f127e 100644
+--- include/gdb/ChangeLog
++++ include/gdb/ChangeLog
+@@ -1,3 +1,7 @@
++2016-07-15 John Baldwin <jhb@FreeBSD.org>
++
++ * signals.def: Add GDB_SIGNAL_LIBRT.
++
+ 2016-01-06 Mike Frysinger <vapier@gentoo.org>
+
+ * remote-sim.h (sim_open): Mark argv const.
+diff --git include/gdb/signals.def include/gdb/signals.def
+index 61cc88c..2b30e71 100644
+--- include/gdb/signals.def
++++ include/gdb/signals.def
+@@ -194,7 +194,9 @@ SET (GDB_EXC_EMULATION, 148, "EXC_EMULATION", "Emulation instruction")
+ SET (GDB_EXC_SOFTWARE, 149, "EXC_SOFTWARE", "Software generated exception")
+ SET (GDB_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint")
+
++SET (GDB_SIGNAL_LIBRT, 151, "SIGLIBRT", "librt internal signal")
++
+ /* If you are adding a new signal, add it just above this comment. */
+
+ /* Last and unused enum value, for sizing arrays, etc. */
+-SET (GDB_SIGNAL_LAST, 151, NULL, "GDB_SIGNAL_LAST")
++SET (GDB_SIGNAL_LAST, 152, NULL, "GDB_SIGNAL_LAST")
diff --git a/devel/gdb/files/commit-da95a26 b/devel/gdb/files/commit-da95a26
new file mode 100644
index 0000000..aaa488e
--- /dev/null
+++ b/devel/gdb/files/commit-da95a26
@@ -0,0 +1,123 @@
+commit da95a26cc381c0f092f515ffe108075985c16d7f
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Fri Jul 15 14:03:10 2016 -0700
+
+ Consolidate code to enable optional FreeBSD native target event reporting.
+
+ Add a new function to enable optional event reporting for FreeBSD native
+ targets. Specifically, use this to enable fork and LWP events.
+ The bodies of fbsd_enable_follow_fork and fbsd_enable_lwp_events have been
+ subsumed into the new function. In addition, use the PT_GET_EVENT_MASK
+ and PT_EVENT_SET_MASK requests added in FreeBSD 12 when present to enable
+ these events.
+
+ gdb/ChangeLog:
+
+ * fbsd-nat.c (fbsd_enable_lwp_events): Remove function.
+ (fbsd_enable_proc_events): New function.
+ (fbsd_enable_follow_fork): Remove function.
+ (fbsd_post_startup_inferior): Use "fbsd_enable_proc_events".
+ (fbsd_post_attach): Likewise.
+
+diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
+index fa9516e..508ab19 100644
+--- gdb/fbsd-nat.c
++++ gdb/fbsd-nat.c
+@@ -412,22 +412,43 @@ fbsd_thread_name (struct target_ops *self, struct thread_info *thr)
+ }
+ #endif
+
+-#ifdef PT_LWP_EVENTS
+-/* Enable LWP events for a specific process.
++/* Enable additional event reporting on new processes.
+
+- To catch LWP events, PT_LWP_EVENTS is set on every traced process.
++ To catch fork events, PTRACE_FORK is set on every traced process
++ to enable stops on returns from fork or vfork. Note that both the
++ parent and child will always stop, even if system call stops are
++ not enabled.
++
++ To catch LWP events, PTRACE_EVENTS is set on every traced process.
+ This enables stops on the birth for new LWPs (excluding the "main" LWP)
+ and the death of LWPs (excluding the last LWP in a process). Note
+ that unlike fork events, the LWP that creates a new LWP does not
+ report an event. */
+
+ static void
+-fbsd_enable_lwp_events (pid_t pid)
++fbsd_enable_proc_events (pid_t pid)
+ {
++#ifdef PT_GET_EVENT_MASK
++ int events;
++
++ if (ptrace (PT_GET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
++ sizeof (events)) == -1)
++ perror_with_name (("ptrace"));
++ events |= PTRACE_FORK | PTRACE_LWP;
++ if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
++ sizeof (events)) == -1)
++ perror_with_name (("ptrace"));
++#else
++#ifdef TDP_RFPPWAIT
++ if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
++ perror_with_name (("ptrace"));
++#endif
++#ifdef PT_LWP_EVENTS
+ if (ptrace (PT_LWP_EVENTS, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
+ perror_with_name (("ptrace"));
+-}
+ #endif
++#endif
++}
+
+ /* Add threads for any new LWPs in a process.
+
+@@ -957,20 +978,6 @@ fbsd_remove_vfork_catchpoint (struct target_ops *self, int pid)
+ {
+ return 0;
+ }
+-
+-/* Enable fork tracing for a specific process.
+-
+- To catch fork events, PT_FOLLOW_FORK is set on every traced process
+- to enable stops on returns from fork or vfork. Note that both the
+- parent and child will always stop, even if system call stops are
+- not enabled. */
+-
+-static void
+-fbsd_enable_follow_fork (pid_t pid)
+-{
+- if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
+- perror_with_name (("ptrace"));
+-}
+ #endif
+
+ /* Implement the "to_post_startup_inferior" target_ops method. */
+@@ -978,12 +985,7 @@ fbsd_enable_follow_fork (pid_t pid)
+ static void
+ fbsd_post_startup_inferior (struct target_ops *self, ptid_t pid)
+ {
+-#ifdef TDP_RFPPWAIT
+- fbsd_enable_follow_fork (ptid_get_pid (pid));
+-#endif
+-#ifdef PT_LWP_EVENTS
+- fbsd_enable_lwp_events (ptid_get_pid (pid));
+-#endif
++ fbsd_enable_proc_events (ptid_get_pid (pid));
+ }
+
+ /* Implement the "to_post_attach" target_ops method. */
+@@ -991,12 +993,7 @@ fbsd_post_startup_inferior (struct target_ops *self, ptid_t pid)
+ static void
+ fbsd_post_attach (struct target_ops *self, int pid)
+ {
+-#ifdef TDP_RFPPWAIT
+- fbsd_enable_follow_fork (pid);
+-#endif
+-#ifdef PT_LWP_EVENTS
+- fbsd_enable_lwp_events (pid);
+-#endif
++ fbsd_enable_proc_events (pid);
+ fbsd_add_threads (pid);
+ }
+
diff --git a/devel/gdb/files/commit-dbaed38 b/devel/gdb/files/commit-dbaed38
new file mode 100644
index 0000000..78fd2bb
--- /dev/null
+++ b/devel/gdb/files/commit-dbaed38
@@ -0,0 +1,157 @@
+commit dbaed3853474e7bd824a25bc454a8f2fdd71d2b3
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Sat Jul 16 10:14:08 2016 -0700
+
+ Use a real vfork done event on FreeBSD when available.
+
+ FreeBSD 12 recently added a new ptrace event to indicate when the vfork
+ parent resumes after the child process stops sharing the address space.
+ Use this event to report a proper TARGET_WAITKIND_VFORK_DONE rather than
+ faking a vfork done event after a delay.
+
+ gdb/ChangeLog:
+
+ * fbsd-nat.c (fbsd_enable_proc_events): Enable "PTRACE_VFORK"
+ events.
+ (fbsd_pending_vfork_done): Only define if "PTRACE_VFORK" is not
+ defined.
+ (fbsd_add_vfork_done): Likewise.
+ (fbsd_is_vfork_done_pending): Likewise.
+ (fbsd_next_vfork_done): Likewise.
+ (fbsd_resume): Only ignore pending vfork done events if
+ "PTRACE_VFORK" is not defined.
+ (fbsd_wait): Only look for pending vfork done events if
+ "PTRACE_VFORK" is not defined.
+ [PTRACE_VFORK]: Handle "PL_FLAG_VFORKED" and "PL_FLAG_VFORK_DONE"
+ events.
+ (fbsd_follow_fork): Only fake a vfork done event if "PTRACE_VFORK"
+ is not defined.
+
+diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
+index 5e4304e..ade62f1 100644
+--- gdb/fbsd-nat.c
++++ gdb/fbsd-nat.c
+@@ -435,6 +435,9 @@ fbsd_enable_proc_events (pid_t pid)
+ sizeof (events)) == -1)
+ perror_with_name (("ptrace"));
+ events |= PTRACE_FORK | PTRACE_LWP;
++#ifdef PTRACE_VFORK
++ events |= PTRACE_VFORK;
++#endif
+ if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
+ sizeof (events)) == -1)
+ perror_with_name (("ptrace"));
+@@ -598,6 +601,7 @@ fbsd_is_child_pending (pid_t pid)
+ return null_ptid;
+ }
+
++#ifndef PTRACE_VFORK
+ static struct fbsd_fork_info *fbsd_pending_vfork_done;
+
+ /* Record a pending vfork done event. */
+@@ -647,6 +651,7 @@ fbsd_next_vfork_done (void)
+ return null_ptid;
+ }
+ #endif
++#endif
+
+ static int
+ resume_one_thread_cb (struct thread_info *tp, void *data)
+@@ -686,7 +691,7 @@ static void
+ fbsd_resume (struct target_ops *ops,
+ ptid_t ptid, int step, enum gdb_signal signo)
+ {
+-#ifdef TDP_RFPPWAIT
++#if defined(TDP_RFPPWAIT) && !defined(PTRACE_VFORK)
+ pid_t pid;
+
+ /* Don't PT_CONTINUE a process which has a pending vfork done event. */
+@@ -731,12 +736,14 @@ fbsd_wait (struct target_ops *ops,
+
+ while (1)
+ {
++#ifndef PTRACE_VFORK
+ wptid = fbsd_next_vfork_done ();
+ if (!ptid_equal (wptid, null_ptid))
+ {
+ ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
+ return wptid;
+ }
++#endif
+ wptid = super_wait (ops, ptid, ourstatus, target_options);
+ if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
+ {
+@@ -812,12 +819,18 @@ fbsd_wait (struct target_ops *ops,
+ #ifdef TDP_RFPPWAIT
+ if (pl.pl_flags & PL_FLAG_FORKED)
+ {
++#ifndef PTRACE_VFORK
+ struct kinfo_proc kp;
++#endif
+ ptid_t child_ptid;
+ pid_t child;
+
+ child = pl.pl_child_pid;
+ ourstatus->kind = TARGET_WAITKIND_FORKED;
++#ifdef PTRACE_VFORK
++ if (pl.pl_flags & PL_FLAG_VFORKED)
++ ourstatus->kind = TARGET_WAITKIND_VFORKED;
++#endif
+
+ /* Make sure the other end of the fork is stopped too. */
+ child_ptid = fbsd_is_child_pending (child);
+@@ -839,11 +852,13 @@ fbsd_wait (struct target_ops *ops,
+ /* Enable additional events on the child process. */
+ fbsd_enable_proc_events (ptid_get_pid (child_ptid));
+
++#ifndef PTRACE_VFORK
+ /* For vfork, the child process will have the P_PPWAIT
+ flag set. */
+ fbsd_fetch_kinfo_proc (child, &kp);
+ if (kp.ki_flag & P_PPWAIT)
+ ourstatus->kind = TARGET_WAITKIND_VFORKED;
++#endif
+ ourstatus->value.related_pid = child_ptid;
+
+ return wptid;
+@@ -857,6 +872,14 @@ fbsd_wait (struct target_ops *ops,
+ fbsd_remember_child (wptid);
+ continue;
+ }
++
++#ifdef PTRACE_VFORK
++ if (pl.pl_flags & PL_FLAG_VFORK_DONE)
++ {
++ ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
++ return wptid;
++ }
++#endif
+ #endif
+
+ #ifdef PL_FLAG_EXEC
+@@ -918,7 +941,6 @@ fbsd_follow_fork (struct target_ops *ops, int follow_child,
+ if (!follow_child && detach_fork)
+ {
+ struct thread_info *tp = inferior_thread ();
+- int has_vforked = tp->pending_follow.kind == TARGET_WAITKIND_VFORKED;
+ pid_t child_pid = ptid_get_pid (tp->pending_follow.value.related_pid);
+
+ /* Breakpoints have already been detached from the child by
+@@ -927,7 +949,8 @@ fbsd_follow_fork (struct target_ops *ops, int follow_child,
+ if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
+ perror_with_name (("ptrace"));
+
+- if (has_vforked)
++#ifndef PTRACE_VFORK
++ if (tp->pending_follow.kind == TARGET_WAITKIND_VFORKED)
+ {
+ /* We can't insert breakpoints until the child process has
+ finished with the shared memory region. The parent
+@@ -953,6 +976,7 @@ fbsd_follow_fork (struct target_ops *ops, int follow_child,
+ wait. */
+ fbsd_add_vfork_done (inferior_ptid);
+ }
++#endif
+ }
+
+ return 0;
diff --git a/devel/gdb/files/patch-sigev b/devel/gdb/files/patch-sigev
deleted file mode 100644
index 3c10a37..0000000
--- a/devel/gdb/files/patch-sigev
+++ /dev/null
@@ -1,65 +0,0 @@
-diff --git gdb/common/signals.c gdb/common/signals.c
-index d4cf953..019371e 100644
---- gdb/common/signals.c
-+++ gdb/common/signals.c
-@@ -41,6 +41,12 @@ struct gdbarch;
- # endif
- #endif
-
-+#ifdef __FreeBSD__
-+# ifndef SIGLIBRT
-+# define SIGLIBRT 33 /* Older versions do not define the constant */
-+# endif
-+#endif
-+
- /* This table must match in order and size the signals in enum
- gdb_signal. */
-
-@@ -332,6 +338,11 @@ gdb_signal_from_host (int hostsig)
- return GDB_SIGNAL_INFO;
- #endif
-
-+#if defined (SIGLIBRT)
-+ if ( hostsig == SIGLIBRT )
-+ return GDB_SIGNAL_FBSD_LIBRT;
-+#endif
-+
- #if defined (REALTIME_LO)
- if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
- {
-@@ -585,6 +596,11 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
- return SIGINFO;
- #endif
-
-+#if defined (SIGLIBRT)
-+ case GDB_SIGNAL_FBSD_LIBRT:
-+ return SIGLIBRT;
-+#endif
-+
- default:
- #if defined (REALTIME_LO)
- retsig = 0;
-diff --git gdb/infrun.c gdb/infrun.c
-index 11dcc0e..6ec4d0b 100644
---- gdb/infrun.c
-+++ gdb/infrun.c
-@@ -7715,6 +7715,8 @@ leave it stopped or free to run as needed."),
- signal_print[GDB_SIGNAL_WINCH] = 0;
- signal_stop[GDB_SIGNAL_PRIO] = 0;
- signal_print[GDB_SIGNAL_PRIO] = 0;
-+ signal_stop[GDB_SIGNAL_FBSD_LIBRT] = 0;
-+ signal_print[GDB_SIGNAL_FBSD_LIBRT] = 0;
-
- /* These signals are used internally by user-level thread
- implementations. (See signal(5) on Solaris.) Like the above
-diff --git include/gdb/signals.def include/gdb/signals.def
-index 3f49980..857c69d 100644
---- include/gdb/signals.def
-+++ include/gdb/signals.def
-@@ -197,4 +197,5 @@ SET (GDB_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint")
- /* If you are adding a new signal, add it just above this comment. */
-
- /* Last and unused enum value, for sizing arrays, etc. */
--SET (GDB_SIGNAL_LAST, 151, NULL, "GDB_SIGNAL_LAST")
-+SET (GDB_SIGNAL_FBSD_LIBRT, 151, "SIGLIBRT", "GDB_SIGNAL_FBSD_LIBRT")
-+SET (GDB_SIGNAL_LAST, 152, NULL, "GDB_SIGNAL_MAGIC")
OpenPOWER on IntegriCloud