Fix 'info proc cmdline' for native FreeBSD processes.
authorJohn Baldwin <jhb@FreeBSD.org>
Wed, 6 Feb 2019 17:45:50 +0000 (09:45 -0800)
committerJohn Baldwin <jhb@FreeBSD.org>
Wed, 6 Feb 2019 17:45:50 +0000 (09:45 -0800)
The kern.proc.args.<pid> sysctl returns the argv array as a packed
array of arguments, each null terminated.  To construct a complete
command line, the arguments must be joined with spaces by converting
the intermediate nul characters to spaces.  Previously only the first
argument was shown in cmdline output.  Now, all arguments are shown.

gdb/ChangeLog:

* fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces.

gdb/ChangeLog
gdb/fbsd-nat.c

index 0ce33f237e84b06c8e8917a752861d4758cd07f4..1ac3b55e4840236756400a78729272f480ddf556 100644 (file)
@@ -1,3 +1,7 @@
+2019-02-06  John Baldwin  <jhb@FreeBSD.org>
+
+       * fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces.
+
 2019-02-05  Tom Tromey  <tom@tromey.com>
 
        * target.c (target_stack::unpush): Move assertion earlier.
index 712f9d3b7b8f3413b7a0d832065b2694f63a5af8..184d63939f475c8bf6c01a90dca225eae3f11e91 100644 (file)
@@ -231,6 +231,13 @@ fbsd_fetch_cmdline (pid_t pid)
   if (sysctl (mib, 4, cmdline.get (), &len, NULL, 0) == -1)
     return nullptr;
 
+  /* Join the arguments with spaces to form a single string.  */
+  char *cp = cmdline.get ();
+  for (size_t i = 0; i < len - 1; i++)
+    if (cp[i] == '\0')
+      cp[i] = ' ';
+  cp[len - 1] = '\0';
+
   return cmdline;
 }