diff options
Diffstat (limited to 'bfd/peXXigen.c')
-rw-r--r-- | bfd/peXXigen.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index a62d126..5e0acc4 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -1018,7 +1018,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) typedef struct { - const char * section_name; + char section_name[SCNNMLEN]; unsigned long must_have; } pe_required_section_flags; @@ -1037,7 +1037,6 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) { ".text" , IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE }, { ".tls", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE }, { ".xdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA }, - { NULL, 0} }; pe_required_section_flags * p; @@ -1050,11 +1049,12 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) by ld --enable-auto-import (if auto-import is actually needed), by ld --omagic, or by obcopy --writable-text. */ - for (p = known_sections; p->section_name; p++) - if (strncmp (scnhdr_int->s_name, p->section_name, - sizeof scnhdr_int->s_name) == 0) + for (p = known_sections; + p < known_sections + ARRAY_SIZE (known_sections); + p++) + if (memcmp (scnhdr_int->s_name, p->section_name, SCNNMLEN) == 0) { - if (strncmp (scnhdr_int->s_name, ".text", sizeof scnhdr_int->s_name) + if (memcmp (scnhdr_int->s_name, ".text", sizeof ".text") || (bfd_get_file_flags (abfd) & WP_TEXT)) scnhdr_int->s_flags &= ~IMAGE_SCN_MEM_WRITE; scnhdr_int->s_flags |= p->must_have; @@ -1067,7 +1067,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) if (coff_data (abfd)->link_info && ! bfd_link_relocatable (coff_data (abfd)->link_info) && ! bfd_link_pic (coff_data (abfd)->link_info) - && strncmp (scnhdr_int->s_name, ".text", sizeof scnhdr_int->s_name) == 0) + && memcmp (scnhdr_int->s_name, ".text", sizeof ".text") == 0) { /* By inference from looking at MS output, the 32 bit field which is the combination of the number_of_relocs and |