[PATCH 6/8] Remove a use of the comp_unit backlink
Tom Tromey
tom@tromey.com
Sat Feb 8 15:28:00 GMT 2020
The DWARF frame comp_unit object still has a backlink to the objfile.
In order to be truly objfile-independent, this must be removed.
This patch removes one such use, by passing the gdbarch to
decode_frame_entry directly.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (decode_frame_entry_1): Add gdbarch parameter.
(decode_frame_entry): Likewise.
(dwarf2_build_frame_info): Update.
Change-Id: I51126a468a012540eaf002be64dba7cbcb111b4d
---
gdb/ChangeLog | 6 ++++++
gdb/dwarf2/frame.c | 21 +++++++++++++--------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index 7e1a744513b..d4f6165b75c 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -1695,7 +1695,8 @@ enum eh_frame_type
EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID
};
-static const gdb_byte *decode_frame_entry (struct comp_unit *unit,
+static const gdb_byte *decode_frame_entry (struct gdbarch *gdbarch,
+ struct comp_unit *unit,
const gdb_byte *start,
int eh_frame_p,
dwarf2_cie_table &cie_table,
@@ -1706,13 +1707,13 @@ static const gdb_byte *decode_frame_entry (struct comp_unit *unit,
Return NULL if invalid input, otherwise the next byte to be processed. */
static const gdb_byte *
-decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
+decode_frame_entry_1 (struct gdbarch *gdbarch,
+ struct comp_unit *unit, const gdb_byte *start,
int eh_frame_p,
dwarf2_cie_table &cie_table,
dwarf2_fde_table *fde_table,
enum eh_frame_type entry_type)
{
- struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
const gdb_byte *buf, *end;
ULONGEST length;
unsigned int bytes_read;
@@ -1957,7 +1958,8 @@ decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
fde->cie = find_cie (cie_table, cie_pointer);
if (fde->cie == NULL)
{
- decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
+ decode_frame_entry (gdbarch, unit,
+ unit->dwarf_frame_buffer + cie_pointer,
eh_frame_p, cie_table, fde_table,
EH_CIE_TYPE_ID);
fde->cie = find_cie (cie_table, cie_pointer);
@@ -2008,7 +2010,8 @@ decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
expect an FDE or a CIE. */
static const gdb_byte *
-decode_frame_entry (struct comp_unit *unit, const gdb_byte *start,
+decode_frame_entry (struct gdbarch *gdbarch,
+ struct comp_unit *unit, const gdb_byte *start,
int eh_frame_p,
dwarf2_cie_table &cie_table,
dwarf2_fde_table *fde_table,
@@ -2020,7 +2023,7 @@ decode_frame_entry (struct comp_unit *unit, const gdb_byte *start,
while (1)
{
- ret = decode_frame_entry_1 (unit, start, eh_frame_p,
+ ret = decode_frame_entry_1 (gdbarch, unit, start, eh_frame_p,
cie_table, fde_table, entry_type);
if (ret != NULL)
break;
@@ -2127,6 +2130,8 @@ dwarf2_build_frame_info (struct objfile *objfile)
dwarf2_cie_table cie_table;
dwarf2_fde_table fde_table;
+ struct gdbarch *gdbarch = get_objfile_arch (objfile);
+
/* Build a minimal decoding of the DWARF2 compilation unit. */
unit = new comp_unit;
unit->abfd = objfile->obfd;
@@ -2162,7 +2167,7 @@ dwarf2_build_frame_info (struct objfile *objfile)
{
frame_ptr = unit->dwarf_frame_buffer;
while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
- frame_ptr = decode_frame_entry (unit, frame_ptr, 1,
+ frame_ptr = decode_frame_entry (gdbarch, unit, frame_ptr, 1,
cie_table, &fde_table,
EH_CIE_OR_FDE_TYPE_ID);
}
@@ -2192,7 +2197,7 @@ dwarf2_build_frame_info (struct objfile *objfile)
{
frame_ptr = unit->dwarf_frame_buffer;
while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
- frame_ptr = decode_frame_entry (unit, frame_ptr, 0,
+ frame_ptr = decode_frame_entry (gdbarch, unit, frame_ptr, 0,
cie_table, &fde_table,
EH_CIE_OR_FDE_TYPE_ID);
}
--
2.17.2
More information about the Gdb-patches
mailing list