Merge branch 'master' into merge-job
[deliverable/binutils-gdb.git] / gdb / fbsd-tdep.c
index 73d62cffe016c5c4c8bbfc4380134ece517b78bc..ff642d5658699914fea0419fbcb98fbef2d1ebb5 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD, architecture-independent.
 
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-
-/* Standard C includes.  */
-#include <arpa/inet.h>
-#include <sys/socket.h>
-
-/* Local non-gdb includes.  */
 #include "auxv.h"
-#include "elf-bfd.h"
-#include "fbsd-tdep.h"
 #include "gdbcore.h"
-#include "gdbthread.h"
 #include "inferior.h"
-#include "objfiles.h"
 #include "regcache.h"
 #include "regset.h"
+#include "gdbthread.h"
+#include "objfiles.h"
 #include "xml-syscall.h"
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#include "elf-bfd.h"
+#include "fbsd-tdep.h"
 
 /* This enum is derived from FreeBSD's <sys/signal.h>.  */
 
@@ -104,7 +101,7 @@ enum
    all architectures.
 
    Note that FreeBSD 7.0 used an older version of this structure
-   (struct kinfo_ovmentry), but the NT_FREEBSD_PROCSTAT_VMMAP core
+   (struct kinfo_vmentry), but the NT_FREEBSD_PROCSTAT_VMMAP core
    dump note wasn't introduced until FreeBSD 9.2.  As a result, the
    core dump note has always used the 7.1 and later structure
    format.  */
@@ -448,41 +445,30 @@ get_fbsd_gdbarch_data (struct gdbarch *gdbarch)
          gdbarch_data (gdbarch, fbsd_gdbarch_data_handle));
 }
 
-/* Per-program-space data for FreeBSD architectures.  */
-static const struct program_space_data *fbsd_pspace_data_handle;
-
 struct fbsd_pspace_data
 {
   /* Offsets in the runtime linker's 'Obj_Entry' structure.  */
-  LONGEST off_linkmap;
-  LONGEST off_tlsindex;
-  bool rtld_offsets_valid;
+  LONGEST off_linkmap = 0;
+  LONGEST off_tlsindex = 0;
+  bool rtld_offsets_valid = false;
 };
 
+/* Per-program-space data for FreeBSD architectures.  */
+static const struct program_space_key<fbsd_pspace_data>
+  fbsd_pspace_data_handle;
+
 static struct fbsd_pspace_data *
 get_fbsd_pspace_data (struct program_space *pspace)
 {
   struct fbsd_pspace_data *data;
 
-  data = ((struct fbsd_pspace_data *)
-         program_space_data (pspace, fbsd_pspace_data_handle));
+  data = fbsd_pspace_data_handle.get (pspace);
   if (data == NULL)
-    {
-      data = XCNEW (struct fbsd_pspace_data);
-      set_program_space_data (pspace, fbsd_pspace_data_handle, data);
-    }
+    data = fbsd_pspace_data_handle.emplace (pspace);
 
   return data;
 }
 
-/* The cleanup callback for FreeBSD architecture per-program-space data.  */
-
-static void
-fbsd_pspace_data_cleanup (struct program_space *pspace, void *data)
-{
-  xfree (data);
-}
-
 /* This is how we want PTIDs from core files to be printed.  */
 
 static std::string
@@ -516,10 +502,10 @@ fbsd_core_thread_name (struct gdbarch *gdbarch, struct thread_info *thr)
       thread_section_name section_name (".thrmisc", thr->ptid);
 
       section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
-      if (section != NULL && bfd_section_size (core_bfd, section) > 0)
+      if (section != NULL && bfd_section_size (section) > 0)
        {
          /* Truncate the name if it is longer than "buf".  */
-         size = bfd_section_size (core_bfd, section);
+         size = bfd_section_size (section);
          if (size > sizeof buf - 1)
            size = sizeof buf - 1;
          if (bfd_get_section_contents (core_bfd, section, buf, (file_ptr) 0,
@@ -749,15 +735,14 @@ fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
     }
 
   /* Thread register information.  */
-  TRY
+  try
     {
       update_thread_list ();
     }
-  CATCH (e, RETURN_MASK_ERROR)
+  catch (const gdb_exception_error &e)
     {
       exception_print (gdb_stderr, e);
     }
-  END_CATCH
 
   /* Like the kernel, prefer dumping the signalled thread first.
      "First thread" is what tools use to infer the signalled thread.
@@ -1033,12 +1018,12 @@ fbsd_info_proc_files_entry (int kf_type, int kf_fd, int kf_flags,
 
            /* For local sockets, print out the first non-nul path
               rather than both paths.  */
-           const struct fbsd_sockaddr_un *sun
+           const struct fbsd_sockaddr_un *saddr_un
              = reinterpret_cast<const struct fbsd_sockaddr_un *> (kf_sa_local);
-           if (sun->sun_path[0] == 0)
-             sun = reinterpret_cast<const struct fbsd_sockaddr_un *>
+           if (saddr_un->sun_path[0] == 0)
+             saddr_un = reinterpret_cast<const struct fbsd_sockaddr_un *>
                (kf_sa_peer);
-           printf_filtered ("%s", sun->sun_path);
+           printf_filtered ("%s", saddr_un->sun_path);
            break;
          }
        case FBSD_AF_INET:
@@ -1073,7 +1058,7 @@ fbsd_core_info_proc_files (struct gdbarch *gdbarch)
       return;
     }
 
