diff options
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r-- | gdb/symfile.c | 79 |
1 files changed, 39 insertions, 40 deletions
diff --git a/gdb/symfile.c b/gdb/symfile.c index aea8c76..361274e 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -263,7 +263,8 @@ build_section_addr_info_from_objfile (const struct objfile *objfile) /* Before reread_symbols gets rewritten it is not safe to call: gdb_assert (objfile->num_sections == bfd_count_sections (objfile->obfd)); */ - section_addr_info sap = build_section_addr_info_from_bfd (objfile->obfd); + section_addr_info sap + = build_section_addr_info_from_bfd (objfile->obfd.get ()); for (i = 0; i < sap.size (); i++) { int sectindex = sap[i].sectindex; @@ -281,19 +282,19 @@ init_objfile_sect_indices (struct objfile *objfile) asection *sect; int i; - sect = bfd_get_section_by_name (objfile->obfd, ".text"); + sect = bfd_get_section_by_name (objfile->obfd.get (), ".text"); if (sect) objfile->sect_index_text = sect->index; - sect = bfd_get_section_by_name (objfile->obfd, ".data"); + sect = bfd_get_section_by_name (objfile->obfd.get (), ".data"); if (sect) objfile->sect_index_data = sect->index; - sect = bfd_get_section_by_name (objfile->obfd, ".bss"); + sect = bfd_get_section_by_name (objfile->obfd.get (), ".bss"); if (sect) objfile->sect_index_bss = sect->index; - sect = bfd_get_section_by_name (objfile->obfd, ".rodata"); + sect = bfd_get_section_by_name (objfile->obfd.get (), ".rodata"); if (sect) objfile->sect_index_rodata = sect->index; @@ -626,7 +627,7 @@ void default_symfile_offsets (struct objfile *objfile, const section_addr_info &addrs) { - objfile->section_offsets.resize (gdb_bfd_count_sections (objfile->obfd)); + objfile->section_offsets.resize (gdb_bfd_count_sections (objfile->obfd.get ())); relative_addr_info_to_section_offsets (objfile->section_offsets, addrs); /* For relocatable files, all loadable sections will start at zero. @@ -634,9 +635,9 @@ default_symfile_offsets (struct objfile *objfile, that no loadable sections overlap. This algorithm is quadratic, but the number of sections in a single object file is generally small. */ - if ((bfd_get_file_flags (objfile->obfd) & (EXEC_P | DYNAMIC)) == 0) + if ((bfd_get_file_flags (objfile->obfd.get ()) & (EXEC_P | DYNAMIC)) == 0) { - bfd *abfd = objfile->obfd; + bfd *abfd = objfile->obfd.get (); asection *cur_sec; for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next) @@ -652,8 +653,8 @@ default_symfile_offsets (struct objfile *objfile, /* Pick non-overlapping offsets for sections the user did not place explicitly. */ CORE_ADDR lowest = 0; - for (asection *sect : gdb_bfd_sections (objfile->obfd)) - place_section (objfile->obfd, sect, objfile->section_offsets, + for (asection *sect : gdb_bfd_sections (objfile->obfd.get ())) + place_section (objfile->obfd.get (), sect, objfile->section_offsets, lowest); /* Correctly filling in the section offsets is not quite @@ -786,8 +787,7 @@ read_symbols (struct objfile *objfile, symfile_add_flags add_flags) virtual section-as-bfd like the bfd filename containing the section. Therefore use also non-canonical name form for the same file containing the section. */ - symbol_file_add_separate (abfd.get (), - bfd_get_filename (abfd.get ()), + symbol_file_add_separate (abfd, bfd_get_filename (abfd.get ()), add_flags | SYMFILE_NOT_FILENAME, objfile); } } @@ -809,20 +809,20 @@ init_entry_point_info (struct objfile *objfile) /* Save startup file's range of PC addresses to help blockframe.c decide where the bottom of the stack is. */ - if (bfd_get_file_flags (objfile->obfd) & EXEC_P) + if (bfd_get_file_flags (objfile->obfd.get ()) & EXEC_P) { /* Executable file -- record its entry point so we'll recognize the startup file because it contains the entry point. */ - ei->entry_point = bfd_get_start_address (objfile->obfd); + ei->entry_point = bfd_get_start_address (objfile->obfd.get ()); ei->entry_point_p = 1; } - else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC - && bfd_get_start_address (objfile->obfd) != 0) + else if (bfd_get_file_flags (objfile->obfd.get ()) & DYNAMIC + && bfd_get_start_address (objfile->obfd.get ()) != 0) { /* Some shared libraries may have entry points set and be runnable. There's no clear way to indicate this, so just check for values other than zero. */ - ei->entry_point = bfd_get_start_address (objfile->obfd); + ei->entry_point = bfd_get_start_address (objfile->obfd.get ()); ei->entry_point_p = 1; } else @@ -857,7 +857,7 @@ init_entry_point_info (struct objfile *objfile) + bfd_section_size (sect))) { ei->the_bfd_section_index - = gdb_bfd_section_index (objfile->obfd, sect); + = gdb_bfd_section_index (objfile->obfd.get (), sect); found = 1; break; } @@ -900,14 +900,14 @@ syms_from_objfile_1 (struct objfile *objfile, section_addr_info local_addr; const int mainline = add_flags & SYMFILE_MAINLINE; - objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd)); + objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd.get ())); objfile->qf.clear (); if (objfile->sf == NULL) { /* No symbols to load, but we still need to make sure that the section_offsets table is allocated. */ - int num_sections = gdb_bfd_count_sections (objfile->obfd); + int num_sections = gdb_bfd_count_sections (objfile->obfd.get ()); objfile->section_offsets.assign (num_sections, 0); return; @@ -954,7 +954,7 @@ syms_from_objfile_1 (struct objfile *objfile, We no longer warn if the lowest section is not a text segment (as happens for the PA64 port. */ if (addrs->size () > 0) - addr_info_make_relative (addrs, objfile->obfd); + addr_info_make_relative (addrs, objfile->obfd.get ()); /* Initialize symbol reading routines for this objfile, allow complaints to appear for this new file, and record how verbose to be, then do the @@ -1033,7 +1033,7 @@ finish_new_objfile (struct objfile *objfile, symfile_add_flags add_flags) Upon failure, jumps back to command level (never returns). */ static struct objfile * -symbol_file_add_with_addrs (bfd *abfd, const char *name, +symbol_file_add_with_addrs (const gdb_bfd_ref_ptr &abfd, const char *name, symfile_add_flags add_flags, section_addr_info *addrs, objfile_flags flags, struct objfile *parent) @@ -1139,7 +1139,7 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name, see the objfile constructor. */ void -symbol_file_add_separate (bfd *bfd, const char *name, +symbol_file_add_separate (const gdb_bfd_ref_ptr &bfd, const char *name, symfile_add_flags symfile_flags, struct objfile *objfile) { @@ -1160,7 +1160,7 @@ symbol_file_add_separate (bfd *bfd, const char *name, See symbol_file_add_with_addrs's comments for details. */ struct objfile * -symbol_file_add_from_bfd (bfd *abfd, const char *name, +symbol_file_add_from_bfd (const gdb_bfd_ref_ptr &abfd, const char *name, symfile_add_flags add_flags, section_addr_info *addrs, objfile_flags flags, struct objfile *parent) @@ -1178,7 +1178,7 @@ symbol_file_add (const char *name, symfile_add_flags add_flags, { gdb_bfd_ref_ptr bfd (symfile_bfd_open (name)); - return symbol_file_add_from_bfd (bfd.get (), name, add_flags, addrs, + return symbol_file_add_from_bfd (bfd, name, add_flags, addrs, flags, NULL); } @@ -1289,7 +1289,7 @@ separate_debug_file_exists (const std::string &name, unsigned long crc, if (bfd_stat (abfd.get (), &abfd_stat) == 0 && abfd_stat.st_ino != 0 - && bfd_stat (parent_objfile->obfd, &parent_stat) == 0) + && bfd_stat (parent_objfile->obfd.get (), &parent_stat) == 0) { if (abfd_stat.st_dev == parent_stat.st_dev && abfd_stat.st_ino == parent_stat.st_ino) @@ -1325,7 +1325,7 @@ separate_debug_file_exists (const std::string &name, unsigned long crc, if (!verified_as_different) { - if (!gdb_bfd_crc (parent_objfile->obfd, &parent_crc)) + if (!gdb_bfd_crc (parent_objfile->obfd.get (), &parent_crc)) { if (separate_debug_file_debug) gdb_printf (gdb_stdlog, @@ -1516,7 +1516,7 @@ find_separate_debug_file_by_debuglink (struct objfile *objfile) unsigned long crc32; gdb::unique_xmalloc_ptr<char> debuglink - (bfd_get_debug_link_info (objfile->obfd, &crc32)); + (bfd_get_debug_link_info (objfile->obfd.get (), &crc32)); if (debuglink == NULL) { @@ -1747,7 +1747,7 @@ symfile_bfd_open (const char *name) int get_section_index (struct objfile *objfile, const char *section_name) { - asection *sect = bfd_get_section_by_name (objfile->obfd, section_name); + asection *sect = bfd_get_section_by_name (objfile->obfd.get (), section_name); if (sect) return sect->index; @@ -2424,7 +2424,7 @@ reread_symbols (int from_tty) for (objfile *objfile : current_program_space->objfiles ()) { - if (objfile->obfd == NULL) + if (objfile->obfd.get () == NULL) continue; /* Separate debug objfiles are handled in the main objfile. */ @@ -2468,12 +2468,12 @@ reread_symbols (int from_tty) clear_symtab_users_cleanup defer_clear_users (0); if (current_program_space->exec_bfd () != NULL - && filename_cmp (bfd_get_filename (objfile->obfd), + && filename_cmp (bfd_get_filename (objfile->obfd.get ()), bfd_get_filename (current_program_space->exec_bfd ())) == 0) { /* Reload EXEC_BFD without asking anything. */ - exec_file_attach (bfd_get_filename (objfile->obfd), 0); + exec_file_attach (bfd_get_filename (objfile->obfd.get ()), 0); } /* Keep the calls order approx. the same as in free_objfile. */ @@ -2504,14 +2504,14 @@ reread_symbols (int from_tty) /* Clean up any state BFD has sitting around. */ { - gdb_bfd_ref_ptr obfd (objfile->obfd); + gdb_bfd_ref_ptr obfd = objfile->obfd; const char *obfd_filename; - obfd_filename = bfd_get_filename (objfile->obfd); + obfd_filename = bfd_get_filename (objfile->obfd.get ()); /* Open the new BFD before freeing the old one, so that the filename remains live. */ gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget)); - objfile->obfd = temp.release (); + objfile->obfd = std::move (temp); if (objfile->obfd == NULL) error (_("Can't open %s to read symbols."), obfd_filename); } @@ -2519,7 +2519,7 @@ reread_symbols (int from_tty) std::string original_name = objfile->original_name; /* bfd_openr sets cacheable to true, which is what we want. */ - if (!bfd_check_format (objfile->obfd, bfd_object)) + if (!bfd_check_format (objfile->obfd.get (), bfd_object)) error (_("Can't read symbols from %s: %s."), objfile_name (objfile), bfd_errmsg (bfd_get_error ())); @@ -2553,7 +2553,7 @@ reread_symbols (int from_tty) /* Reset the sym_fns pointer. The ELF reader can change it based on whether .gdb_index is present, and we need it to start over. PR symtab/15885 */ - objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd)); + objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd.get ())); objfile->qf.clear (); build_objfile_section_table (objfile); @@ -3674,12 +3674,11 @@ symfile_map_offsets_to_segments (bfd *abfd, static void symfile_find_segment_sections (struct objfile *objfile) { - bfd *abfd = objfile->obfd; + bfd *abfd = objfile->obfd.get (); int i; asection *sect; - symfile_segment_data_up data - = get_symfile_segment_data (objfile->obfd); + symfile_segment_data_up data = get_symfile_segment_data (abfd); if (data == NULL) return; |