diff options
author | Tom Tromey <tromey@adacore.com> | 2022-04-19 07:27:48 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2022-04-22 06:54:02 -0600 |
commit | 5a0d4dfbf8aa8238c3eaccfdaf59ec9c4ae0331e (patch) | |
tree | 0b8854e57bc790cbce7fef4211bf0f1035160ccd | |
parent | 6acc36f71dfc60e357496174672103f133f85e97 (diff) | |
download | gdb-5a0d4dfbf8aa8238c3eaccfdaf59ec9c4ae0331e.zip gdb-5a0d4dfbf8aa8238c3eaccfdaf59ec9c4ae0331e.tar.gz gdb-5a0d4dfbf8aa8238c3eaccfdaf59ec9c4ae0331e.tar.bz2 |
Simplify BFD section iteration in coff-pe-read.c
coff-pe-read.c iterates over BFD sections using bfd_map_over_sections,
but it's much simpler to use a for-each loop. This allows for the
removal of helper functions and types.
-rw-r--r-- | gdb/coff-pe-read.c | 55 |
1 files changed, 13 insertions, 42 deletions
diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index 3ae2a7f..32d0a9e 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -100,45 +100,14 @@ read_pe_section_index (const char *section_name) static int get_pe_section_index (const char *section_name, - struct read_pe_section_data *sections, - int nb_sections) + const std::vector<read_pe_section_data> §ions) { - int i; - - for (i = 0; i < nb_sections; i++) + for (int i = 0; i < sections.size (); i++) if (sections[i].section_name == section_name) return i; return PE_SECTION_INDEX_INVALID; } -/* Structure used by get_section_vmas function below - to access section_data array and the size of the array - stored in nb_sections field. */ -struct pe_sections_info -{ - int nb_sections; - struct read_pe_section_data *sections; -}; - -/* Record the virtual memory address of a section. */ - -static void -get_section_vmas (bfd *abfd, asection *sectp, void *context) -{ - struct pe_sections_info *data = (struct pe_sections_info *) context; - struct read_pe_section_data *sections = data->sections; - int sectix = get_pe_section_index (sectp->name, sections, - data->nb_sections); - - if (sectix != PE_SECTION_INDEX_INVALID) - { - /* Data within the section start at rva_start in the pe and at - bfd_get_section_vma() within memory. Store the offset. */ - - sections[sectix].vma_offset - = bfd_section_vma (sectp) - sections[sectix].rva_start; - } -} /* Create a minimal symbol entry for an exported symbol. SYM_NAME contains the exported name or NULL if exported by ordinal, @@ -347,11 +316,6 @@ read_pe_exported_syms (minimal_symbol_reader &reader, int is_pe64 = 0; int is_pe32 = 0; - /* Array elements are for text, data and bss in that order - Initialization with RVA_START > RVA_END guarantees that - unused sections won't be matched. */ - struct pe_sections_info pe_sections_info; - char const *target = bfd_get_target (objfile->obfd); std::vector<struct read_pe_section_data> section_data @@ -522,10 +486,17 @@ read_pe_exported_syms (minimal_symbol_reader &reader, /* Use internal dll name instead of full pathname. */ dll_name = (char *) (pe_as32 (expdata + 12) + erva); - pe_sections_info.nb_sections = otherix; - pe_sections_info.sections = section_data.data (); - - bfd_map_over_sections (dll, get_section_vmas, &pe_sections_info); + for (asection *sectp : gdb_bfd_sections (dll)) + { + int sectix = get_pe_section_index (sectp->name, section_data); + if (sectix != PE_SECTION_INDEX_INVALID) + { + /* Data within the section start at rva_start in the pe and at + bfd_get_section_vma() within memory. Store the offset. */ + section_data[sectix].vma_offset + = bfd_section_vma (sectp) - section_data[sectix].rva_start; + } + } /* Truncate name at first dot. Should maybe also convert to all lower case for convenience on Windows. */ |