From 134df964367c19afa2eef81a0841fe1c181a9edc Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Mon, 17 May 2021 11:41:09 -0300 Subject: 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 * corelow.c (core_target::core_target) Update to read target description. --- gdb/corelow.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gdb/corelow.c') diff --git a/gdb/corelow.c b/gdb/corelow.c index a1943ab..b762eaa 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"), -- cgit v1.1