aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-05-16 14:33:15 -0600
committerTom Tromey <tom@tromey.com>2018-05-18 15:12:14 -0600
commit7ff8cb8c51adec9cd1b461f9b670223d01223fef (patch)
treeb0e24ec7be79f9a49da4b24070eeb219666599c9 /gdb
parent7f99954970001cfc1b155d877ac2966d77e2c647 (diff)
downloadgdb-7ff8cb8c51adec9cd1b461f9b670223d01223fef.zip
gdb-7ff8cb8c51adec9cd1b461f9b670223d01223fef.tar.gz
gdb-7ff8cb8c51adec9cd1b461f9b670223d01223fef.tar.bz2
Allocate dwz_file with new
This adds a constructor to struct dwz_file and arranges for it to be allocated with "new" and wrapped in a unique_ptr. This cuts down on the amount of manual memory management that must be done. Regression tested by the buildbot. gdb/ChangeLog 2018-05-18 Tom Tromey <tom@tromey.com> * dwarf2read.c (struct dwz_file): Add constructor, initializers. <dwz_bfd>: Now a gdb_bfd_ref_ptr. (~dwarf2_per_objfile): Update (dwarf2_get_dwz_file): Use new. * dwarf2read.h (struct dwarf2_per_objfile) <dwz_file>: Now a unique_ptr.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/dwarf2read.c42
-rw-r--r--gdb/dwarf2read.h2
3 files changed, 32 insertions, 21 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5401089..3c829df 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2018-05-18 Tom Tromey <tom@tromey.com>
+ * dwarf2read.c (struct dwz_file): Add constructor, initializers.
+ <dwz_bfd>: Now a gdb_bfd_ref_ptr.
+ (~dwarf2_per_objfile): Update
+ (dwarf2_get_dwz_file): Use new.
+ * dwarf2read.h (struct dwarf2_per_objfile) <dwz_file>: Now a
+ unique_ptr.
+
+2018-05-18 Tom Tromey <tom@tromey.com>
+
* dwarf2read.h (struct dwarf2_per_objfile) <dwp_file>: Now a
unique_ptr.
* dwarf2read.c (struct dwp_file): Add constructor and
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index dc14901..0690785 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -845,17 +845,22 @@ struct dwp_file
struct dwz_file
{
+ dwz_file (gdb_bfd_ref_ptr &&bfd)
+ : dwz_bfd (std::move (bfd))
+ {
+ }
+
/* A dwz file can only contain a few sections. */
- struct dwarf2_section_info abbrev;
- struct dwarf2_section_info info;
- struct dwarf2_section_info str;
- struct dwarf2_section_info line;
- struct dwarf2_section_info macro;
- struct dwarf2_section_info gdb_index;
- struct dwarf2_section_info debug_names;
+ struct dwarf2_section_info abbrev {};
+ struct dwarf2_section_info info {};
+ struct dwarf2_section_info str {};
+ struct dwarf2_section_info line {};
+ struct dwarf2_section_info macro {};
+ struct dwarf2_section_info gdb_index {};
+ struct dwarf2_section_info debug_names {};
/* The dwz's BFD. */
- bfd *dwz_bfd;
+ gdb_bfd_ref_ptr dwz_bfd;
};
/* Struct used to pass misc. parameters to read_die_and_children, et
@@ -2151,9 +2156,6 @@ dwarf2_per_objfile::~dwarf2_per_objfile ()
if (dwo_files != NULL)
free_dwo_files (dwo_files, objfile);
- if (dwz_file != NULL && dwz_file->dwz_bfd)
- gdb_bfd_unref (dwz_file->dwz_bfd);
-
/* Everything else should be on the objfile obstack. */
}
@@ -2639,13 +2641,12 @@ static struct dwz_file *
dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
{
const char *filename;
- struct dwz_file *result;
bfd_size_type buildid_len_arg;
size_t buildid_len;
bfd_byte *buildid;
if (dwarf2_per_objfile->dwz_file != NULL)
- return dwarf2_per_objfile->dwz_file;
+ return dwarf2_per_objfile->dwz_file.get ();
bfd_set_error (bfd_error_no_error);
gdb::unique_xmalloc_ptr<char> data
@@ -2691,15 +2692,16 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
error (_("could not find '.gnu_debugaltlink' file for %s"),
objfile_name (dwarf2_per_objfile->objfile));
- result = OBSTACK_ZALLOC (&dwarf2_per_objfile->objfile->objfile_obstack,
- struct dwz_file);
- result->dwz_bfd = dwz_bfd.release ();
+ std::unique_ptr<struct dwz_file> result
+ (new struct dwz_file (std::move (dwz_bfd)));
- bfd_map_over_sections (result->dwz_bfd, locate_dwz_sections, result);
+ bfd_map_over_sections (result->dwz_bfd.get (), locate_dwz_sections,
+ result.get ());
- gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd, result->dwz_bfd);
- dwarf2_per_objfile->dwz_file = result;
- return result;
+ gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd,
+ result->dwz_bfd.get ());
+ dwarf2_per_objfile->dwz_file = std::move (result);
+ return dwarf2_per_objfile->dwz_file.get ();
}
/* DWARF quick_symbols_functions support. */
diff --git a/gdb/dwarf2read.h b/gdb/dwarf2read.h
index 1e0663b..fbac717 100644
--- a/gdb/dwarf2read.h
+++ b/gdb/dwarf2read.h
@@ -198,7 +198,7 @@ public:
/* The shared '.dwz' file, if one exists. This is used when the
original data was compressed using 'dwz -m'. */
- struct dwz_file *dwz_file = NULL;
+ std::unique_ptr<struct dwz_file> dwz_file;
/* A flag indicating whether this objfile has a section loaded at a
VMA of 0. */