[PowerPC] Fix indentation in arch/ppc-linux-common.c
[deliverable/binutils-gdb.git] / gdb / fbsd-nat.c
index f88d6a01333c1d8820d4f6dd2e1a0825c4aa11fc..107a729b3cf50cb7f89147b80fb4c1bec00b6c74 100644 (file)
@@ -261,11 +261,13 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
   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_GETFILE
+  bool do_files = false;
+#endif
 #ifdef HAVE_KINFO_GETVMMAP
   bool do_mappings = false;
 #endif
@@ -296,10 +298,18 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
     case IP_CWD:
       do_cwd = true;
       break;
+#ifdef HAVE_KINFO_GETFILE
+    case IP_FILES:
+      do_files = true;
+      break;
+#endif
     case IP_ALL:
       do_cmdline = true;
       do_cwd = true;
       do_exe = true;
+#ifdef HAVE_KINFO_GETFILE
+      do_files = true;
+#endif
 #ifdef HAVE_KINFO_GETVMMAP
       do_mappings = true;
 #endif
@@ -323,7 +333,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
 
   printf_filtered (_("process %d\n"), pid);
 #ifdef HAVE_KINFO_GETFILE
-  if (do_cwd || do_exe)
+  if (do_cwd || do_exe || do_files)
     fdtbl.reset (kinfo_getfile (pid, &nfd));
 #endif
 
@@ -375,6 +385,25 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
       else
        warning (_("unable to fetch executable path name"));
     }
+#ifdef HAVE_KINFO_GETFILE
+  if (do_files)
+    {
+      struct kinfo_file *kf = fdtbl.get ();
+
+      if (nfd > 0)
+       {
+         fbsd_info_proc_files_header ();
+         for (int i = 0; i < nfd; i++, kf++)
+           fbsd_info_proc_files_entry (kf->kf_type, kf->kf_fd, kf->kf_flags,
+                                       kf->kf_offset, kf->kf_vnode_type,
+                                       kf->kf_sock_domain, kf->kf_sock_type,
+                                       kf->kf_sock_protocol, &kf->kf_sa_local,
+                                       &kf->kf_sa_peer, kf->kf_path);
+       }
+      else
+       warning (_("unable to fetch list of open files"));
+    }
+#endif
 #ifdef HAVE_KINFO_GETVMMAP
   if (do_mappings)
     {
@@ -384,46 +413,15 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
 
       if (vmentl != nullptr)
        {
-         printf_filtered (_("Mapped address spaces:\n\n"));
-#ifdef __LP64__
-         printf_filtered ("  %18s %18s %10s %10s %9s %s\n",
-                          "Start Addr",
-                          "  End Addr",
-                          "      Size", "    Offset", "Flags  ", "File");
-#else
-         printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
-                          "Start Addr",
-                          "  End Addr",
-                          "      Size", "    Offset", "Flags  ", "File");
-#endif
+         int addr_bit = TARGET_CHAR_BIT * sizeof (void *);
+         fbsd_info_proc_mappings_header (addr_bit);
 
          struct kinfo_vmentry *kve = vmentl.get ();
          for (int i = 0; i < nvment; i++, kve++)
-           {
-             ULONGEST start, end;
-
-             start = kve->kve_start;
-             end = kve->kve_end;
-#ifdef __LP64__
-             printf_filtered ("  %18s %18s %10s %10s %9s %s\n",
-                              hex_string (start),
-                              hex_string (end),
-                              hex_string (end - start),
-                              hex_string (kve->kve_offset),
-                              fbsd_vm_map_entry_flags (kve->kve_flags,
-                                                       kve->kve_protection),
-                              kve->kve_path);
-#else
-             printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
-                              hex_string (start),
-                              hex_string (end),
-                              hex_string (end - start),
-                              hex_string (kve->kve_offset),
-                              fbsd_vm_map_entry_flags (kve->kve_flags,
-                                                       kve->kve_protection),
-                              kve->kve_path);
-#endif
-           }
+           fbsd_info_proc_mappings_entry (addr_bit, kve->kve_start,
+                                          kve->kve_end, kve->kve_offset,
+                                          kve->kve_flags, kve->kve_protection,
+                                          kve->kve_path);
        }
       else
        warning (_("unable to fetch virtual memory map"));
@@ -751,6 +749,61 @@ fbsd_nat_target::xfer_partial (enum target_object object,
          }
        return TARGET_XFER_E_IO;
       }
