]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - ld/ldwrite.c
Introduce complete_nested_command_line
[thirdparty/binutils-gdb.git] / ld / ldwrite.c
index b7a1469c06a3696fd2efeac437f58f18e2f09eeb..02b1cc7f82813c156db4ec5898132d886b3df3b3 100644 (file)
@@ -1,7 +1,5 @@
 /* ldwrite.c -- write out the linked file
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
    Written by Steve Chamberlain sac@cygnus.com
 
    This file is part of the GNU Binutils.
@@ -59,7 +57,7 @@ build_link_order (lang_statement_union_type *statement)
 
        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"));
+         einfo (_("%F%P: bfd_new_link_order failed\n"));
 
        link_order->type = bfd_data_link_order;
        link_order->offset = statement->data_statement.output_offset;
@@ -93,17 +91,17 @@ build_link_order (lang_statement_union_type *statement)
                big_endian = TRUE;
                {
                  LANG_FOR_EACH_INPUT_STATEMENT (s)
-                   {
-                     if (s->the_bfd != NULL)
-                       {
-                         if (bfd_little_endian (s->the_bfd))
-                           {
-                             big_endian = FALSE;
-                             swap = TRUE;
-                           }
-                         break;
-                       }
-                   }
+                 {
+                   if (s->the_bfd != NULL)
+                     {
+                       if (bfd_little_endian (s->the_bfd))
+                         {
+                           big_endian = FALSE;
+                           swap = TRUE;
+                         }
+                       break;
+                     }
+                 }
                }
              }
 
@@ -183,6 +181,7 @@ build_link_order (lang_statement_union_type *statement)
          default:
            abort ();
          }
+       link_order->u.data.size = link_order->size;
       }
       break;
 
@@ -204,13 +203,13 @@ build_link_order (lang_statement_union_type *statement)
 
        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"));
+         einfo (_("%F%P: bfd_new_link_order failed\n"));
 
        link_order->offset = rs->output_offset;
        link_order->size = bfd_get_reloc_size (rs->howto);
 
        link_order->u.reloc.p = (struct bfd_link_order_reloc *)
-            xmalloc (sizeof (struct bfd_link_order_reloc));
+         xmalloc (sizeof (struct bfd_link_order_reloc));
 
        link_order->u.reloc.p->reloc = rs->reloc;
        link_order->u.reloc.p->addend = rs->addend_value;
@@ -240,7 +239,7 @@ build_link_order (lang_statement_union_type *statement)
           attached */
        asection *i = statement->input_section.section;
 
-       if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+       if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
            && (i->flags & SEC_EXCLUDE) == 0)
          {
            asection *output_section = i->output_section;
@@ -255,6 +254,8 @@ build_link_order (lang_statement_union_type *statement)
 
            link_order = bfd_new_link_order (link_info.output_bfd,
                                             output_section);
+           if (link_order == NULL)
+             einfo (_("%F%P: bfd_new_link_order failed\n"));
 
            if ((i->flags & SEC_NEVER_LOAD) != 0
                && (i->flags & SEC_DEBUGGING) == 0)
@@ -294,6 +295,8 @@ build_link_order (lang_statement_union_type *statement)
 
        link_order = bfd_new_link_order (link_info.output_bfd,
                                         output_section);
+       if (link_order == NULL)
+         einfo (_("%F%P: bfd_new_link_order failed\n"));
        link_order->type = bfd_data_link_order;
        link_order->size = statement->padding_statement.size;
        link_order->offset = statement->padding_statement.output_offset;
@@ -337,7 +340,7 @@ clone_section (bfd *abfd, asection *s, const char *name, int *count)
 {
   char *tname;
   char *sname;
-  unsigned int len;    
+  unsigned int len;
   asection *n;
   struct bfd_link_hash_entry *h;
 
@@ -410,13 +413,9 @@ ds (asection *s)
   while (l)
     {
       if (l->type == bfd_indirect_link_order)
-       {
-         printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename);
-       }
+       printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename);
       else
-       {
-         printf (_("%8x something else\n"), l->offset);
-       }
+       printf (_("%8x something else\n"), l->offset);
       l = l->next;
     }
   printf ("\n");
@@ -489,13 +488,13 @@ split_sections (bfd *abfd, struct bfd_link_info *info)
                  || info->strip == strip_some)
                thislines = sec->lineno_count;
 
-             if (info->relocatable)
+             if (bfd_link_relocatable (info))
                thisrelocs = sec->reloc_count;
 
              thissize = sec->size;
 
            }
-         else if (info->relocatable
+         else if (bfd_link_relocatable (info)
                   && (p->type == bfd_section_reloc_link_order
                       || p->type == bfd_symbol_reloc_link_order))
            thisrelocs++;
@@ -573,6 +572,7 @@ ldwrite (void)
   /* Reset error indicator, which can typically something like invalid
      format from opening up the .o files.  */
   bfd_set_error (bfd_error_no_error);
+  lang_clear_os_map ();
   lang_for_each_statement (build_link_order);
 
   if (config.split_by_reloc != (unsigned) -1