gdb: allocate symfile_segment_data with new

- Allocate this structure with new instead of XNEW, use a unique pointer
  to manage its lifetime.
- Change a few functions to return a unique   pointer instead of a
  plain pointer.
- Change free_symfile_segment_data to be symfile_segment_data's
  destructor.

gdb/ChangeLog:

	* symfile.h (struct symfile_segment_data): Initialize fields.
	<~symfile_segment_data>: Add.
	(symfile_segment_data_up): New.
	(struct sym_fns) <sym_segments>: Return a
	symfile_segment_data_up.
	(default_symfile_segments): Return a symfile_segment_data_up.
	(free_symfile_segment_data): Remove.
	(get_symfile_segment_data): Return a symfile_segment_data_up.
	* symfile.c (default_symfile_segments): Likewise.
	(get_symfile_segment_data): Likewise.
	(free_symfile_segment_data): Remove.
	(symfile_find_segment_sections): Update.
	* elfread.c (elf_symfile_segments): Return a
	symfile_segment_data_up.
	* remote.c (remote_target::get_offsets): Update.
	* solib-target.c (solib_target_relocate_section_addresses):
	Update.
	* symfile-debug.c (debug_sym_segments): Return a
	symfile_segment_data_up.
This commit is contained in:
Simon Marchi
2020-05-19 12:18:04 -04:00
parent 8ac10c5bfc
commit 62982abdee
7 changed files with 55 additions and 45 deletions

View File

@ -4105,7 +4105,6 @@ remote_target::get_offsets ()
char *ptr;
int lose, num_segments = 0, do_sections, do_segments;
CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
struct symfile_segment_data *data;
if (symfile_objfile == NULL)
return;
@ -4185,7 +4184,8 @@ remote_target::get_offsets ()
section_offsets offs = symfile_objfile->section_offsets;
data = get_symfile_segment_data (symfile_objfile->obfd);
symfile_segment_data_up data
= get_symfile_segment_data (symfile_objfile->obfd);
do_segments = (data != NULL);
do_sections = num_segments == 0;
@ -4220,8 +4220,9 @@ remote_target::get_offsets ()
if (do_segments)
{
int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
offs, num_segments, segments);
int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd,
data.get (), offs,
num_segments, segments);
if (ret == 0 && !do_sections)
error (_("Can not handle qOffsets TextSeg "
@ -4231,9 +4232,6 @@ remote_target::get_offsets ()
do_sections = 0;
}
if (data)
free_symfile_segment_data (data);
if (do_sections)
{
offs[SECT_OFF_TEXT (symfile_objfile)] = text_addr;