Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Mar 2018 15:26:18 +0100
From:      Michal Meloun <melounmichal@gmail.com>
To:        Luca Pizzamiglio <pizzamig@FreeBSD.org>, ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   Re: svn commit: r464493 - in head/devel/gdb: . files files/kgdb
Message-ID:  <3f23cada-14ff-d959-3445-7f4f0043ebf6@freebsd.org>
In-Reply-To: <201803141433.w2EEXMGn079353@repo.freebsd.org>
References:  <201803141433.w2EEXMGn079353@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help


On 14.03.2018 15:33, Luca Pizzamiglio wrote:
> Author: pizzamig
> Date: Wed Mar 14 14:33:21 2018
> New Revision: 464493
> URL: https://svnweb.freebsd.org/changeset/ports/464493
> 
> Log:
>    devel/gdb: Update to version 8.1
>    
>    The official annoucement is available here:
>    https://www.gnu.org/software/gdb/download/ANNOUNCEMENT
>    
>    Moreover:
>    * support for 'info proc' is added (jhb@)
>    * update kgdb to use gdb 8.1
>    
>    Reviewed by:	jhb@
>    Differential Revision:	https://reviews.freebsd.org/D14148
> 
This caused breakage for (at least) amd64, armv6, armv7, arm64 on 
12/head. On all these arches, compile fails with:
(taken from amd64 build)

arch/arm-get-next-pcs.c:52:26: error: constant expression evaluates to 
-1 which cannot be narrowed
       to type 'CORE_ADDR' (aka 'unsigned long') [-Wc++11-narrowing]
   CORE_ADDR breaks[2] = {-1, -1};
                          ^~
arch/arm-get-next-pcs.c:52:26: note: insert an explicit cast to silence 
this issue
   CORE_ADDR breaks[2] = {-1, -1};

....


Michal

