svn commit: r464493 - in head/devel/gdb: . files files/kgdb
Michal Meloun
melounmichal at gmail.com
Thu Mar 15 14:26:21 UTC 2018
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 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_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 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