This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA-v2] Fix PR 16201: internal error on a cygwin program linked against a DLL with no .data section
- From: Pedro Alves <palves at redhat dot com>
- To: Pierre Muller <pierre dot muller at ics-cnrs dot unistra dot fr>
- Cc: "'Joel Brobecker'" <brobecker at adacore dot com>, gdb-patches at sourceware dot org
- Date: Mon, 06 Jan 2014 18:34:05 +0000
- Subject: Re: [RFA-v2] Fix PR 16201: internal error on a cygwin program linked against a DLL with no .data section
- Authentication-results: sourceware.org; auth=none
- References: <004801cef65e$cb82d1b0$62887510$ at muller@ics-cnrs.unistra.fr> <20131211170204 dot GD3227 at adacore dot com> <52ab7ec0 dot c8da420a dot 12c6 dot ffffb3f4SMTPIN_ADDED_BROKEN at mx dot google dot com> <52B48A28 dot 2000402 at redhat dot com> <52b76e14 dot 8886420a dot 29e6 dot ffffddb2SMTPIN_ADDED_BROKEN at mx dot google dot com>
Hi Pierre,
Sorry for the slow reply. Been away on vacation.
On 12/22/2013 10:55 PM, Pierre Muller wrote:
> @@ -455,17 +458,34 @@ read_pe_exported_syms (struct objfile *objfile)
> unsigned long characteristics = pe_get32 (dll, secptr1 + 36);
> char sec_name[SCNNMLEN + 1];
> int sectix;
> + unsigned int bfd_section_index;
> + asection *section;
>
> bfd_seek (dll, (file_ptr) secptr1 + 0, SEEK_SET);
> bfd_bread (sec_name, (bfd_size_type) SCNNMLEN, dll);
> sec_name[SCNNMLEN] = '\0';
>
> sectix = read_pe_section_index (sec_name);
> + section = bfd_get_section_by_name (dll, sec_name);
Can't coff have sections with duplicate names? If so,
then it'd be better to match the section some other way,
I guess by address?
> + if (section)
> + bfd_section_index = section->index;
> + else
> + bfd_section_index = -1;
>
> if (sectix != PE_SECTION_INDEX_INVALID)
> {
> section_data[sectix].rva_start = vaddr;
> section_data[sectix].rva_end = vaddr + vsize;
> + /* For .text, .data and .bss section
> + set corresponding sect_index_XXX,
> + even if it was already set before. */
> + if (sectix == PE_SECTION_INDEX_TEXT)
> + objfile->sect_index_text = sectix;
> + if (sectix == PE_SECTION_INDEX_DATA)
> + objfile->sect_index_data = sectix;
> + if (sectix == PE_SECTION_INDEX_BSS)
> + objfile->sect_index_bss = sectix;
> + section_data[sectix].index = bfd_section_index;
Do you still need this part?
> }
--
Pedro Alves