From a2726d4ff80168a8134c68cb798e3f5f537b0eba Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Thu, 31 Oct 2019 16:30:44 -0300 Subject: [PATCH] [ARM] Store exception handling information per-bfd instead of per-objfile Based on feedback from Tromey, update the use of objfile_key in gdb/arm-tdep.c to use bfd_key instead. That way we don't have to re-create the exception handling data all over again if it was done before for the same BFD. gdb/ChangeLog: 2019-10-31 Luis Machado * arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of objfile_key. (arm_exidx_new_objfile): Adjust to use objfile->obfd instead of objfile to fetch per-bfd data. (arm_find_exidx_entry): Likewise. Change-Id: Ia7b3208ea8d788414600fa6d770ac76db0562859 --- gdb/ChangeLog | 8 ++++++++ gdb/arm-tdep.c | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ee48133aa7a..7abe20ee59c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2019-10-31 Luis Machado + + * arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of + objfile_key. + (arm_exidx_new_objfile): Adjust to use objfile->obfd instead of + objfile to fetch per-bfd data. + (arm_find_exidx_entry): Likewise. + 2019-10-31 Christian Biesinger * gdbsupport/agent.c (debug_agent): Change type to bool. diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 86946189fb1..48772d7b380 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1999,7 +1999,8 @@ struct arm_exidx_data std::vector> section_maps; }; -static const struct objfile_key arm_exidx_data_key; +/* Per-BFD key to store exception handling information. */ +static const struct bfd_key arm_exidx_data_key; static struct obj_section * arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma) @@ -2043,7 +2044,7 @@ arm_exidx_new_objfile (struct objfile *objfile) LONGEST i; /* If we've already touched this file, do nothing. */ - if (!objfile || arm_exidx_data_key.get (objfile) != NULL) + if (!objfile || arm_exidx_data_key.get (objfile->obfd) != NULL) return; /* Read contents of exception table and index. */ @@ -2074,7 +2075,7 @@ arm_exidx_new_objfile (struct objfile *objfile) } /* Allocate exception table data structure. */ - data = arm_exidx_data_key.emplace (objfile); + data = arm_exidx_data_key.emplace (objfile->obfd); data->section_maps.resize (objfile->obfd->section_count); /* Fill in exception table. */ @@ -2246,7 +2247,7 @@ arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start) struct arm_exidx_data *data; struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 }; - data = arm_exidx_data_key.get (sec->objfile); + data = arm_exidx_data_key.get (sec->objfile->obfd); if (data != NULL) { std::vector &map -- 2.30.2