aboutsummaryrefslogtreecommitdiff
path: root/gdb/symfile.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-03-12 21:50:33 -0600
committerTom Tromey <tom@tromey.com>2018-03-16 14:22:13 -0600
commit37e136b1684929df204ddd09c38978c705fa7228 (patch)
tree08037fc61219a9f4006118689c590033bc5cedb7 /gdb/symfile.h
parent8b067d2cf5bf801eb143b4b04da5c22607673471 (diff)
downloadgdb-37e136b1684929df204ddd09c38978c705fa7228.zip
gdb-37e136b1684929df204ddd09c38978c705fa7228.tar.gz
gdb-37e136b1684929df204ddd09c38978c705fa7228.tar.bz2
Remove make_cleanup_free_section_addr_info
This removes make_cleanup_free_section_addr_info. Instead -- per Simon's suggestion -- this changes section_addr_info to be a std::vector. Regression tested by the buildbot. gdb/ChangeLog 2018-03-16 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_symfile_offsets): Change type of "addrs". * utils.h (make_cleanup_free_section_addr_info): Don't declare. * utils.c (do_free_section_addr_info) (make_cleanup_free_section_addr_info): Remove. * symfile.h (struct other_sections): Add constructor. (struct section_addr_info): Remove. (section_addr_info): New typedef. (struct sym_fns) <sym_offsets>: Change type of parameter. (build_section_addr_info_from_objfile) (relative_addr_info_to_section_offsets, addr_info_make_relative) (default_symfile_offsets, symbol_file_add) (symbol_file_add_from_bfd) (build_section_addr_info_from_section_table): Update. (alloc_section_addr_info, free_section_addr_info): Don't declare. * symfile.c (alloc_section_addr_info): Remove. (build_section_addr_info_from_section_table): Change return type. Update. (build_section_addr_info_from_bfd) (build_section_addr_info_from_objfile): Likewise. (free_section_addr_info): Remove. (relative_addr_info_to_section_offsets): Change type of "addrs". (addrs_section_compar): Now a std::sort comparator. (addrs_section_sort): Change return type. (addr_info_make_relative): Change type of "addrs". Update. (default_symfile_offsets, syms_from_objfile_1) (syms_from_objfile, symbol_file_add_with_addrs): Likewise. (symbol_file_add_separate): Update. (symbol_file_add): Change type of "addrs". Update. (add_symbol_file_command): Update. Remove cleanups. * symfile-mem.c (symbol_file_add_from_memory): Update. Remove cleanups. * symfile-debug.c (debug_sym_offsets): Change type of "info". * solib.c (solib_read_symbols): Update. * objfiles.c (objfile_relocate): Update. Remove cleanups. * machoread.c (macho_symfile_offsets): Update. * jit.c (jit_bfd_try_read_symtab): Update.
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r--gdb/symfile.h52
1 files changed, 22 insertions, 30 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h
index 8cd47d8..d918509 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -47,8 +47,19 @@ typedef int (symbol_compare_ftype) (const char *string1,
struct other_sections
{
+ other_sections (CORE_ADDR addr_, std::string &&name_, int sectindex_)
+ : addr (addr_),
+ name (std::move (name_)),
+ sectindex (sectindex_)
+ {
+ }
+
+ other_sections (other_sections &&other) = default;
+
+ DISABLE_COPY_AND_ASSIGN (other_sections);
+
CORE_ADDR addr;
- char *name;
+ std::string name;
/* SECTINDEX must be valid for associated BFD or set to -1. */
int sectindex;
@@ -61,15 +72,7 @@ struct other_sections
to communicate the section addresses in shared objects to
symbol_file_add (). */
-struct section_addr_info
-{
- /* The number of sections for which address information is
- available. */
- size_t num_sections;
- /* Sections whose names are file format dependent. */
- struct other_sections other[1];
-};
-
+typedef std::vector<other_sections> section_addr_info;
/* A table listing the load segments in a symfile, and which segment
each BFD section belongs to. */
@@ -340,7 +343,7 @@ struct sym_fns
The section_addr_info structure contains the offset of loadable and
allocated sections, relative to the absolute offsets found in the BFD. */
- void (*sym_offsets) (struct objfile *, const struct section_addr_info *);
+ void (*sym_offsets) (struct objfile *, const section_addr_info &);
/* This function produces a format-independent description of
the segments of ABFD. Each segment is a unit of the file
@@ -369,21 +372,21 @@ struct sym_fns
const struct quick_symbol_functions *qf;
};
-extern struct section_addr_info *
+extern section_addr_info
build_section_addr_info_from_objfile (const struct objfile *objfile);
extern void relative_addr_info_to_section_offsets
(struct section_offsets *section_offsets, int num_sections,
- const struct section_addr_info *addrs);
+ const section_addr_info &addrs);
-extern void addr_info_make_relative (struct section_addr_info *addrs,
+extern void addr_info_make_relative (section_addr_info *addrs,
bfd *abfd);
/* The default version of sym_fns.sym_offsets for readers that don't
do anything special. */
extern void default_symfile_offsets (struct objfile *objfile,
- const struct section_addr_info *);
+ const section_addr_info &);
/* The default version of sym_fns.sym_segments for readers that don't
do anything special. */
@@ -417,10 +420,10 @@ extern enum language deduce_language_from_filename (const char *);
extern void add_filename_language (const char *ext, enum language lang);
extern struct objfile *symbol_file_add (const char *, symfile_add_flags,
- struct section_addr_info *, objfile_flags);
+ section_addr_info *, objfile_flags);
extern struct objfile *symbol_file_add_from_bfd (bfd *, const char *, symfile_add_flags,
- struct section_addr_info *,
+ section_addr_info *,
objfile_flags, struct objfile *parent);
extern void symbol_file_add_separate (bfd *, const char *, symfile_add_flags,
@@ -428,26 +431,15 @@ extern void symbol_file_add_separate (bfd *, const char *, symfile_add_flags,
extern std::string find_separate_debug_file_by_debuglink (struct objfile *);
-/* Create a new section_addr_info, with room for NUM_SECTIONS. */
-
-extern struct section_addr_info *alloc_section_addr_info (size_t
- num_sections);
-
/* Build (allocate and populate) a section_addr_info struct from an
existing section table. */
-extern struct section_addr_info
- *build_section_addr_info_from_section_table (const struct target_section
+extern section_addr_info
+ build_section_addr_info_from_section_table (const struct target_section
*start,
const struct target_section
*end);
-/* Free all memory allocated by
- build_section_addr_info_from_section_table. */
-
-extern void free_section_addr_info (struct section_addr_info *);
-
-
/* Variables */
/* If non-zero, shared library symbols will be added automatically