-  size_t note_size = bfd_get_section_size (section);
+  size_t note_size = bfd_section_size (section);
   if (note_size < 4)
     error (_("malformed core note - too short for header"));
 
@@ -1206,7 +1191,7 @@ fbsd_core_info_proc_mappings (struct gdbarch *gdbarch)
       return;
     }
 
-  note_size = bfd_get_section_size (section);
+  note_size = bfd_section_size (section);
   if (note_size < 4)
     error (_("malformed core note - too short for header"));
 
@@ -1254,7 +1239,7 @@ fbsd_core_vnode_path (struct gdbarch *gdbarch, int fd)
   if (section == NULL)
     return nullptr;
 
-  note_size = bfd_get_section_size (section);
+  note_size = bfd_section_size (section);
   if (note_size < 4)
     error (_("malformed core note - too short for header"));
 
@@ -1281,7 +1266,7 @@ fbsd_core_vnode_path (struct gdbarch *gdbarch, int fd)
          && bfd_get_signed_32 (core_bfd, descdata + KF_FD) == fd)
        {
          char *path = (char *) descdata + KF_PATH;
-         return gdb::unique_xmalloc_ptr<char> (xstrdup (path));
+         return make_unique_xstrdup (path);
        }
 
       descdata += structsize;
@@ -1359,7 +1344,7 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch)
    * structure size, then it must be long enough to access the last
    * field used (ki_rusage_ch.ru_majflt) which is the size of a long.
    */
-  note_size = bfd_get_section_size (section);
+  note_size = bfd_section_size (section);
   if (note_size < (4 + kp->ki_rusage_ch + kp->ru_majflt
                   + long_bit / TARGET_CHAR_BIT))
     error (_("malformed core note - too short"));
@@ -1448,7 +1433,7 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch)
                           sec, value);
   printf_filtered ("stime, children: %s.%06d\n", plongest (sec), (int) value);
   printf_filtered ("'nice' value: %d\n",
-                  bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice));
+                  (int) bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice));
   fbsd_core_fetch_timeval (gdbarch, descdata + kp->ki_start, sec, value);
   printf_filtered ("Start time: %s.%06d\n", plongest (sec), (int) value);
   printf_filtered ("Virtual memory size: %s kB\n",
@@ -1988,7 +1973,7 @@ fbsd_read_integer_by_name (struct gdbarch *gdbarch, const char *name)
 static void
 fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data)
 {
-  TRY
+  try
     {
       /* Fetch offsets from debug symbols in rtld.  */
       struct symbol *obj_entry_sym
@@ -2003,13 +1988,12 @@ fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data)
       data->rtld_offsets_valid = true;
       return;
     }
-  CATCH (e, RETURN_MASK_ERROR)
+  catch (const gdb_exception_error &e)
     {
       data->off_linkmap = -1;
     }
-  END_CATCH
 
-  TRY
+  try
     {
       /* Fetch offsets from global variables in libthr.  Note that
         this does not work for single-threaded processes that are not
@@ -2021,11 +2005,10 @@ fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data)
       data->rtld_offsets_valid = true;
       return;
     }
-  CATCH (e, RETURN_MASK_ERROR)
+  catch (const gdb_exception_error &e)
     {
       data->off_linkmap = -1;
     }
-  END_CATCH
 }
 
 /* Helper function to read the TLS index of an object file associated
@@ -2106,6 +2089,4 @@ _initialize_fbsd_tdep (void)
 {
   fbsd_gdbarch_data_handle =
     gdbarch_data_register_post_init (init_fbsd_gdbarch_data);
-  fbsd_pspace_data_handle
-    = register_program_space_data_with_cleanup (NULL, fbsd_pspace_data_cleanup);
 }
This page took 0.028767 seconds and 4 git commands to generate.