2006-04-26 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 26 Apr 2006 13:32:26 +0000 (13:32 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 26 Apr 2006 13:32:26 +0000 (13:32 +0000)
PR binutils/2593
* elf.c (_bfd_elf_new_section_hook): Don't set section ELF type
and flags if its BFD flags have been set.
(_bfd_elf_init_private_section_data): Don't copy the output ELF
section type from input if it has been set to something
different.

bfd/ChangeLog
bfd/elf.c

index 4c82cc1..1f1fafa 100644 (file)
@@ -1,3 +1,12 @@
+2006-04-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/2593
+       * elf.c (_bfd_elf_new_section_hook): Don't set section ELF type
+       and flags if its BFD flags have been set.
+       (_bfd_elf_init_private_section_data): Don't copy the output ELF
+       section type from input if it has been set to something
+       different.
+
 2006-04-25  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/2467
index 04eff22..e697722 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2487,10 +2487,13 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
   bed = get_elf_backend_data (abfd);
   sec->use_rela_p = bed->default_use_rela_p;
 
-  /* When we read a file, 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 (abfd->direction != read_direction
+  /* When we read a file, we don't need to set ELF section type and
+     flags.  They will be overridden in _bfd_elf_make_section_from_shdr
+     anyway.  We will set ELF section type and flags for all linker
+     created sections.  If user specifies BFD section flags, we will
+     set ELF section type and flags based on BFD section flags in
+     elf_fake_sections.  */
+  if ((!sec->flags && abfd->direction != read_direction)
       || (sec->flags & SEC_LINKER_CREATED) != 0)
     {
       ssect = (*bed->get_sec_type_attr) (abfd, sec);
@@ -5906,9 +5909,11 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
       || obfd->xvec->flavour != bfd_target_elf_flavour)
     return TRUE;
 
-  /* 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 the
+     output BFD section flags has been set to something different.
+     elf_fake_sections will set ELF section type based on BFD
+     section flags.  */
+  if (osec->flags == isec->flags || !osec->flags)
     elf_section_type (osec) = elf_section_type (isec);
 
   /* Set things up for objcopy and relocatable link.  The output