aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2020-12-03 15:47:56 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2020-12-03 15:47:56 -0500
commit0bc2e38dd71e24676e180b6b37e0a2cd1186994d (patch)
tree0ac8a90a0b8dce04798ab3af48fef2bd910520fd /gdb/dwarf2
parentb10b530a4566888492ac693773e1e35f66c4b7c4 (diff)
downloadgdb-0bc2e38dd71e24676e180b6b37e0a2cd1186994d.zip
gdb-0bc2e38dd71e24676e180b6b37e0a2cd1186994d.tar.gz
gdb-0bc2e38dd71e24676e180b6b37e0a2cd1186994d.tar.bz2
gdb: fix logic of find_comp_unit and set_comp_unit
The logic in find_comp_unit and set_comp_unit is reversed. When the BFD requires relocation, we want to put the comp_unit structure in the map where the comp_unit objects are not shared, that is the one indexed by objfile. If the BFD does not require relocation, then, we can share a single comp_unit structure for all users of that BFD, so we want to put it in the BFD-indexed map. The comments on top of dwarf2_frame_bfd_data and dwarf2_frame_objfile_data make that clear. Fix it by swapping the two in find_comp_unit and set_comp_unit. I don't have a test for this, because I don't see how to write one in a reasonable amount of time. gdb/ChangeLog: PR gdb/26876 * dwarf2/frame.c (find_comp_unit, set_comp_unit): Reverse use of dwarf2_frame_bfd_data and dwarf2_frame_objfile_data. Change-Id: I80c1ee7ad8425fa4947de65b170973d05f5a52ec
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r--gdb/dwarf2/frame.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index a577a67..7df3ccf 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -1640,8 +1640,9 @@ find_comp_unit (struct objfile *objfile)
{
bfd *abfd = objfile->obfd;
if (gdb_bfd_requires_relocations (abfd))
- return dwarf2_frame_bfd_data.get (abfd);
- return dwarf2_frame_objfile_data.get (objfile);
+ return dwarf2_frame_objfile_data.get (objfile);
+
+ return dwarf2_frame_bfd_data.get (abfd);
}
/* Store the comp_unit on OBJFILE, or the corresponding BFD, as
@@ -1652,8 +1653,9 @@ set_comp_unit (struct objfile *objfile, struct comp_unit *unit)
{
bfd *abfd = objfile->obfd;
if (gdb_bfd_requires_relocations (abfd))
- return dwarf2_frame_bfd_data.set (abfd, unit);
- return dwarf2_frame_objfile_data.set (objfile, unit);
+ return dwarf2_frame_objfile_data.set (objfile, unit);
+
+ return dwarf2_frame_bfd_data.set (abfd, unit);
}
/* Find the FDE for *PC. Return a pointer to the FDE, and store the