+    case TARGET_OBJECT_FREEBSD_VMMAP:
+    case TARGET_OBJECT_FREEBSD_PS_STRINGS:
+      {
+       gdb::byte_vector buf_storage;
+       gdb_byte *buf;
+       size_t buflen;
+       int mib[4];
+
+       int proc_target;
+       uint32_t struct_size;
+       switch (object)
+         {
+         case TARGET_OBJECT_FREEBSD_VMMAP:
+           proc_target = KERN_PROC_VMMAP;
+           struct_size = sizeof (struct kinfo_vmentry);
+           break;
+         case TARGET_OBJECT_FREEBSD_PS_STRINGS:
+           proc_target = KERN_PROC_PS_STRINGS;
+           struct_size = sizeof (void *);
+           break;
+         }
+
+       if (writebuf != NULL)
+         return TARGET_XFER_E_IO;
+
+       mib[0] = CTL_KERN;
+       mib[1] = KERN_PROC;
+       mib[2] = proc_target;
+       mib[3] = pid;
+
+       if (sysctl (mib, 4, NULL, &buflen, NULL, 0) != 0)
+         return TARGET_XFER_E_IO;
+       buflen += sizeof (struct_size);
+
+       if (offset >= buflen)
+         {
+           *xfered_len = 0;
+           return TARGET_XFER_EOF;
+         }
+
+       buf_storage.resize (buflen);
+       buf = buf_storage.data ();
+
+       memcpy (buf, &struct_size, sizeof (struct_size));
+       buflen -= sizeof (struct_size);
+       if (sysctl (mib, 4, buf + sizeof (struct_size), &buflen, NULL, 0) != 0)
+         return TARGET_XFER_E_IO;
+       buflen += sizeof (struct_size);
+
+       if (buflen - offset < len)
+         len = buflen - offset;
+       memcpy (readbuf, buf + offset, len);
+       *xfered_len = len;
+       return TARGET_XFER_OK;
+      }
     default:
       return inf_ptrace_target::xfer_partial (object, annex,
                                              readbuf, writebuf, offset,
@@ -810,11 +863,11 @@ show_fbsd_nat_debug (struct ui_file *file, int from_tty,
 bool
 fbsd_nat_target::thread_alive (ptid_t ptid)
 {
-  if (ptid_lwp_p (ptid))
+  if (ptid.lwp_p ())
     {
       struct ptrace_lwpinfo pl;
 
-      if (ptrace (PT_LWPINFO, ptid_get_lwp (ptid), (caddr_t) &pl, sizeof pl)
+      if (ptrace (PT_LWPINFO, ptid.lwp (), (caddr_t) &pl, sizeof pl)
          == -1)
        return false;
 #ifdef PL_FLAG_EXITED
@@ -834,7 +887,7 @@ fbsd_nat_target::pid_to_str (ptid_t ptid)
 {
   lwpid_t lwp;
 
-  lwp = ptid_get_lwp (ptid);
+  lwp = ptid.lwp ();
   if (lwp != 0)
     {
       static char buf[64];
@@ -857,7 +910,7 @@ fbsd_nat_target::thread_name (struct thread_info *thr)
   struct ptrace_lwpinfo pl;
   struct kinfo_proc kp;
   int pid = thr->ptid.pid ();
-  long lwp = ptid_get_lwp (thr->ptid);
+  long lwp = thr->ptid.lwp ();
   static char buf[sizeof pl.pl_tdname + 1];
 
   /* Note that ptrace_lwpinfo returns the process command in pl_tdname
@@ -1089,7 +1142,7 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
   pid_t pid;
 
   /* Don't PT_CONTINUE a process which has a pending vfork done event.  */
-  if (ptid_equal (minus_one_ptid, ptid))
+  if (minus_one_ptid == ptid)
     pid = inferior_ptid.pid ();
   else
     pid = ptid.pid ();
@@ -1100,9 +1153,9 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
   if (debug_fbsd_lwp)
     fprintf_unfiltered (gdb_stdlog,
                        "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n",
-                       ptid.pid (), ptid_get_lwp (ptid),
-                       ptid_get_tid (ptid));
-  if (ptid_lwp_p (ptid))
+                       ptid.pid (), ptid.lwp (),
+                       ptid.tid ());
+  if (ptid.lwp_p ())
     {
       /* If ptid is a specific LWP, suspend all other LWPs in the process.  */
       struct thread_info *tp;
@@ -1113,12 +1166,12 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
          if (tp->ptid.pid () != ptid.pid ())
            continue;
 
-         if (ptid_get_lwp (tp->ptid) == ptid_get_lwp (ptid))
+         if (tp->ptid.lwp () == ptid.lwp ())
            request = PT_RESUME;
          else
            request = PT_SUSPEND;
 
-         if (ptrace (request, ptid_get_lwp (tp->ptid), NULL, 0) == -1)
+         if (ptrace (request, tp->ptid.lwp (), NULL, 0) == -1)
            perror_with_name (("ptrace"));
        }
     }
@@ -1130,10 +1183,10 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
 
       ALL_NON_EXITED_THREADS (tp)
         {
-         if (!ptid_match (tp->ptid, ptid))
+         if (!tp->ptid.matches (ptid))
            continue;
 
-         if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1)
+         if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1)
            perror_with_name (("ptrace"));
        }
       ptid = inferior_ptid;
@@ -1236,7 +1289,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
     {
 #ifndef PTRACE_VFORK
       wptid = fbsd_next_vfork_done ();
-      if (!ptid_equal (wptid, null_ptid))
+      if (wptid != null_ptid)
        {
          ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
          return wptid;
@@ -1345,7 +1398,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
 
              /* Make sure the other end of the fork is stopped too.  */
              child_ptid = fbsd_is_child_pending (child);
-             if (ptid_equal (child_ptid, null_ptid))
+             if (child_ptid == null_ptid)
                {
                  pid = waitpid (child, &status, 0);
                  if (pid == -1)
This page took 0.027874 seconds and 4 git commands to generate.