bfd/
authorAlan Modra <amodra@gmail.com>
Thu, 16 Sep 2010 00:06:12 +0000 (00:06 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 16 Sep 2010 00:06:12 +0000 (00:06 +0000)
* elf.c (bfd_elf_get_default_section_type): Don't test SEC_NEVER_LOAD.
* elflink.c (elf_link_input_bfd): Likewise.
ld/
* ld.texinfo (NOLOAD): Do not erroneously state that contents will
appear in output file.
* ldlang.c (lang_add_section): Clear SEC_HAS_CONTENTS on noload
unless SEC_COFF_SHARED_LIBRARY.
(map_input_to_output_sections): Don't set SEC_HAS_CONTENTS for noload
output sections.
(lang_size_sections_1): Don't test SEC_NEVER_LOAD when deciding
to update dot in region.  Ditto when setting SEC_ALLOC if dot
advanced due to assignment.
* ldwrite.c (build_link_order): Don't test SEC_NEVER_LOAD.

bfd/ChangeLog
bfd/elf.c
bfd/elflink.c
ld/ChangeLog
ld/ld.texinfo
ld/ldlang.c
ld/ldwrite.c

index f5f69258f3db231e87e48829e0721b1fbeb9cf1d..e96c66eec5491e9c8c4a2f7c340bbd54b187340d 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-16  Alan Modra  <amodra@gmail.com>
+
+       * elf.c (bfd_elf_get_default_section_type): Don't test SEC_NEVER_LOAD.
+       * elflink.c (elf_link_input_bfd): Likewise.
+
 2010-09-15  Kai Tietz  <kai.tietz@onevision.com>
 
        * pei-x86_64.c (pex64_get_unwind_info): Reorgnized.
index f5dfcd63cd45378d8e5a8694095cf2cf374a79a9..5ec92e92b9ca362ff5d57dd88f88d92a526f2a2f 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2452,8 +2452,7 @@ int
 bfd_elf_get_default_section_type (flagword flags)
 {
   if ((flags & SEC_ALLOC) != 0
-      && ((flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0
-         || (flags & SEC_NEVER_LOAD) != 0))
+      && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
     return SHT_NOBITS;
   return SHT_PROGBITS;
 }
index 1446885c9f5988c1791e4411962732af876be286..4351e28cfef2c6b10770b74790a2c3639c4165d8 100644 (file)
@@ -2829,7 +2829,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
 /* Return true if the symbol referred to by H should be considered
    to resolve local to the current module, and false otherwise.  Differs
    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
-   undefined symbols.  The two functions are vitually identical except
+   undefined symbols.  The two functions are virtually identical except
    for the place where forced_local and dynindx == -1 are tested.  If
    either of those tests are true, _bfd_elf_dynamic_symbol_p will say
    the symbol is local, while _bfd_elf_symbol_refs_local_p will say
@@ -9843,7 +9843,6 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
          {
            /* FIXME: octets_per_byte.  */
            if (! (o->flags & SEC_EXCLUDE)
-               && ! (o->output_section->flags & SEC_NEVER_LOAD)
                && ! bfd_set_section_contents (output_bfd, o->output_section,
                                               contents,
                                               (file_ptr) o->output_offset,
index 4c4f888454817c418d6c505896604c0fd8bab550..79d06d2de3e225be0f8463b1811100d5ce38ab93 100644 (file)
@@ -1,3 +1,16 @@
+2010-09-16  Alan Modra  <amodra@gmail.com>
+
+       * ld.texinfo (NOLOAD): Do not erroneously state that contents will
+       appear in output file.
+       * ldlang.c (lang_add_section): Clear SEC_HAS_CONTENTS on noload
+       unless SEC_COFF_SHARED_LIBRARY.
+       (map_input_to_output_sections): Don't set SEC_HAS_CONTENTS for noload
+       output sections.
+       (lang_size_sections_1): Don't test SEC_NEVER_LOAD when deciding
+       to update dot in region.  Ditto when setting SEC_ALLOC if dot
+       advanced due to assignment.
+       * ldwrite.c (build_link_order): Don't test SEC_NEVER_LOAD.
+
 2010-09-15  Kai Tietz  <kai.tietz@onevision.com>
 
        * scripttempl/pep.sc: Add .xdata segment and
index a3d8b9a740b783fb8a4ff7a95bc81d5a358bfcd7..28c59f2a79f817103fddff9fd1902b100ff03916 100644 (file)
@@ -4290,8 +4290,7 @@ The linker normally sets the attributes of an output section based on
 the input sections which map into it.  You can override this by using
 the section type.  For example, in the script sample below, the
 @samp{ROM} section is addressed at memory location @samp{0} and does not
-need to be loaded when the program is run.  The contents of the
-@samp{ROM} section will appear in the linker output file as usual.
+need to be loaded when the program is run.
 @smallexample
 @group
 SECTIONS @{
index 7f444451309ef3de0599dfaefd9eb783b512e435..75fa25c28d01d0b836d117178597d294e2b0a98a 100644 (file)
@@ -2245,6 +2245,8 @@ lang_add_section (lang_statement_list_type *ptr,
     case noload_section:
       flags &= ~SEC_LOAD;
       flags |= SEC_NEVER_LOAD;
+      if ((flags & SEC_COFF_SHARED_LIBRARY) == 0)
+       flags &= ~SEC_HAS_CONTENTS;
       break;
     }
 
@@ -3479,8 +3481,8 @@ map_input_to_output_sections
          /* Make sure that any sections mentioned in the expression
             are initialized.  */
          exp_init_os (s->data_statement.exp);
-         /* The output section gets CONTENTS, and usually ALLOC and
-            LOAD, but the latter two may be overridden by the script.  */
+         /* The output section gets CONTENTS, ALLOC and LOAD, but
+            these may be overridden by the script.  */
          flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
          switch (os->sectype)
            {
@@ -3491,7 +3493,7 @@ map_input_to_output_sections
              flags = SEC_HAS_CONTENTS;
              break;
            case noload_section:
-             flags = SEC_HAS_CONTENTS | SEC_NEVER_LOAD;
+             flags = SEC_NEVER_LOAD;
              break;
            }
          if (os->bfd_section == NULL)
@@ -4979,14 +4981,9 @@ lang_size_sections_1
            /* Update dot in the region ?
               We only do this if the section is going to be allocated,
               since unallocated sections do not contribute to the region's
-              overall size in memory.
-
-              If the SEC_NEVER_LOAD bit is not set, it will affect the
-              addresses of sections after it. We have to update
-              dot.  */
+              overall size in memory.  */
            if (os->region != NULL
-               && ((os->bfd_section->flags & SEC_NEVER_LOAD) == 0
-                   || (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))))
+               && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
              {
                os->region->current = dot;
 
@@ -5172,8 +5169,8 @@ lang_size_sections_1
                    /* If dot is advanced, this implies that the section
                       should have space allocated to it, unless the
                       user has explicitly stated that the section
-                      should never be loaded.  */
-                   if (!(output_section_statement->flags & SEC_NEVER_LOAD))
+                      should not be allocated.  */
+                   if (output_section_statement->sectype != noalloc_section)
                      output_section_statement->bfd_section->flags |= SEC_ALLOC;
                  }
                dot = newdot;
index 7eb8b2b01d3f6b03ca0eed85a36b5a9041d59b18..6b8423b568317a22b3d4aebc0fe72deb3b6d129d 100644 (file)
@@ -276,10 +276,9 @@ build_link_order (lang_statement_union_type *statement)
        output_section = statement->padding_statement.output_section;
        ASSERT (statement->padding_statement.output_section->owner
                == link_info.output_bfd);
-       if (((output_section->flags & SEC_HAS_CONTENTS) != 0
-            || ((output_section->flags & SEC_LOAD) != 0
-                && (output_section->flags & SEC_THREAD_LOCAL)))
-           && (output_section->flags & SEC_NEVER_LOAD) == 0)
+       if ((output_section->flags & SEC_HAS_CONTENTS) != 0
+           || ((output_section->flags & SEC_LOAD) != 0
+               && (output_section->flags & SEC_THREAD_LOCAL)))
          {
            link_order = bfd_new_link_order (link_info.output_bfd,
                                             output_section);