> Added:
>    head/devel/gdb/files/commit-12279366d7   (contents, props changed)
>    head/devel/gdb/files/commit-262f62f57d   (contents, props changed)
>    head/devel/gdb/files/commit-2d97a5d9d3   (contents, props changed)
>    head/devel/gdb/files/commit-386a867618   (contents, props changed)
>    head/devel/gdb/files/commit-7efba073e2   (contents, props changed)
>    head/devel/gdb/files/commit-906b4aac4c   (contents, props changed)
>    head/devel/gdb/files/commit-92fce24de2   (contents, props changed)
>    head/devel/gdb/files/commit-b999e2038d   (contents, props changed)
>    head/devel/gdb/files/commit-d2176225dc   (contents, props changed)
>    head/devel/gdb/files/commit-f169cfdc08   (contents, props changed)
> Deleted:
>    head/devel/gdb/files/commit-0335ac6d12
>    head/devel/gdb/files/commit-0aa37b654c
>    head/devel/gdb/files/commit-0b9305edf1
>    head/devel/gdb/files/commit-12c4bd7f53
>    head/devel/gdb/files/commit-2af9fc4432
>    head/devel/gdb/files/commit-382b69bbb7
>    head/devel/gdb/files/commit-3c3ae77e68
>    head/devel/gdb/files/commit-45eba0ab7d
>    head/devel/gdb/files/commit-48aeef91c2
>    head/devel/gdb/files/commit-4b654465bf
>    head/devel/gdb/files/commit-544c67cda1
>    head/devel/gdb/files/commit-6d5be5d6b8
>    head/devel/gdb/files/commit-6e5eab33ab
>    head/devel/gdb/files/commit-762c974a09
>    head/devel/gdb/files/commit-929edea98d
>    head/devel/gdb/files/commit-a181c0bf74
>    head/devel/gdb/files/commit-a80a647180
>    head/devel/gdb/files/commit-b30ff123fb
>    head/devel/gdb/files/commit-b5430a3ced
>    head/devel/gdb/files/commit-e6f3b9c319
>    head/devel/gdb/files/patch-aarch64-fbsd
>    head/devel/gdb/files/patch-armfbsd
>    head/devel/gdb/files/patch-gdb_configure.host
>    head/devel/gdb/files/patch-nowarning
> Modified:
>    head/devel/gdb/Makefile
>    head/devel/gdb/distinfo
>    head/devel/gdb/files/extrapatch-kgdb
>    head/devel/gdb/files/kgdb/amd64fbsd-kern.c
>    head/devel/gdb/files/kgdb/fbsd-kld.c
>    head/devel/gdb/files/kgdb/fbsd-kvm.c
>    head/devel/gdb/files/kgdb/i386fbsd-kern.c
>    head/devel/gdb/files/kgdb/kgdb-main.c
>    head/devel/gdb/files/kgdb/mipsfbsd-kern.c
>    head/devel/gdb/files/kgdb/ppcfbsd-kern.c
>    head/devel/gdb/files/kgdb/sparc64fbsd-kern.c
>    head/devel/gdb/files/patch-gdb_configure
> 
> Modified: head/devel/gdb/Makefile
> ==============================================================================
> --- head/devel/gdb/Makefile	Wed Mar 14 13:58:03 2018	(r464492)
> +++ head/devel/gdb/Makefile	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -2,8 +2,7 @@
>   # $FreeBSD$
>   
>   PORTNAME=	gdb
> -PORTVERSION=	8.0.1
> -PORTREVISION=	2
> +PORTVERSION=	8.1
>   CATEGORIES=	devel
>   MASTER_SITES=	GNU
>   
> @@ -39,26 +38,16 @@ CFLAGS:=	${CFLAGS:C/ +$//}	# blanks at EOL creep in so
>   CFLAGS+=	-DRL_NO_COMPAT -Wno-unused-function -Wno-unused-variable
>   EXCLUDE=	dejagnu expect sim texinfo intl
>   EXTRACT_AFTER_ARGS=	${EXCLUDE:S/^/--exclude /}
> -EXTRA_PATCHES=	${FILESDIR}/commit-45eba0ab7d \
> -		${FILESDIR}/commit-3c3ae77e68 \
> -		${FILESDIR}/commit-b5430a3ced \
> -		${FILESDIR}/commit-762c974a09 \
> -		${FILESDIR}/commit-929edea98d \
> -		${FILESDIR}/commit-6e5eab33ab \
> -		${FILESDIR}/commit-382b69bbb7 \
> -		${FILESDIR}/commit-2af9fc4432 \
> -		${FILESDIR}/commit-0b9305edf1 \
> -		${FILESDIR}/commit-e6f3b9c319 \
> -		${FILESDIR}/commit-4b654465bf \
> -		${FILESDIR}/commit-b30ff123fb \
> -		${FILESDIR}/commit-48aeef91c2 \
> -		${FILESDIR}/commit-0aa37b654c \
> -		${FILESDIR}/commit-0335ac6d12 \
> -		${FILESDIR}/commit-12c4bd7f53 \
> -		${FILESDIR}/commit-6d5be5d6b8 \
> -		${FILESDIR}/commit-a80a647180 \
> -		${FILESDIR}/commit-544c67cda1 \
> -		${FILESDIR}/commit-a181c0bf74
> +EXTRA_PATCHES=	${FILESDIR}/commit-d2176225dc \
> +		${FILESDIR}/commit-b999e2038d \
> +		${FILESDIR}/commit-262f62f57d \
> +		${FILESDIR}/commit-92fce24de2 \
> +		${FILESDIR}/commit-2d97a5d9d3 \
> +		${FILESDIR}/commit-906b4aac4c \
> +		${FILESDIR}/commit-f169cfdc08 \
> +		${FILESDIR}/commit-12279366d7 \
> +		${FILESDIR}/commit-386a867618 \
> +		${FILESDIR}/commit-7efba073e2
>   LIB_DEPENDS+=	libexpat.so:textproc/expat2
>   
>   VER=		${PORTVERSION:S/.//g}
> 
> Modified: head/devel/gdb/distinfo
> ==============================================================================
> --- head/devel/gdb/distinfo	Wed Mar 14 13:58:03 2018	(r464492)
> +++ head/devel/gdb/distinfo	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -1,3 +1,3 @@
> -TIMESTAMP = 1505207991
> -SHA256 (gdb-8.0.1.tar.xz) = 3dbd5f93e36ba2815ad0efab030dcd0c7b211d7b353a40a53f4c02d7d56295e3
> -SIZE (gdb-8.0.1.tar.xz) = 19583920
> +TIMESTAMP = 1517392551
> +SHA256 (gdb-8.1.tar.xz) = af61a0263858e69c5dce51eab26662ff3d2ad9aa68da9583e8143b5426be4b34
> +SIZE (gdb-8.1.tar.xz) = 20095080
> 
> Added: head/devel/gdb/files/commit-12279366d7
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-12279366d7	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,121 @@
> +commit 12279366d71627bfbdd74d1a6675dca825d8feca
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Sat Mar 3 21:25:33 2018 -0800
> +
> +    Implement "to_stopped_by_hw_breakpoint" for x86 debug registers.
> +
> +    Report that a thread is stopped by a hardware breakpoint if a non-data
> +    watchpoint is set in DR6.  This change should be a no-op since a target
> +    still needs to implement the "to_supports_stopped_by_hw_breakpoint"
> +    method before this function is used.
> +
> +    gdb/ChangeLog:
> +
> +            * nat/x86-dregs.c (x86_dr_stopped_by_hw_breakpoint): New function.
> +            * nat/x86-dregs.h (x86_dr_stopped_by_hw_breakpoint): New
> +            prototype.
> +            * x86-nat.c (x86_stopped_by_hw_breakpoint): New function.
> +            (x86_use_watchpoints): Set "stopped_by_hw_breakpoint" target
> +            method.
> +
> +diff --git gdb/nat/x86-dregs.c gdb/nat/x86-dregs.c
> +index c816473628..f11a708e27 100644
> +--- gdb/nat/x86-dregs.c
> ++++ gdb/nat/x86-dregs.c
> +@@ -649,3 +649,48 @@ x86_dr_stopped_by_watchpoint (struct x86_debug_reg_state *state)
> +   CORE_ADDR addr = 0;
> +   return x86_dr_stopped_data_address (state, &addr);
> + }
> ++
> ++/* Return non-zero if the inferior has some hardware breakpoint that
> ++   triggered.  Otherwise return zero.  */
> ++
> ++int
> ++x86_dr_stopped_by_hw_breakpoint (struct x86_debug_reg_state *state)
> ++{
> ++  CORE_ADDR addr = 0;
> ++  int i;
> ++  int rc = 0;
> ++  /* The current thread's DR_STATUS.  We always need to read this to
> ++     check whether some watchpoint caused the trap.  */
> ++  unsigned status;
> ++  /* We need DR_CONTROL as well, but only iff DR_STATUS indicates a
> ++     breakpoint trap.  Only fetch it when necessary, to avoid an
> ++     unnecessary extra syscall when no watchpoint triggered.  */
> ++  int control_p = 0;
> ++  unsigned control = 0;
> ++
> ++  /* As above, always read the current thread's debug registers rather
> ++     than trusting dr_mirror.  */
> ++  status = x86_dr_low_get_status ();
> ++
> ++  ALL_DEBUG_ADDRESS_REGISTERS (i)
> ++    {
> ++      if (!X86_DR_WATCH_HIT (status, i))
> ++	continue;
> ++
> ++      if (!control_p)
> ++	{
> ++	  control = x86_dr_low_get_control ();
> ++	  control_p = 1;
> ++	}
> ++
> ++      if (X86_DR_GET_RW_LEN (control, i) == 0)
> ++	{
> ++	  addr = x86_dr_low_get_addr (i);
> ++	  rc = 1;
> ++	  if (show_debug_regs)
> ++	    x86_show_dr (state, "watchpoint_hit", addr, -1, hw_execute);
> ++	}
> ++    }
> ++
> ++  return rc;
> ++}
> +diff --git gdb/nat/x86-dregs.h gdb/nat/x86-dregs.h
> +index dd6242eda9..e86e83aea0 100644
> +--- gdb/nat/x86-dregs.h
> ++++ gdb/nat/x86-dregs.h
> +@@ -128,4 +128,8 @@ extern int x86_dr_stopped_data_address (struct x86_debug_reg_state *state,
> +    Otherwise return false.  */
> + extern int x86_dr_stopped_by_watchpoint (struct x86_debug_reg_state *state);
> +
> ++/* Return true if the inferior has some hardware breakpoint that
> ++   triggered.  Otherwise return false.  */
> ++extern int x86_dr_stopped_by_hw_breakpoint (struct x86_debug_reg_state *state);
> ++
> + #endif /* X86_DREGS_H */
> +diff --git gdb/x86-nat.c gdb/x86-nat.c
> +index b126c47c94..bec51373a6 100644
> +--- gdb/x86-nat.c
> ++++ gdb/x86-nat.c
> +@@ -260,6 +260,18 @@ x86_can_use_hw_breakpoint (struct target_ops *self,
> +   return 1;
> + }
> +
> ++/* Return non-zero if the inferior has some breakpoint that triggered.
> ++   Otherwise return zero.  */
> ++
> ++static int
> ++x86_stopped_by_hw_breakpoint (struct target_ops *ops)
> ++{
> ++  struct x86_debug_reg_state *state
> ++    = x86_debug_reg_state (ptid_get_pid (inferior_ptid));
> ++
> ++  return x86_dr_stopped_by_hw_breakpoint (state);
> ++}
> ++
> + static void
> + add_show_debug_regs_command (void)
> + {
> +@@ -297,6 +309,11 @@ x86_use_watchpoints (struct target_ops *t)
> +   t->to_remove_watchpoint = x86_remove_watchpoint;
> +   t->to_insert_hw_breakpoint = x86_insert_hw_breakpoint;
> +   t->to_remove_hw_breakpoint = x86_remove_hw_breakpoint;
> ++
> ++  /* A target must provide an implementation of the
> ++     "to_supports_stopped_by_hw_breakpoint" target method before this
> ++     callback will be used.  */
> ++  t->to_stopped_by_hw_breakpoint = x86_stopped_by_hw_breakpoint;
> + }
> +
> + void
> 
> Added: head/devel/gdb/files/commit-262f62f57d
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-262f62f57d	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,43 @@
> +commit 262f62f57d987269152412a55c458a03adc6ddd6
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Tue Jan 9 13:35:17 2018 -0800
> +
> +    Use gdb::unique_xmalloc_ptr<> instead of a deleter that invokes free().
> +
> +    Since xfree() always wraps free(), it is safe to use the xfree deleter
> +    for buffers allocated by library routines such as kinfo_getvmmap() that
> +    must be released via free().
> +
> +    gdb/ChangeLog:
> +
> +            * fbsd-nat.c (struct free_deleter): Remove.
> +            (fbsd_find_memory_regions): Use gdb::unique_xmalloc_ptr<>.
> +
> +diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
> +index d0aaf89145..81f8e27a2d 100644
> +--- gdb/fbsd-nat.c
> ++++ gdb/fbsd-nat.c
> +@@ -81,14 +81,6 @@ fbsd_pid_to_exec_file (struct target_ops *self, int pid)
> + }
> +
> + #ifdef HAVE_KINFO_GETVMMAP
> +-/* Deleter for std::unique_ptr that invokes free.  */
> +-
> +-template <typename T>
> +-struct free_deleter
> +-{
> +-  void operator() (T *ptr) const { free (ptr); }
> +-};
> +-
> + /* Iterate over all the memory regions in the current inferior,
> +    calling FUNC for each memory region.  OBFD is passed as the last
> +    argument to FUNC.  */
> +@@ -102,7 +94,7 @@ fbsd_find_memory_regions (struct target_ops *self,
> +   uint64_t size;
> +   int i, nitems;
> +
> +-  std::unique_ptr<struct kinfo_vmentry, free_deleter<struct kinfo_vmentry>>
> ++  gdb::unique_xmalloc_ptr<struct kinfo_vmentry>
> +     vmentl (kinfo_getvmmap (pid, &nitems));
> +   if (vmentl == NULL)
> +     perror_with_name (_("Couldn't fetch VM map entries."));
> 
> Added: head/devel/gdb/files/commit-2d97a5d9d3
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-2d97a5d9d3	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,169 @@
> +commit 2d97a5d9d33aea87c3bd02fd1fa417f5d4e1fa05
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Tue Jan 9 13:35:17 2018 -0800
> +
> +    Document support for 'info proc' on FreeBSD.
> +
> +    Since the 'info proc' support on FreeBSD does not use /proc, reword
> +    the documentation for 'info proc' to not assume /proc.  This includes
> +    renaming the node to 'Process Information' and suggesting that
> +    additional process information can be queried via different
> +    OS-specific interfaces.  This is also cleans up the description of
> +    'info proc' support for core files a bit as /proc is not used for core
> +    file support on any current platform.
> +
> +    gdb/ChangeLog:
> +
> +            * NEWS: Document that 'info proc' now works on FreeBSD.
> +
> +    gdb/doc/ChangeLog:
> +
> +            * gdb.texinfo (pwd): Update cross-reference for Process Information
> +            node and remove explicit /proc reference.
> +            (Native): Rename subsection from SVR4 Process Information to
> +            Process Information.
> +            (Process Information): Reword introduction to be less /proc
> +            centric.  Document support for "info proc" on FreeBSD.
> +
> +diff --git gdb/NEWS gdb/NEWS
> +index 2f834c6ff4..f69173a245 100644
> +--- gdb/NEWS
> ++++ gdb/NEWS
> +@@ -3,6 +3,9 @@
> +
> + *** Changes since GDB 8.1
> +
> ++* 'info proc' now works on running processes on FreeBSD systems and core
> ++  files created on FreeBSD systems.
> ++
> + *** Changes in GDB 8.1
> +
> + * GDB now supports dynamically creating arbitrary register groups specified
> +diff --git gdb/doc/gdb.texinfo gdb/doc/gdb.texinfo
> +index 8bdafb0ba4..096c82cc82 100644
> +--- gdb/doc/gdb.texinfo
> ++++ gdb/doc/gdb.texinfo
> +@@ -2523,9 +2523,9 @@ Print the @value{GDBN} working directory.
> +
> + It is generally impossible to find the current working directory of
> + the process being debugged (since a program can change its directory
> +-during its run).  If you work on a system where @value{GDBN} is
> +-configured with the @file{/proc} support, you can use the @code{info
> +-proc} command (@pxref{SVR4 Process Information}) to find out the
> ++during its run).  If you work on a system where @value{GDBN} supports
> ++the @code {info proc} command (@pxref{Process Information}), you can
> ++use the @code{info proc} command to find out the
> + current working directory of the debuggee.
> +
> + @node Input/Output
> +@@ -21712,7 +21712,7 @@ configurations.
> +
> + @menu
> + * BSD libkvm Interface::	Debugging BSD kernel memory images
> +-* SVR4 Process Information::    SVR4 process information
> ++* Process Information::         Process information
> + * DJGPP Native::                Features specific to the DJGPP port
> + * Cygwin Native::		Features specific to the Cygwin port
> + * Hurd Native::                 Features specific to @sc{gnu} Hurd
> +@@ -21759,24 +21759,32 @@ Set current context from proc address.  This command isn't available on
> + modern FreeBSD systems.
> + @end table
> +
> +-@node SVR4 Process Information
> +-@subsection SVR4 Process Information
> ++@node Process Information
> ++@subsection Process Information
> + @cindex /proc
> + @cindex examine process image
> + @cindex process info via @file{/proc}
> +
> +-Many versions of SVR4 and compatible systems provide a facility called
> +-@samp{/proc} that can be used to examine the image of a running
> +-process using file-system subroutines.
> ++Some operating systems provide interfaces to fetch additional
> ++information about running processes beyond memory and per-thread
> ++register state.  If @value{GDBN} is configured for an operating system
> ++with a supported interface, the command @code{info proc} is available
> ++to report information about the process running your program, or about
> ++any process running on your system.
> +
> +-If @value{GDBN} is configured for an operating system with this
> +-facility, the command @code{info proc} is available to report
> +-information about the process running your program, or about any
> +-process running on your system.  This includes, as of this writing,
> +-@sc{gnu}/Linux and Solaris, for example.
> ++One supported interface is a facility called @samp{/proc} that can be
> ++used to examine the image of a running process using file-system
> ++subroutines.  This facility is supported on @sc{gnu}/Linux and Solaris
> ++systems.
> +
> +-This command may also work on core files that were created on a system
> +-that has the @samp{/proc} facility.
> ++On FreeBSD systems, system control nodes are used to query process
> ++information.
> ++
> ++In addition, some systems may provide additional process information
> ++in core files.  Note that a core file may include a subset of the
> ++information available from a live process.  Process information is
> ++currently avaiable from cores created on @sc{gnu}/Linux and FreeBSD
> ++systems.
> +
> + @table @code
> + @kindex info proc
> +@@ -21800,36 +21808,40 @@ a process ID rather than a thread ID).
> + @item info proc cmdline
> + @cindex info proc cmdline
> + Show the original command line of the process.  This command is
> +-specific to @sc{gnu}/Linux.
> ++supported on @sc{gnu}/Linux and FreeBSD.
> +
> + @item info proc cwd
> + @cindex info proc cwd
> + Show the current working directory of the process.  This command is
> +-specific to @sc{gnu}/Linux.
> ++supported on @sc{gnu}/Linux and FreeBSD.
> +
> + @item info proc exe
> + @cindex info proc exe
> +-Show the name of executable of the process.  This command is specific
> +-to @sc{gnu}/Linux.
> ++Show the name of executable of the process.  This command is supported
> ++on @sc{gnu}/Linux and FreeBSD.
> +
> + @item info proc mappings
> + @cindex memory address space mappings
> +-Report the memory address space ranges accessible in the program, with
> +-information on whether the process has read, write, or execute access
> +-rights to each range.  On @sc{gnu}/Linux systems, each memory range
> +-includes the object file which is mapped to that range, instead of the
> +-memory access rights to that range.
> ++Report the memory address space ranges accessible in the program.  On
> ++Solaris and FreeBSD systems, each memory range includes information on
> ++whether the process has read, write, or execute access rights to each
> ++range.  On @sc{gnu}/Linux and FreeBSD systems, each memory range
> ++includes the object file which is mapped to that range.
> +
> + @item info proc stat
> + @itemx info proc status
> + @cindex process detailed status information
> +-These subcommands are specific to @sc{gnu}/Linux systems.  They show
> +-the process-related information, including the user ID and group ID;
> +-how many threads are there in the process; its virtual memory usage;
> +-the signals that are pending, blocked, and ignored; its TTY; its
> +-consumption of system and user time; its stack size; its @samp{nice}
> +-value; etc.  For more information, see the @samp{proc} man page
> +-(type @kbd{man 5 proc} from your shell prompt).
> ++Show additional process-related information, including the user ID and
> ++group ID; virtual memory usage; the signals that are pending, blocked,
> ++and ignored; its TTY; its consumption of system and user time; its
> ++stack size; its @samp{nice} value; etc.  These commands are supported
> ++on @sc{gnu}/Linux and FreeBSD.
> ++
> ++For @sc{gnu}/Linux systems, see the @samp{proc} man page for more
> ++information (type @kbd{man 5 proc} from your shell prompt).
> ++
> ++For FreeBSD systems, @code{info proc stat} is an alias for @code{info
> ++proc status}.
> +
> + @item info proc all
> + Show all the information about the process described under all of the
> 
> Added: head/devel/gdb/files/commit-386a867618
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-386a867618	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,115 @@
> +commit 386a86761838df16c1459275d465ed21a1c35d9f
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Sat Mar 3 21:25:33 2018 -0800
> +
> +    Add a new debug knob for the FreeBSD native target.
> +
> +    For now this just logs information about the state of the current LWP
> +    for each STOPPED event in fbsd_wait().
> +
> +    gdb/ChangeLog:
> +
> +            * NEWS (Changes since GDB 8.1): Add "set/show debug fbsd-nat".
> +            * fbsd-nat.c (debug_fbsd_nat): New variable.
> +            (show_fbsd_nat_debug): New function.
> +            (fbsd_wait): Log LWP info if "debug_fbsd_nat" is enabled.
> +            (_initialize_fbsd_nat): Add "fbsd-nat" debug boolean command.
> +
> +    gdb/doc/ChangeLog:
> +
> +            * gdb.texinfo (Debugging Output): Document "set/show debug
> +            fbsd-nat".
> +
> +diff --git gdb/NEWS gdb/NEWS
> +index 1767cef920..867e268a2a 100644
> +--- gdb/NEWS
> ++++ gdb/NEWS
> +@@ -6,6 +6,12 @@
> + * 'info proc' now works on running processes on FreeBSD systems and core
> +   files created on FreeBSD systems.
> +
> ++* New commands
> ++
> ++set debug fbsd-nat
> ++show debug fbsd-nat
> ++  Control display of debugging info regarding the FreeBSD native target.
> ++
> + *** Changes in GDB 8.1
> +
> + * GDB now supports dynamically creating arbitrary register groups specified
> +diff --git gdb/doc/gdb.texinfo gdb/doc/gdb.texinfo
> +index ee7adc8df2..74e0fdb4a4 100644
> +--- gdb/doc/gdb.texinfo
> ++++ gdb/doc/gdb.texinfo
> +@@ -24554,6 +24554,11 @@ Displays the current state of displaying debugging info about
> + Turns on or off debugging messages from the FreeBSD LWP debug support.
> + @item show debug fbsd-lwp
> + Show the current state of FreeBSD LWP debugging messages.
> ++@item set debug fbsd-nat
> ++@cindex FreeBSD native target debug messages
> ++Turns on or off debugging messages from the FreeBSD native target.
> ++@item show debug fbsd-nat
> ++Show the current state of FreeBSD native target debugging messages.
> + @item set debug frame
> + @cindex frame debugging info
> + Turns on or off display of @value{GDBN} frame debugging info.  The
> +diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
> +index 3a216abf18..2516ac5552 100644
> +--- gdb/fbsd-nat.c
> ++++ gdb/fbsd-nat.c
> +@@ -765,6 +765,7 @@ fbsd_xfer_partial (struct target_ops *ops, enum target_object object,
> +
> + #ifdef PT_LWPINFO
> + static int debug_fbsd_lwp;
> ++static int debug_fbsd_nat;
> +
> + static void (*super_resume) (struct target_ops *,
> + 			     ptid_t,
> +@@ -782,6 +783,14 @@ show_fbsd_lwp_debug (struct ui_file *file, int from_tty,
> +   fprintf_filtered (file, _("Debugging of FreeBSD lwp module is %s.\n"), value);
> + }
> +
> ++static void
> ++show_fbsd_nat_debug (struct ui_file *file, int from_tty,
> ++		     struct cmd_list_element *c, const char *value)
> ++{
> ++  fprintf_filtered (file, _("Debugging of FreeBSD native target is %s.\n"),
> ++		    value);
> ++}
> ++
> + /*
> +   FreeBSD's first thread support was via a "reentrant" version of libc
> +   (libc_r) that first shipped in 2.2.7.  This library multiplexed all
> +@@ -1212,6 +1221,18 @@ fbsd_wait (struct target_ops *ops,
> +
> + 	  wptid = ptid_build (pid, pl.pl_lwpid, 0);
> +
> ++	  if (debug_fbsd_nat)
> ++	    {
> ++	      fprintf_unfiltered (gdb_stdlog,
> ++				  "FNAT: stop for LWP %u event %d flags %#x\n",
> ++				  pl.pl_lwpid, pl.pl_event, pl.pl_flags);
> ++	      if (pl.pl_flags & PL_FLAG_SI)
> ++		fprintf_unfiltered (gdb_stdlog,
> ++				    "FNAT: si_signo %u si_code %u\n",
> ++				    pl.pl_siginfo.si_signo,
> ++				    pl.pl_siginfo.si_code);
> ++	    }
> ++
> + #ifdef PT_LWP_EVENTS
> + 	  if (pl.pl_flags & PL_FLAG_EXITED)
> + 	    {
> +@@ -1569,5 +1590,13 @@ Enables printf debugging output."),
> + 			   NULL,
> + 			   &show_fbsd_lwp_debug,
> + 			   &setdebuglist, &showdebuglist);
> ++  add_setshow_boolean_cmd ("fbsd-nat", class_maintenance,
> ++			   &debug_fbsd_nat, _("\
> ++Set debugging of FreeBSD native target."), _("\
> ++Show debugging of FreeBSD native target."), _("\
> ++Enables printf debugging output."),
> ++			   NULL,
> ++			   &show_fbsd_nat_debug,
> ++			   &setdebuglist, &showdebuglist);
> + #endif
> + }
> 
> Added: head/devel/gdb/files/commit-7efba073e2
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-7efba073e2	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,184 @@
> +commit 7efba073e2b83803a47fd89e701fe60b98f2debc
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Sat Mar 3 21:25:33 2018 -0800
> +
> +    Use signal information to determine SIGTRAP type for FreeBSD.
> +
> +    Use the signal code from siginfo_t to distinguish SIGTRAP events due
> +    to trace traps (TRAP_TRACE) and software breakpoints (TRAP_BRKPT).
> +    For software breakpoints, adjust the PC when the event is reported as
> +    part of the API when supplying "stopped_by_sw_breakpoint".  Currently
> +    FreeBSD only supports hardware watchpoints and breakpoints on x86
> +    which are reported as trace traps.  Signal information is not used on
> +    MIPS and sparc64 kernels which do not reliably report TRAP_BRKPT for
> +    software breakpoints.
> +
> +    gdb/ChangeLog:
> +
> +            * fbsd-nat.c: Include "inf-ptrace.h".
> +            (USE_SIGTRAP_SIGINFO): Conditionally define.
> +            [USE_SIGTRAP_SIGINFO] (fbsd_handle_debug_trap): New function.
> +            (fbsd_wait) [USE_SIGTRAP_SIGINFO]: Call "fbsd_handle_debug_trap".
> +            [USE_SIGTRAP_SIGINFO] (fbsd_stopped_by_sw_breakpoint): New
> +            function.
> +            [USE_SIGTRAP_SIGINFO] (fbsd_supports_stopped_by_sw_breakpoint):
> +            Likewise.
> +            [USE_SIGTRAP_SIGINFO] (fbsd_supports_stopped_by_hw_breakpoint):
> +            Likewise.
> +            (fbsd_nat_add_target) [USE_SIGTRAP_SIGINFO]: Set
> +            "stopped_by_sw_breakpoint", "supports_stopped_by_sw_breakpoint",
> +            "supports_stopped_by_hw_breakpoint" target methods.
> +
> +diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
> +index 2516ac5552..bea7f42c7e 100644
> +--- gdb/fbsd-nat.c
> ++++ gdb/fbsd-nat.c
> +@@ -26,6 +26,7 @@
> + #include "gdbcmd.h"
> + #include "gdbthread.h"
> + #include "gdb_wait.h"
> ++#include "inf-ptrace.h"
> + #include <sys/types.h>
> + #include <sys/procfs.h>
> + #include <sys/ptrace.h>
> +@@ -45,6 +46,14 @@
> +
> + #include <list>
> +
> ++#ifdef TRAP_BRKPT
> ++/* MIPS does not set si_code for SIGTRAP.  sparc64 reports
> ++   non-standard values in si_code for SIGTRAP.  */
> ++# if !defined(__mips__) && !defined(__sparc64__)
> ++#  define USE_SIGTRAP_SIGINFO
> ++# endif
> ++#endif
> ++
> + /* Return the name of a file that can be opened to get the symbols for
> +    the child process identified by PID.  */
> +
> +@@ -1187,6 +1196,56 @@ fbsd_resume (struct target_ops *ops,
> +   super_resume (ops, ptid, step, signo);
> + }
> +
> ++#ifdef USE_SIGTRAP_SIGINFO
> ++/* Handle breakpoint and trace traps reported via SIGTRAP.  If the
> ++   trap was a breakpoint or trace trap that should be reported to the
> ++   core, return true.  */
> ++
> ++static bool
> ++fbsd_handle_debug_trap (struct target_ops *ops, ptid_t ptid,
> ++			const struct ptrace_lwpinfo &pl)
> ++{
> ++
> ++  /* Ignore traps without valid siginfo or for signals other than
> ++     SIGTRAP.  */
> ++  if (! (pl.pl_flags & PL_FLAG_SI) || pl.pl_siginfo.si_signo != SIGTRAP)
> ++    return false;
> ++
> ++  /* Trace traps are either a single step or a hardware watchpoint or
> ++     breakpoint.  */
> ++  if (pl.pl_siginfo.si_code == TRAP_TRACE)
> ++    {
> ++      if (debug_fbsd_nat)
> ++	fprintf_unfiltered (gdb_stdlog,
> ++			    "FNAT: trace trap for LWP %ld\n", ptid.lwp ());
> ++      return true;
> ++    }
> ++
> ++  if (pl.pl_siginfo.si_code == TRAP_BRKPT)
> ++    {
> ++      /* Fixup PC for the software breakpoint.  */
> ++      struct regcache *regcache = get_thread_regcache (ptid);
> ++      struct gdbarch *gdbarch = regcache->arch ();
> ++      int decr_pc = gdbarch_decr_pc_after_break (gdbarch);
> ++
> ++      if (debug_fbsd_nat)
> ++	fprintf_unfiltered (gdb_stdlog,
> ++			    "FNAT: sw breakpoint trap for LWP %ld\n",
> ++			    ptid.lwp ());
> ++      if (decr_pc != 0)
> ++	{
> ++	  CORE_ADDR pc;
> ++
> ++	  pc = regcache_read_pc (regcache);
> ++	  regcache_write_pc (regcache, pc - decr_pc);
> ++	}
> ++      return true;
> ++    }
> ++
> ++  return false;
> ++}
> ++#endif
> ++
> + /* Wait for the child specified by PTID to do something.  Return the
> +    process ID of the child, or MINUS_ONE_PTID in case of error; store
> +    the status in *OURSTATUS.  */
> +@@ -1372,6 +1431,11 @@ fbsd_wait (struct target_ops *ops,
> + 	    }
> + #endif
> +
> ++#ifdef USE_SIGTRAP_SIGINFO
> ++	  if (fbsd_handle_debug_trap (ops, wptid, pl))
> ++	    return wptid;
> ++#endif
> ++
> + 	  /* Note that PL_FLAG_SCE is set for any event reported while
> + 	     a thread is executing a system call in the kernel.  In
> + 	     particular, signals that interrupt a sleep in a system
> +@@ -1410,6 +1474,42 @@ fbsd_wait (struct target_ops *ops,
> +     }
> + }
> +
> ++#ifdef USE_SIGTRAP_SIGINFO
> ++/* Implement the "to_stopped_by_sw_breakpoint" target_ops method.  */
> ++
> ++static int
> ++fbsd_stopped_by_sw_breakpoint (struct target_ops *ops)
> ++{
> ++  struct ptrace_lwpinfo pl;
> ++
> ++  if (ptrace (PT_LWPINFO, get_ptrace_pid (inferior_ptid), (caddr_t) &pl,
> ++	      sizeof pl) == -1)
> ++    return 0;
> ++
> ++  return ((pl.pl_flags & PL_FLAG_SI)
> ++	  && pl.pl_siginfo.si_signo == SIGTRAP
> ++	  && pl.pl_siginfo.si_code == TRAP_BRKPT);
> ++}
> ++
> ++/* Implement the "to_supports_stopped_by_sw_breakpoint" target_ops
> ++   method.  */
> ++
> ++static int
> ++fbsd_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
> ++{
> ++  return 1;
> ++}
> ++
> ++/* Implement the "to_supports_stopped_by_hw_breakpoint" target_ops
> ++   method.  */
> ++
> ++static int
> ++fbsd_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
> ++{
> ++  return ops->to_stopped_by_hw_breakpoint != NULL;
> ++}
> ++#endif
> ++
> + #ifdef TDP_RFPPWAIT
> + /* Target hook for follow_fork.  On entry and at return inferior_ptid is
> +    the ptid of the followed inferior.  */
> +@@ -1560,6 +1660,13 @@ fbsd_nat_add_target (struct target_ops *t)
> +   t->to_wait = fbsd_wait;
> +   t->to_post_startup_inferior = fbsd_post_startup_inferior;
> +   t->to_post_attach = fbsd_post_attach;
> ++#ifdef USE_SIGTRAP_SIGINFO
> ++  t->to_stopped_by_sw_breakpoint = fbsd_stopped_by_sw_breakpoint;
> ++  t->to_supports_stopped_by_sw_breakpoint
> ++    = fbsd_supports_stopped_by_sw_breakpoint;
> ++  t->to_supports_stopped_by_hw_breakpoint
> ++    = fbsd_supports_stopped_by_hw_breakpoint;
> ++#endif
> + #ifdef TDP_RFPPWAIT
> +   t->to_follow_fork = fbsd_follow_fork;
> +   t->to_insert_fork_catchpoint = fbsd_insert_fork_catchpoint;
> 
> Added: head/devel/gdb/files/commit-906b4aac4c
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-906b4aac4c	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,29 @@
> +commit 906b4aac4c1d3cdb2b1ea7105133cfbe25e04e14
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Fri Jan 12 12:05:50 2018 -0800
> +
> +    Use the correct value for the offset of 'kve_protection'.
> +
> +    I had forgotten to convert the decimal output of 'ptype /o' to hex
> +    (but still used a 0x prefix) for the KVE_PROTECTION constant defining
> +    the offset of the 'kve_protection' field in the 'kinfo_vmentry'
> +    structure.  This resulted in garbage permissions for entries in 'info
> +    proc mappings' for FreeBSD core dumps.
> +
> +    gdb/ChangeLog:
> +
> +            * fbsd-tdep.c (KVE_PROTECTION): Correct value.
> +
> +diff --git gdb/fbsd-tdep.c gdb/fbsd-tdep.c
> +index 8aa0243d54..e49a9aff09 100644
> +--- gdb/fbsd-tdep.c
> ++++ gdb/fbsd-tdep.c
> +@@ -62,7 +62,7 @@
> + #define	KVE_END			0x10
> + #define	KVE_OFFSET		0x18
> + #define	KVE_FLAGS		0x2c
> +-#define	KVE_PROTECTION		0x56
> ++#define	KVE_PROTECTION		0x38
> + #define	KVE_PATH		0x88
> +
> + /* Flags in the 'kve_protection' field in struct kinfo_vmentry.  These
> 
> Added: head/devel/gdb/files/commit-92fce24de2
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/devel/gdb/files/commit-92fce24de2	Wed Mar 14 14:33:21 2018	(r464493)
> @@ -0,0 +1,548 @@
> +commit 92fce24de299a8b9a9a1c0c6b98e0e9c1656f99c
> +Author: John Baldwin <jhb@FreeBSD.org>
> +Date:   Tue Jan 9 13:35:17 2018 -0800
> +
> +    Support 'info proc' for native FreeBSD processes.
> +
> +    - Command line arguments are fetched via the kern.proc.args.<pid>
> +      sysctl.
> +    - The 'cwd' and 'exe' values are obtained from the per-process
> +      file descriptor table returned by kinfo_getfile() from libutil.
> +    - 'mappings' is implemented by walking the array of VM map entries
> +      returned by kinfo_getvmmap() from libutil.
> +    - 'status' output is generated by outputting fields from the structure
> +      returned by the kern.proc.pid.<pid> sysctl.
> +    - 'stat' is aliased to 'status'.
> +
> +    gdb/ChangeLog:
> +
> +            * configure.ac: Check for kinfo_getfile in libutil.
> +            * configure: Regenerate.
> +            * config.in: Regenerate.
> +            * fbsd-nat.c: Include "fbsd-tdep.h".
> +            (fbsd_fetch_cmdline): New.
> +            (fbsd_fetch_kinfo_proc): Move earlier and change to return a bool
> +            rather than calling error.
> +            (fbsd_info_proc): New.
> +            (fbsd_thread_name): Report error if fbsd_fetch_kinfo_proc fails.
> +            (fbsd_wait): Report warning if fbsd_fetch_kinfo_proc fails.
> +            (fbsd_nat_add_target): Set "to_info_proc" to "fbsd_info_proc".
> +
> +diff --git gdb/config.in gdb/config.in
> +index 1d11a97080..ad2cc1754e 100644
> +--- gdb/config.in
> ++++ gdb/config.in
> +@@ -219,6 +219,9 @@
> + /* Define to 1 if you have the <inttypes.h> header file. */
> + #undef HAVE_INTTYPES_H
> +
> ++/* Define to 1 if your system has the kinfo_getfile function. */
> ++#undef HAVE_KINFO_GETFILE
> ++
> + /* Define to 1 if your system has the kinfo_getvmmap function. */
> + #undef HAVE_KINFO_GETVMMAP
> +
> +diff --git gdb/configure gdb/configure
> +index db610f32fc..68b9aad02d 100755
> +--- gdb/configure
> ++++ gdb/configure
> +@@ -7927,6 +7927,66 @@ $as_echo "#define HAVE_KINFO_GETVMMAP 1" >>confdefs.h
> + fi
> +
> +
> ++# fbsd-nat.c can also use kinfo_getfile.
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5
> ++$as_echo_n "checking for library containing kinfo_getfile... " >&6; }
> ++if test "${ac_cv_search_kinfo_getfile+set}" = set; then :
> ++  $as_echo_n "(cached) " >&6
> ++else
> ++  ac_func_search_save_LIBS=$LIBS
> ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++
> ++/* Override any GCC internal prototype to avoid an error.
> ++   Use char because int might match the return type of a GCC
> ++   builtin and then its argument prototype would still apply.  */
> ++#ifdef __cplusplus
> ++extern "C"
> ++#endif
> ++char kinfo_getfile ();
> ++int
> ++main ()
> ++{
> ++return kinfo_getfile ();
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++for ac_lib in '' util util-freebsd; do
> ++  if test -z "$ac_lib"; then
> ++    ac_res="none required"
> ++  else
> ++    ac_res=-l$ac_lib
> ++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
> ++  fi
> ++  if ac_fn_c_try_link "$LINENO"; then :
> ++  ac_cv_search_kinfo_getfile=$ac_res
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext
> ++  if test "${ac_cv_search_kinfo_getfile+set}" = set; then :
> ++  break
> ++fi
> ++done
> ++if test "${ac_cv_search_kinfo_getfile+set}" = set; then :
> ++
> ++else
> ++  ac_cv_search_kinfo_getfile=no
> ++fi
> ++rm conftest.$ac_ext
> ++LIBS=$ac_func_search_save_LIBS
> ++fi
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5
> ++$as_echo "$ac_cv_search_kinfo_getfile" >&6; }
> ++ac_res=$ac_cv_search_kinfo_getfile
> ++if test "$ac_res" != no; then :
> ++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
> ++
> ++$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h
> ++
> ++fi
> ++
> ++
> +
> +       if test "X$prefix" = "XNONE"; then
> +     acl_final_prefix="$ac_default_prefix"
> +diff --git gdb/configure.ac gdb/configure.ac
> +index 3db44ae758..551afc727e 100644
> +--- gdb/configure.ac
> ++++ gdb/configure.ac
> +@@ -523,6 +523,11 @@ AC_SEARCH_LIBS(kinfo_getvmmap, util util-freebsd,
> +   [AC_DEFINE(HAVE_KINFO_GETVMMAP, 1,
> +             [Define to 1 if your system has the kinfo_getvmmap function. ])])
> +
> ++# fbsd-nat.c can also use kinfo_getfile.
> ++AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd,
> ++  [AC_DEFINE(HAVE_KINFO_GETFILE, 1,
> ++            [Define to 1 if your system has the kinfo_getfile function. ])])
> ++
> + AM_ICONV
> +
> + # GDB may fork/exec the iconv program to get the list of supported character
> +diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
> +index 81f8e27a2d..b352418813 100644
> +--- gdb/fbsd-nat.c
> ++++ gdb/fbsd-nat.c
> +@@ -32,14 +32,16 @@
> + #include <sys/signal.h>
> + #include <sys/sysctl.h>
> + #include <sys/user.h>
> +-#ifdef HAVE_KINFO_GETVMMAP
> ++#if defined(HAVE_KINFO_GETFILE) || defined(HAVE_KINFO_GETVMMAP)
> + #include <libutil.h>
> +-#else
> ++#endif
> ++#if !defined(HAVE_KINFO_GETVMMAP)
> + #include "filestuff.h"
> + #endif
> +
> + #include "elf-bfd.h"
> + #include "fbsd-nat.h"
> ++#include "fbsd-tdep.h"
> +
> + #include <list>
> +
> +@@ -205,6 +207,331 @@ fbsd_find_memory_regions (struct target_ops *self,
> + }
> + #endif
> +
> ++/* Fetch the command line for a running process.  */
> ++
> ++static gdb::unique_xmalloc_ptr<char>
> ++fbsd_fetch_cmdline (pid_t pid)
> ++{
> ++  size_t len;
> ++  int mib[4];
> ++
> ++  len = 0;
> ++  mib[0] = CTL_KERN;
> ++  mib[1] = KERN_PROC;
> ++  mib[2] = KERN_PROC_ARGS;
> ++  mib[3] = pid;
> ++  if (sysctl (mib, 4, NULL, &len, NULL, 0) == -1)
> ++    return nullptr;
> ++
> ++  if (len == 0)
> ++    return nullptr;
> ++
> ++  gdb::unique_xmalloc_ptr<char> cmdline ((char *) xmalloc (len));
> ++  if (sysctl (mib, 4, cmdline.get (), &len, NULL, 0) == -1)
> ++    return nullptr;
> ++
> ++  return cmdline;
> ++}
> ++
> ++/* Fetch the external variant of the kernel's internal process
> ++   structure for the process PID into KP.  */
> ++
> ++static bool
> ++fbsd_fetch_kinfo_proc (pid_t pid, struct kinfo_proc *kp)
> ++{
> ++  size_t len;
> ++  int mib[4];
> ++
> ++  len = sizeof *kp;
> ++  mib[0] = CTL_KERN;
> ++  mib[1] = KERN_PROC;
> ++  mib[2] = KERN_PROC_PID;
> ++  mib[3] = pid;
> ++  return (sysctl (mib, 4, kp, &len, NULL, 0) == 0);
> ++}
> ++
> ++/* Implement the "to_info_proc target_ops" method.  */
> ++
> ++static void
> ++fbsd_info_proc (struct target_ops *ops, const char *args,
> ++		enum info_proc_what what)
> ++{
> ++#ifdef HAVE_KINFO_GETFILE
> ++  gdb::unique_xmalloc_ptr<struct kinfo_file> fdtbl;
> ++  int nfd = 0;
> ++#endif
> ++  struct kinfo_proc kp;
> ++  char *tmp;
> ++  pid_t pid;
> ++  bool do_cmdline = false;
> ++  bool do_cwd = false;
> ++  bool do_exe = false;
> ++#ifdef HAVE_KINFO_GETVMMAP
> ++  bool do_mappings = false;
> ++#endif
> ++  bool do_status = false;
> ++
> ++  switch (what)
> ++    {
> ++    case IP_MINIMAL:
> ++      do_cmdline = true;
> ++      do_cwd = true;
> ++      do_exe = true;
> ++      break;
> ++#ifdef HAVE_KINFO_GETVMMAP
> ++    case IP_MAPPINGS:
> ++      do_mappings = true;
> ++      break;
> ++#endif
> ++    case IP_STATUS:
> ++    case IP_STAT:
> ++      do_status = true;
> ++      break;
> ++    case IP_CMDLINE:
> ++      do_cmdline = true;
> ++      break;
> ++    case IP_EXE:
> ++      do_exe = true;
> ++      break;
> ++    case IP_CWD:
> ++      do_cwd = true;
> ++      break;
> ++    case IP_ALL:
> ++      do_cmdline = true;
> ++      do_cwd = true;
> ++      do_exe = true;
> ++#ifdef HAVE_KINFO_GETVMMAP
> ++      do_mappings = true;
> ++#endif
> ++      do_status = true;
> ++      break;
> ++    default:
> ++      error (_("Not supported on this target."));
> ++    }
> ++
> 
> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
> _______________________________________________
> svn-ports-head@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-ports-head
> To unsubscribe, send any mail to "svn-ports-head-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3f23cada-14ff-d959-3445-7f4f0043ebf6>