This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem setting the CONTENTS flag


HI H.J.

Here is an updated patch.

There are a couple of minor problems with this version of the patch:


+  /* When we read a file or section BFD flags have been set, we don't
+     need section type and flags unless it is a linker created section.
+     They will be overridden in _bfd_elf_make_section_from_shdr
+     anyway.  */
+  if ((!sec->flags && abfd->direction != read_direction)
       || (sec->flags & SEC_LINKER_CREATED) != 0)

I think that the comment could be reworded to be clearer. For example:


  A section without any flags or with the SEC_LINKER_CREATED flag
  must have its type and other flags set.  Skip this for sections
  with no flags that have been read in, as this state must have been
  requested by the user, and it will be overridden by
  _bfd_elf_make_section_from_shdr anyway.

-  /* FIXME: What if the output ELF section type has been set to
-     something different?  */
-  if (elf_section_type (osec) == SHT_NULL)
+  /* Don't copy the output ELF section type from input if it has been
+     set to something different.  */
+  if (osec->flags == isec->flags || !osec->flags)
     elf_section_type (osec) = elf_section_type (isec);

A section's type is not determined by its flags. Therefore it seems to be counter-intuitive to be testing the flags when we are concerned about the type. Also what happens if the output sections flags have been set to something other than the input section's flags, but the output section's type is SHT_NULL ? According to the ELF spec this would mean that the flags are undefined as well.


I think that for this part of the patch the comment ought to be reworded and you ought to test for SHT_NULL and either change it or issue an error message. eg:

  /* Copy the output ELF section type from the input section type if
     the output section flags were copied from the input, or if the
     output section has no type or flags.  */
  if (osec->flags == isec->flags
      || osec->flags == 0
      || elf_section_type (osec) == SHT_NULL)
   elf_section_type (osec) = elf_section_type (isec);


Cheers Nick



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]