FreeBSD Bugzilla – Attachment 172759 Details for
Bug 211254
devel/gdb: More fork fixes and PRPSINFO version 1a
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
gdb_port.patch
gdb_port.patch (text/plain), 21.61 KB, created by
John Baldwin
on 2016-07-20 19:23:30 UTC
(
hide
)
Description:
gdb_port.patch
Filename:
MIME Type:
Creator:
John Baldwin
Created:
2016-07-20 19:23:30 UTC
Size:
21.61 KB
patch
obsolete
>Index: Makefile >=================================================================== >--- Makefile (revision 418843) >+++ Makefile (working copy) >@@ -3,7 +3,7 @@ > > PORTNAME= gdb > PORTVERSION= 7.11.1 >-PORTREVISION= 2 >+PORTREVISION= 3 > CATEGORIES= devel > MASTER_SITES= GNU > >@@ -43,7 +43,12 @@ > ${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 @@ > > .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 >Index: files/commit-0064d22 >=================================================================== >--- files/commit-0064d22 (nonexistent) >+++ files/commit-0064d22 (working copy) >@@ -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; >+ } > >Property changes on: files/commit-0064d22 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: files/commit-5fa14c6 >=================================================================== >--- files/commit-5fa14c6 (nonexistent) >+++ files/commit-5fa14c6 (working copy) >@@ -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); > >Property changes on: files/commit-5fa14c6 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: files/commit-bc7b765 >=================================================================== >--- files/commit-bc7b765 (nonexistent) >+++ files/commit-bc7b765 (working copy) >@@ -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") > >Property changes on: files/commit-bc7b765 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: files/commit-da95a26 >=================================================================== >--- files/commit-da95a26 (nonexistent) >+++ files/commit-da95a26 (working copy) >@@ -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); >+ } >+ > >Property changes on: files/commit-da95a26 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: files/commit-dbaed38 >=================================================================== >--- files/commit-dbaed38 (nonexistent) >+++ files/commit-dbaed38 (working copy) >@@ -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; > >Property changes on: files/commit-dbaed38 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: files/patch-sigev >=================================================================== >--- files/patch-sigev (revision 418843) >+++ files/patch-sigev (nonexistent) >@@ -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") > >Property changes on: files/patch-sigev >___________________________________________________________________ >Deleted: fbsd:nokeywords >## -1 +0,0 ## >-yes >\ No newline at end of property >Deleted: svn:eol-style >## -1 +0,0 ## >-native >\ No newline at end of property >Deleted: svn:mime-type >## -1 +0,0 ## >-text/plain >\ No newline at end of property
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
luca.pizzamiglio:
maintainer-approval+
Actions:
View
|
Diff
Attachments on
bug 211254
: 172759