[binutils-gdb] Update the core file architecture if a target description is present

Luis Machado luisgpm@sourceware.org
Fri Jun 25 13:09:23 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=134df964367c19afa2eef81a0841fe1c181a9edc

commit 134df964367c19afa2eef81a0841fe1c181a9edc
Author: Luis Machado <luis.machado@linaro.org>
Date:   Mon May 17 11:41:09 2021 -0300

    Update the core file architecture if a target description is present
    
    At the moment, the core target has its own gdbarch (m_core_gdbarch), and that
    gets set from the core_bfd on the core target's constructor.
    
    That gdbarch doesn't contain a target description because it is constructed
    before we get a chance to fetch the target description.
    
    As a result, some hooks that depend on the target description being set are
    not set, and that leads to problems. One of the examples is
    gdbarch_report_signal_info, which is used to show AArch64 tag violation
    information.
    
    Fix this by reading the target description before fetching the core file's
    gdbarch.
    
    gdb/ChangeLog:
    
    2021-06-25  Luis Machado  <luis.machado@linaro.org>
    
            * corelow.c (core_target::core_target) Update to read target
            description.

Diff:
---
 gdb/ChangeLog |  5 +++++
 gdb/corelow.c | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5fb76d03f85..820a9d36b45 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2021-06-25  Luis Machado  <luis.machado@linaro.org>
+
+	* corelow.c (core_target::core_target) Update to read target
+	description.
+
 2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
 	* python/lib/gdb/__init__.py: Format.
diff --git a/gdb/corelow.c b/gdb/corelow.c
index a1943ab2ea6..b762eaa0f2f 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -154,8 +154,23 @@ private: /* per-core data */
 
 core_target::core_target ()
 {
+  /* Find a first arch based on the BFD.  We need the initial gdbarch so
+     we can setup the hooks to find a target description.  */
   m_core_gdbarch = gdbarch_from_bfd (core_bfd);
 
+  /* If the arch is able to read a target description from the core, it
+     could yield a more specific gdbarch.  */
+  const struct target_desc *tdesc = read_description ();
+
+  if (tdesc != nullptr)
+    {
+      struct gdbarch_info info;
+      gdbarch_info_init (&info);
+      info.abfd = core_bfd;
+      info.target_desc = tdesc;
+      m_core_gdbarch = gdbarch_find_by_info (info);
+    }
+
   if (!m_core_gdbarch
       || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
     error (_("\"%s\": Core file format not supported"),


More information about the Gdb-cvs mailing list