From: Tom Tromey Date: Wed, 19 Nov 2025 18:09:35 +0000 (-0700) Subject: Remove section_offsets typedef X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e808504adc01b01d9b8b6ba274e63ca8f5bdd28;p=thirdparty%2Fbinutils-gdb.git Remove section_offsets typedef This patch removes the section_offsets typedef, in favor of using either std::vector or gdb::array_view as appropriate. v2: preserve const-ness when creating views Regression tested on x86-64 Fedora 40. Approved-By: Simon Marchi --- diff --git a/gdb/block.c b/gdb/block.c index 4d7f2124f39..98088aa3807 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -369,7 +369,8 @@ block::static_link () const /* See block.h. */ void -block::relocate (struct objfile *objfile, const section_offsets &offsets) +block::relocate (struct objfile *objfile, + gdb::array_view offsets) { int block_line_section = SECT_OFF_TEXT (objfile); @@ -889,7 +890,7 @@ blockvector::~blockvector () void blockvector::relocate (struct objfile *objfile, - const section_offsets &offsets) + gdb::array_view offsets) { int block_line_section = SECT_OFF_TEXT (objfile); diff --git a/gdb/block.h b/gdb/block.h index ceff97d79e3..b199663273c 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -318,7 +318,8 @@ struct block : public allocate_on_obstack /* Relocate this block and all contained blocks. OBJFILE is the objfile holding this block, and OFFSETS is the relocation offsets to use. */ - void relocate (struct objfile *objfile, const section_offsets &offsets); + void relocate (struct objfile *objfile, + gdb::array_view offsets); private: @@ -517,7 +518,8 @@ struct blockvector /* Relocate this blockvector and all contained blocks. OBJFILE is the objfile holding this blockvector, and OFFSETS is the relocation offsets to use. */ - void relocate (struct objfile *objfile, const section_offsets &offsets); + void relocate (struct objfile *objfile, + gdb::array_view offsets); private: /* An address map mapping addresses to blocks in this blockvector. diff --git a/gdb/defs.h b/gdb/defs.h index bb047d9cb4c..8bf9d3dcbda 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -411,8 +411,4 @@ DEF_ENUM_FLAGS_TYPE (enum user_selected_what_flag, user_selected_what); extern void _initialize_ ## NAME (); \ void _initialize_ ## NAME () -/* How to relocate the symbols from each section in a symbol file. - This is indexed by section numbers. */ -typedef std::vector section_offsets; - #endif /* GDB_DEFS_H */ diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 10c4133e6c2..e7c526a84ed 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -640,7 +640,8 @@ add_data_symbol (SYMR *sh, union aux_ext *ax, int bigend, static int parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, - const section_offsets §ion_offsets, struct objfile *objfile) + gdb::array_view section_offsets, + struct objfile *objfile) { struct gdbarch *gdbarch = objfile->arch (); const bfd_size_type external_sym_size = debug_swap->external_sym_size; @@ -2125,7 +2126,8 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab, This routine clobbers top_stack->cur_block and ->cur_st. */ static void -parse_external (EXTR *es, int bigend, const section_offsets §ion_offsets, +parse_external (EXTR *es, int bigend, + gdb::array_view section_offsets, struct objfile *objfile) { union aux_ext *ax; @@ -3193,7 +3195,7 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) FDR *fh; struct linetable *lines; CORE_ADDR lowest_pdr_addr = 0; - const section_offsets §ion_offsets = objfile->section_offsets; + gdb::array_view section_offsets (objfile->section_offsets); if (pst->readin) return; diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 658b01e5955..0d166ceec4c 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -514,9 +514,9 @@ objfile::~objfile () static int objfile_relocate1 (struct objfile *objfile, - const section_offsets &new_offsets) + gdb::array_view new_offsets) { - section_offsets delta (objfile->section_offsets.size ()); + std::vector delta (objfile->section_offsets.size ()); int something_changed = 0; @@ -567,7 +567,7 @@ objfile_relocate1 (struct objfile *objfile, void objfile_relocate (struct objfile *objfile, - const section_offsets &new_offsets) + gdb::array_view new_offsets) { int changed = 0; @@ -588,7 +588,7 @@ objfile_relocate (struct objfile *objfile, gdb_assert (debug_objfile->section_offsets.size () == gdb_bfd_count_sections (debug_objfile->obfd.get ())); - section_offsets new_debug_offsets + std::vector new_debug_offsets (debug_objfile->section_offsets.size ()); relative_addr_info_to_section_offsets (new_debug_offsets, objfile_addrs); @@ -607,7 +607,7 @@ objfile_relocate (struct objfile *objfile, static int objfile_rebase1 (struct objfile *objfile, CORE_ADDR slide) { - section_offsets new_offsets (objfile->section_offsets.size (), slide); + std::vector new_offsets (objfile->section_offsets.size (), slide); return objfile_relocate1 (objfile, new_offsets); } diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 31651c4ee57..0dd3fafac03 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -772,7 +772,7 @@ public: minimal symbols) which have been read have been relocated by this much. Symbols which are yet to be read need to be relocated by it. */ - ::section_offsets section_offsets; + std::vector section_offsets; /* Indexes in the section_offsets array. These are initialized by the *_symfile_offsets() family of functions (som_symfile_offsets, @@ -918,7 +918,8 @@ extern void build_objfile_section_table (struct objfile *); extern void free_objfile_separate_debug (struct objfile *); -extern void objfile_relocate (struct objfile *, const section_offsets &); +extern void objfile_relocate (struct objfile *, + gdb::array_view); extern void objfile_rebase (struct objfile *, CORE_ADDR); /* Return true if any objfile of PSPACE has partial symbols. */ diff --git a/gdb/remote.c b/gdb/remote.c index da44b22a259..fd80b6ddb59 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4930,7 +4930,7 @@ remote_target::get_offsets () warning (_("Target reported unsupported offsets: %s"), buf); objfile *objf = current_program_space->symfile_object_file; - section_offsets offs = objf->section_offsets; + std::vector offs = objf->section_offsets; symfile_segment_data_up data = get_symfile_segment_data (objf->obfd.get ()); do_segments = (data != NULL); diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 308ff80c38c..5076d7e2f06 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -380,13 +380,13 @@ aix_solib_ops::relocate_section_addresses (solib &so, /* Compute and return the OBJFILE's section_offset array, using the associated loader info (INFO). */ -static section_offsets +static std::vector solib_aix_get_section_offsets (struct objfile *objfile, lm_info_aix *info) { bfd *abfd = objfile->obfd.get (); - section_offsets offsets (objfile->section_offsets.size ()); + std::vector offsets (objfile->section_offsets.size ()); /* .text */ @@ -451,8 +451,8 @@ aix_solib_ops::create_inferior_hook (int from_tty) const if (current_program_space->symfile_object_file != NULL) { objfile *objf = current_program_space->symfile_object_file; - section_offsets offsets = solib_aix_get_section_offsets (objf, - &exec_info); + std::vector offsets + = solib_aix_get_section_offsets (objf, &exec_info); objfile_relocate (objf, offsets); } diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c index 883164eda04..23042b4158e 100644 --- a/gdb/solib-dsbt.c +++ b/gdb/solib-dsbt.c @@ -816,7 +816,7 @@ dsbt_relocate_main_executable (void) info->main_executable_lm_info = new lm_info_dsbt (ldm); objfile *objf = current_program_space->symfile_object_file; - section_offsets new_offsets (objf->section_offsets.size ()); + std::vector new_offsets (objf->section_offsets.size ()); changed = 0; for (obj_section &osect : objf->sections ()) diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index 1cb063f7673..9d36b0fd4ed 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -748,7 +748,7 @@ frv_relocate_main_executable (void) main_executable_lm_info = new lm_info_frv (ldm, 0, 0); objfile *objf = current_program_space->symfile_object_file; - section_offsets new_offsets (objf->section_offsets.size ()); + std::vector new_offsets (objf->section_offsets.size ()); changed = 0; for (obj_section &osect : objf->sections ()) diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 2d15e7dfd8a..7c4a8b274c4 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -3291,8 +3291,8 @@ svr4_relocate_main_executable (void) objfile *objf = current_program_space->symfile_object_file; if (objf) { - section_offsets new_offsets (objf->section_offsets.size (), - displacement); + std::vector new_offsets (objf->section_offsets.size (), + displacement); objfile_relocate (objf, new_offsets); } else if (current_program_space->exec_bfd ()) diff --git a/gdb/solib-target.c b/gdb/solib-target.c index 2ae25a8f3ae..36654a76fc3 100644 --- a/gdb/solib-target.c +++ b/gdb/solib-target.c @@ -42,7 +42,7 @@ struct lm_info_target final : public lm_info /* The cached offsets for each section of this shared library, determined from SEGMENT_BASES, or SECTION_BASES. */ - section_offsets offsets; + std::vector offsets; }; using lm_info_target_up = std::unique_ptr; diff --git a/gdb/symfile.c b/gdb/symfile.c index d2c9bb1950d..11388772ff5 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -327,7 +327,7 @@ init_objfile_sect_indices (struct objfile *objfile) the user did not provide an offset. */ static void -place_section (bfd *abfd, asection *sect, section_offsets &offsets, +place_section (bfd *abfd, asection *sect, std::vector &offsets, CORE_ADDR &lowest) { CORE_ADDR start_addr; @@ -391,7 +391,7 @@ place_section (bfd *abfd, asection *sect, section_offsets &offsets, filled-in) by addr_info_make_relative into SECTION_OFFSETS. */ void -relative_addr_info_to_section_offsets (section_offsets §ion_offsets, +relative_addr_info_to_section_offsets (std::vector §ion_offsets, const section_addr_info &addrs) { int i; @@ -636,7 +636,7 @@ default_symfile_offsets (struct objfile *objfile, if (cur_sec == NULL) { - section_offsets &offsets = objfile->section_offsets; + std::vector &offsets = objfile->section_offsets; /* Pick non-overlapping offsets for sections the user did not place explicitly. */ @@ -2135,7 +2135,7 @@ set_objfile_default_section_offset (struct objfile *objf, CORE_ADDR offset) { /* Add OFFSET to all sections by default. */ - section_offsets offsets (objf->section_offsets.size (), offset); + std::vector offsets (objf->section_offsets.size (), offset); /* Create sorted lists of all sections in ADDRS as well as all sections in OBJF. */ @@ -3643,7 +3643,7 @@ get_symfile_segment_data (bfd *abfd) int symfile_map_offsets_to_segments (bfd *abfd, const struct symfile_segment_data *data, - section_offsets &offsets, + std::vector &offsets, int num_segment_bases, const CORE_ADDR *segment_bases) { diff --git a/gdb/symfile.h b/gdb/symfile.h index 418e0847df4..cc2e8c94aff 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -178,7 +178,7 @@ extern section_addr_info build_section_addr_info_from_objfile (const struct objfile *objfile); extern void relative_addr_info_to_section_offsets - (section_offsets §ion_offsets, const section_addr_info &addrs); + (std::vector §ion_offsets, const section_addr_info &addrs); extern void addr_info_make_relative (section_addr_info *addrs, bfd *abfd); @@ -338,7 +338,7 @@ extern bfd_byte *symfile_relocate_debug_section (struct objfile *, asection *, extern int symfile_map_offsets_to_segments (bfd *, const struct symfile_segment_data *, - section_offsets &, + std::vector &, int, const CORE_ADDR *); symfile_segment_data_up get_symfile_segment_data (bfd *abfd); diff --git a/gdb/symtab.c b/gdb/symtab.c index 0100bc4704c..701aa5d0007 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -6611,7 +6611,7 @@ symbol::value_block () const /* See symtab.h. */ void -symbol::relocate (const section_offsets &delta) +symbol::relocate (gdb::array_view delta) { if ((loc_class () == LOC_LABEL || loc_class () == LOC_STATIC) && section_index () >= 0) diff --git a/gdb/symtab.h b/gdb/symtab.h index 708eaf2c329..33cf0a6c229 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1460,7 +1460,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack /* Relocate this symbol. OFFSETS is the relocation offsets to use. */ - void relocate (const section_offsets &offsets); + void relocate (gdb::array_view offsets); /* Data type of value */