* ldwrite.c (build_link_order <lang_data_statement_enum>): Don't
authorAlan Modra <amodra@gmail.com>
Thu, 21 Oct 2010 23:28:06 +0000 (23:28 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 21 Oct 2010 23:28:06 +0000 (23:28 +0000)
output when section has no contents.
(build_link_order <lang_reloc_statement_enum>): Likewise.

ld/ChangeLog
ld/ldwrite.c

index 5f7885b89c20c2c0199210f0d22a43fbfe545891..09a1f719403d25f323e1f3489c1544caabc94880 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-22  Alan Modra  <amodra@gmail.com>
+
+       * ldwrite.c (build_link_order <lang_data_statement_enum>): Don't
+       output when section has no contents.
+       (build_link_order <lang_reloc_statement_enum>): Likewise.
+
 2010-10-21  Joseph Myers  <joseph@codesourcery.com>
 
        * emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Use
@@ -26,7 +32,7 @@
        (add_input_library): Likewise.
        (set_extra_library_path): Likewise.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 6/6).
        * ldlang.c (load_symbols): Handle bfd subsitution when calling the
        member to the plugins and if claimed set "subsbfd" output parameter to
        point to the dummy IR-only BFD.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 5/6).
        * plugin.c (asymbol_from_plugin_symbol): If the bfd is an ELF bfd,
        find the elf symbol data and set the visibility in the st_other field.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 4/6).
        * ldlang.c (lang_process)[ENABLE_PLUGINS]: Move invocation of
@@ -69,7 +75,7 @@
        (onall_symbols_read): Iterate the list of new files, libs and dirs,
        adding them.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 3/6).
        * ldmain.c (notice)[ENABLE_PLUGINS]: Call plugin_notice.
@@ -89,7 +95,7 @@
        (parse_options): Accept "dumpresolutions".
        (onall_symbols_read): Get syms and dump resolutions if it was given.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 2/6).
        * ldfile.c (ldfile_try_open_bfd)[ENABLE_PLUGINS]: Don't return early
        (onall_symbols_read): Make static and use TV_MESSAGE.
        (oncleanup): Likewise.
 
-2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        Apply LD plugin patch series (part 1/6).
        * configure.in: Add AC_CHECKs for file io and dlfcn headers and
index d0616fcbd99b82798f92ed81366bc16a85f39c91..b7a1469c06a3696fd2efeac437f58f18e2f09eeb 100644 (file)
@@ -1,6 +1,7 @@
 /* ldwrite.c -- write out the linked file
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2010
+   Free Software Foundation, Inc.
    Written by Steve Chamberlain sac@cygnus.com
 
    This file is part of the GNU Binutils.
@@ -51,6 +52,11 @@ build_link_order (lang_statement_union_type *statement)
        output_section = statement->data_statement.output_section;
        ASSERT (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))))
+         break;
+
        link_order = bfd_new_link_order (link_info.output_bfd, output_section);
        if (link_order == NULL)
          einfo (_("%P%F: bfd_new_link_order failed\n"));
@@ -191,6 +197,11 @@ build_link_order (lang_statement_union_type *statement)
        output_section = rs->output_section;
        ASSERT (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))))
+         break;
+
        link_order = bfd_new_link_order (link_info.output_bfd, output_section);
        if (link_order == NULL)
          einfo (_("%P%F: bfd_new_link_order failed\n"));
@@ -233,37 +244,35 @@ build_link_order (lang_statement_union_type *statement)
            && (i->flags & SEC_EXCLUDE) == 0)
          {
            asection *output_section = i->output_section;
+           struct bfd_link_order *link_order;
 
            ASSERT (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)))
-             {
-               struct bfd_link_order *link_order;
+           if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+                 || ((output_section->flags & SEC_LOAD) != 0
+                     && (output_section->flags & SEC_THREAD_LOCAL))))
+             break;
 
-               link_order = bfd_new_link_order (link_info.output_bfd,
-                                                output_section);
+           link_order = bfd_new_link_order (link_info.output_bfd,
+                                            output_section);
 
-               if ((i->flags & SEC_NEVER_LOAD) != 0
-                   && (i->flags & SEC_DEBUGGING) == 0)
-                 {
-                   /* We've got a never load section inside one which
-                      is going to be output, we'll change it into a
-                      fill.  */
-                   link_order->type = bfd_data_link_order;
-                   link_order->u.data.contents = (unsigned char *) "";
-                   link_order->u.data.size = 1;
-                 }
-               else
-                 {
-                   link_order->type = bfd_indirect_link_order;
-                   link_order->u.indirect.section = i;
-                   ASSERT (i->output_section == output_section);
-                 }
-               link_order->size = i->size;
-               link_order->offset = i->output_offset;
+           if ((i->flags & SEC_NEVER_LOAD) != 0
+               && (i->flags & SEC_DEBUGGING) == 0)
+             {
+               /* We've got a never load section inside one which is
+                  going to be output, we'll change it into a fill.  */
+               link_order->type = bfd_data_link_order;
+               link_order->u.data.contents = (unsigned char *) "";
+               link_order->u.data.size = 1;
              }
+           else
+             {
+               link_order->type = bfd_indirect_link_order;
+               link_order->u.indirect.section = i;
+               ASSERT (i->output_section == output_section);
+             }
+           link_order->size = i->size;
+           link_order->offset = i->output_offset;
          }
       }
       break;
@@ -277,18 +286,19 @@ 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)))
-         {
-           link_order = bfd_new_link_order (link_info.output_bfd,
-                                            output_section);
-           link_order->type = bfd_data_link_order;
-           link_order->size = statement->padding_statement.size;
-           link_order->offset = statement->padding_statement.output_offset;
-           link_order->u.data.contents = statement->padding_statement.fill->data;
-           link_order->u.data.size = statement->padding_statement.fill->size;
-         }
+
+       if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
+             || ((output_section->flags & SEC_LOAD) != 0
+                 && (output_section->flags & SEC_THREAD_LOCAL))))
+         break;
+
+       link_order = bfd_new_link_order (link_info.output_bfd,
+                                        output_section);
+       link_order->type = bfd_data_link_order;
+       link_order->size = statement->padding_statement.size;
+       link_order->offset = statement->padding_statement.output_offset;
+       link_order->u.data.contents = statement->padding_statement.fill->data;
+       link_order->u.data.size = statement->padding_statement.fill->size;
       }
       break;