svn commit: r464493 - in head/devel/gdb: . files files/kgdb

Luca Pizzamiglio pizzamig at freebsd.org
Thu Mar 15 17:43:33 UTC 2018


clang 6 is the problem, is too strict.
I'm working on a patch.


On Thu, Mar 15, 2018 at 3:26 PM, Michal Meloun <melounmichal at gmail.com>
wrote:

>
>
> 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) = 3dbd5f93e36ba2815ad0efab030dcd
>> 0c7b211d7b353a40a53f4c02d7d56295e3
>> -SIZE (gdb-8.0.1.tar.xz) = 19583920
>> +TIMESTAMP = 1517392551
>> +SHA256 (gdb-8.1.tar.xz) = af61a0263858e69c5dce51eab26662
>> ff3d2ad9aa68da9583e8143b5426be4b34
>> +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 at 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 at 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 at 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
>> +
>> +- at node SVR4 Process Information
>> +- at subsection SVR4 Process Information
>> ++ at node Process Information
>> ++ at 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
>> +- at 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,
>> +- at 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 at 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.
>> ++ at item set debug fbsd-nat
>> ++ at cindex FreeBSD native target debug messages
>> ++Turns on or off debugging messages from the FreeBSD native target.
>> ++ at 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 at 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_b
>> reakpoint):
>> +            Likewise.
>> +            [USE_SIGTRAP_SIGINFO] (fbsd_supports_stopped_by_hw_b
>> reakpoint):
>> +            Likewise.
>> +            (fbsd_nat_add_target) [USE_SIGTRAP_SIGINFO]: Set
>> +            "stopped_by_sw_breakpoint", "supports_stopped_by_sw_breakp
>> oint",
>> +            "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 at 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 at 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 at freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/svn-ports-head
>> To unsubscribe, send any mail to "svn-ports-head-unsubscribe at freebsd.org"
>>
>>


More information about the svn-ports-all mailing list