gdb/riscv: add ability to decode dwarf CSR numbers
[binutils-gdb.git] / gdb / corelow.c
index 193dccbeeb51760a3db8578ccdd4d4d5be3723d3..aef1a02e5d87b332ab23802c0881affce43a51bf 100644 (file)
@@ -199,7 +199,7 @@ core_target::build_file_mappings ()
     /* read_core_file_mappings will invoke this lambda for each mapping
        that it finds.  */
     [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs,
-         const char *filename, const void *other)
+        const char *filename, const void *other)
       {
        /* Architecture-specific read_core_mapping methods are expected to
           weed out non-file-backed mappings.  */
@@ -226,7 +226,7 @@ core_target::build_file_mappings ()
              }
 
            bfd = bfd_map[filename] = bfd_openr (expanded_fname.get (),
-                                                "binary");
+                                                "binary");
 
            if (bfd == nullptr || !bfd_check_format (bfd, bfd_object))
              {
@@ -266,12 +266,7 @@ core_target::build_file_mappings ()
        bfd_set_section_alignment (sec, 2);
 
        /* Set target_section fields.  */
-       m_core_file_mappings.sections.emplace_back ();
-       target_section &ts = m_core_file_mappings.sections.back ();
-       ts.addr = start;
-       ts.endaddr = end;
-       ts.owner = nullptr;
-       ts.the_bfd_section = sec;
+       m_core_file_mappings.emplace_back (start, end, sec);
       });
 
   normalize_mem_ranges (&m_core_unavailable_mappings);
@@ -292,7 +287,7 @@ core_target::close ()
       exit_inferior_silent (current_inferior ());
 
       /* Clear out solib state while the bfd is still open.  See
-         comments in clear_solib in solib.c.  */
+        comments in clear_solib in solib.c.  */
       clear_solib ();
 
       current_program_space->cbfd.reset (nullptr);
@@ -440,8 +435,8 @@ core_target_open (const char *arg, int from_tty)
     {
       /* Do it after the err msg */
       /* FIXME: should be checking for errors from bfd_close (for one
-         thing, on error it does not free all the storage associated
-         with the bfd).  */
+        thing, on error it does not free all the storage associated
+        with the bfd).  */
       error (_("\"%s\" is not a core dump: %s"),
             filename.get (), bfd_errmsg (bfd_get_error ()));
     }
@@ -459,7 +454,7 @@ core_target_open (const char *arg, int from_tty)
      core file.  We don't do this unconditionally since an exec file
      typically contains more information that helps us determine the
      architecture than a core file.  */
-  if (!exec_bfd)
+  if (!current_program_space->exec_bfd ())
     set_gdbarch_from_file (core_bfd);
 
   push_target (std::move (target_holder));
@@ -500,7 +495,7 @@ core_target_open (const char *arg, int from_tty)
       switch_to_thread (thread);
     }
 
-  if (exec_bfd == nullptr)
+  if (current_program_space->exec_bfd () == nullptr)
     locate_exec_from_corefile_build_id (core_bfd, from_tty);
 
   post_create_inferior (from_tty);
@@ -765,7 +760,7 @@ core_target::xfer_memory_via_mappings (gdb_byte *readbuf,
   for (const auto &mr : m_core_unavailable_mappings)
     {
       if (address_in_mem_range (memaddr, &mr))
-        {
+       {
          if (!address_in_mem_range (memend, &mr))
            len = mr.start + mr.length - memaddr;
 
@@ -813,10 +808,16 @@ core_target::xfer_partial (enum target_object object, const char *annex,
           core file provided mappings (e.g. from .note.linuxcore.file
           or the like) as this should provide a more accurate
           result.  If not, check the stratum beneath us, which should
-          be the file stratum.  */
-       if (!m_core_file_mappings.sections.empty ())
-         xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
-                                                 len, xfered_len);
+          be the file stratum.
+
+          We also check unavailable mappings due to Docker/AUFS driver
+          issues.  */
+       if (!m_core_file_mappings.empty ()
+           || !m_core_unavailable_mappings.empty ())
+         {
+           xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
+                                                   len, xfered_len);
+         }
        else
          xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf,
                                                        writebuf, offset, len,
@@ -1098,7 +1099,7 @@ get_current_core_target ()
 void
 core_target::info_proc_mappings (struct gdbarch *gdbarch)
 {
-  if (!m_core_file_mappings.sections.empty ())
+  if (!m_core_file_mappings.empty ())
     {
       printf_filtered (_("Mapped address spaces:\n\n"));
       if (gdbarch_addr_bit (gdbarch) == 32)
@@ -1117,7 +1118,7 @@ core_target::info_proc_mappings (struct gdbarch *gdbarch)
        }
     }
 
-  for (const target_section &tsp : m_core_file_mappings.sections)
+  for (const target_section &tsp : m_core_file_mappings)
     {
       ULONGEST start = tsp.addr;
       ULONGEST end = tsp.endaddr;
@@ -1166,7 +1167,7 @@ _initialize_corelow ()
 {
   add_target (core_target_info, core_target_open, filename_completer);
   add_cmd ("core-file-backed-mappings", class_maintenance,
-           maintenance_print_core_file_backed_mappings,
+          maintenance_print_core_file_backed_mappings,
           _("Print core file's file-backed mappings."),
           &maintenanceprintlist);
 }