From 122cf0f2d93ae6f7a53e8dd643ebb068b79df9cf Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Fri, 17 May 2019 22:30:34 +0100 Subject: [PATCH] gdb: Add constructor to struct cu_partial_die_info Adds a constructor to 'struct cu_partial_die_info' and disables the default constructor, preventing partially initialised instances from being created. Update 'find_partial_die' to return a const struct. Users of 'find_partial_die' are updated to take account of the above two changes. There should be no user visible changes after this commit. gdb/ChangeLog: * dwarf2read.c (struct cu_partial_die_info): Add constructor, delete default constructor. (find_partial_die): Update to return const struct. (partial_die_parent_scope): Move variable declaration into scope of its use and change its type to auto. (guess_partial_die_structure_name): Likewise. (partial_die_info::fixup): Likewise. --- gdb/ChangeLog | 10 ++++++++++ gdb/dwarf2read.c | 27 ++++++++++++++++----------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 713b1ca..871e3dc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2019-05-18 Andrew Burgess + + * dwarf2read.c (struct cu_partial_die_info): Add constructor, + delete default constructor. + (find_partial_die): Update to return const struct. + (partial_die_parent_scope): Move variable declaration into scope + of its use and change its type to auto. + (guess_partial_die_structure_name): Likewise. + (partial_die_info::fixup): Likewise. + 2019-05-17 Tom Tromey * source.c (find_and_open_source): Remove cast. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 004238a..f48b931 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1514,10 +1514,18 @@ struct cu_partial_die_info struct dwarf2_cu *cu; /* A partial_die_info. */ struct partial_die_info *pdi; + + cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi) + : cu (cu), + pdi (pdi) + { /* Nothhing. */ } + +private: + cu_partial_die_info () = delete; }; -static struct cu_partial_die_info find_partial_die (sect_offset, int, - struct dwarf2_cu *); +static const struct cu_partial_die_info find_partial_die (sect_offset, int, + struct dwarf2_cu *); static const gdb_byte *read_attribute (const struct die_reader_specs *, struct attribute *, struct attr_abbrev *, @@ -8763,7 +8771,6 @@ partial_die_parent_scope (struct partial_die_info *pdi, { const char *grandparent_scope; struct partial_die_info *parent, *real_pdi; - struct cu_partial_die_info res; /* We need to look at our parent DIE; if we have a DW_AT_specification, then this means the parent of the specification DIE. */ @@ -8771,8 +8778,8 @@ partial_die_parent_scope (struct partial_die_info *pdi, real_pdi = pdi; while (real_pdi->has_specification) { - res = find_partial_die (real_pdi->spec_offset, - real_pdi->spec_is_dwz, cu); + auto res = find_partial_die (real_pdi->spec_offset, + real_pdi->spec_is_dwz, cu); real_pdi = res.pdi; cu = res.cu; } @@ -18919,7 +18926,7 @@ dwarf2_cu::find_partial_die (sect_offset sect_off) outside their CU (they do however referencing other types via DW_FORM_ref_sig8). */ -static struct cu_partial_die_info +static const struct cu_partial_die_info find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu) { struct dwarf2_per_objfile *dwarf2_per_objfile @@ -19000,7 +19007,6 @@ guess_partial_die_structure_name (struct partial_die_info *struct_pdi, struct partial_die_info *real_pdi; struct partial_die_info *child_pdi; - struct cu_partial_die_info res; /* If this DIE (this DIE's specification, if any) has a parent, then we should not do this. We'll prepend the parent's fully qualified @@ -19009,8 +19015,8 @@ guess_partial_die_structure_name (struct partial_die_info *struct_pdi, real_pdi = struct_pdi; while (real_pdi->has_specification) { - res = find_partial_die (real_pdi->spec_offset, - real_pdi->spec_is_dwz, cu); + auto res = find_partial_die (real_pdi->spec_offset, + real_pdi->spec_is_dwz, cu); real_pdi = res.pdi; cu = res.cu; } @@ -19058,9 +19064,8 @@ partial_die_info::fixup (struct dwarf2_cu *cu) if (name == NULL && has_specification) { struct partial_die_info *spec_die; - struct cu_partial_die_info res; - res = find_partial_die (spec_offset, spec_is_dwz, cu); + auto res = find_partial_die (spec_offset, spec_is_dwz, cu); spec_die = res.pdi; cu = res.cu; -- 2.7.4