Special ELF section flags vs. linker-specified bfd flags

H. J. Lu hjl@lucon.org
Thu Oct 19 21:51:00 GMT 2006


On Thu, Oct 19, 2006 at 12:29:15PM -0700, H. J. Lu wrote:
> On Thu, Oct 19, 2006 at 12:20:35PM -0700, H. J. Lu wrote:
> > On Thu, Oct 19, 2006 at 07:12:33PM +0100, Richard Sandiford wrote:
> > > "H. J. Lu" <hjl@lucon.org> writes:
> > > > "makec check" failed in ld on Linux/x86-64:
> > > >
> > > > FAIL: Run with libdl3a.so
> > > > FAIL: Run with libdl3b.so
> > > > FAIL: Run with libdl3c.so
> > > > ...
> > > > ERROR: tmpdir/3.x: nm failed
> > > > ERROR: tmpdir/4.x: nm failed
> > > > ERROR: tmpdir/5.x: nm failed
> > > 
> > > Hmm, it works fine for me on the same target.  What do the logs say?
> > > 
> > 
> > I see those on the current FC5/x86-64. I got
> > 
> > /export/build/gnu/binutils-last/build-x86_64-linux/ld/../binutils/nm-new
> > --demangle tmpdir/3.x >tmpdir/nm.out BFD: tmpdir/3.x: no group info for
> > section .rodata
> > ERROR: tmpdir/3.x: nm failed
> > UNRESOLVED: selective4
> 
> We don't want to copy all input section flags to output section.
> For example, we don't want SHF_GROUP in output section in a DSO
> or an executable.
> 

This patch copies OS/PROC specific flags from input section to output
section. Is it the best way?

I also changed elf_section_type (osec) == SHT_NULL to assert since
none SHT_NULL type may be a linker error.


H.J.
-----
2006-10-19  H.J. Lu  <hongjiu.lu@intel.com>

	* elf.c (_bfd_elf_init_private_section_data): Assert output
	section ELF type instead of check if it is SHT_NULL.  Copy
	OS/PROC specific flags from input section to output section.

--- bfd/elf.c.stabs	2006-10-19 09:28:18.000000000 -0700
+++ bfd/elf.c	2006-10-19 12:55:05.000000000 -0700
@@ -5977,9 +5977,17 @@ _bfd_elf_init_private_section_data (bfd 
      output BFD section flags have 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 == 0 && elf_section_type (osec) == SHT_NULL))
-    elf_section_type (osec) = elf_section_type (isec);
+  if (osec->flags == isec->flags || !osec->flags)
+    {
+      BFD_ASSERT (osec->flags == isec->flags 
+		  || (!osec->flags
+		      && elf_section_type (osec) == SHT_NULL));
+      elf_section_type (osec) = elf_section_type (isec);
+    }
+
+  /* FIXME: Is this correct for all OS/PROC specific flags?  */
+  elf_section_flags (osec) |= (elf_section_flags (isec)
+			       & (SHF_MASKOS | SHF_MASKPROC));
 
   /* Set things up for objcopy and relocatable link.  The output
      SHT_GROUP section will have its elf_next_in_group pointing back



More information about the Binutils mailing list