[ARC] Dynamic relocs verification for dynindx == -1.
[deliverable/binutils-gdb.git] / gas / write.c
index bc76962c600efc442d7d180e360320f69808685d..15330cfc3345a5b14cbb1d87def476f52c4e946b 100644 (file)
@@ -1,5 +1,5 @@
 /* write.c - emit .o file
-   Copyright (C) 1986-2015 Free Software Foundation, Inc.
+   Copyright (C) 1986-2016 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -192,7 +192,7 @@ fix_new_internal (fragS *frag,              /* Which frag?  */
   TC_INIT_FIX_DATA (fixP);
 #endif
 
-  as_where (&fixP->fx_file, &fixP->fx_line);
+  fixP->fx_file = as_where (&fixP->fx_line);
 
   {
 
@@ -355,12 +355,12 @@ record_alignment (/* Segment to which alignment pertains.  */
                  segT seg,
                  /* Alignment, as a power of 2 (e.g., 1 => 2-byte
                     boundary, 2 => 4-byte boundary, etc.)  */
-                 int align)
+                 unsigned int align)
 {
   if (seg == absolute_section)
     return;
 
-  if ((unsigned int) align > bfd_get_section_alignment (stdoutput, seg))
+  if (align > bfd_get_section_alignment (stdoutput, seg))
     bfd_set_section_alignment (stdoutput, seg, align);
 }
 
@@ -1134,7 +1134,7 @@ fix_segment (bfd *abfd ATTRIBUTE_UNUSED,
 
 static void
 install_reloc (asection *sec, arelent *reloc, fragS *fragp,
-              char *file, unsigned int line)
+              const char *file, unsigned int line)
 {
   char *err;
   bfd_reloc_status_type s;
@@ -1414,8 +1414,6 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
   int x;
   flagword flags = bfd_get_section_flags (abfd, sec);
   unsigned int header_size, compression_header_size;
-  /* Maximimum compression header is 24 bytes.  */
-  bfd_byte compression_header[24];
 
   if (seginfo == NULL
       || sec->size < 32
@@ -1431,14 +1429,18 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
     return;
 
   if (flag_compress_debug == COMPRESS_DEBUG_GABI_ZLIB)
-    stdoutput->flags |= BFD_COMPRESS | BFD_COMPRESS_GABI;
+    {
+      compression_header_size
+       = bfd_get_compression_header_size (stdoutput, NULL);
+      header_size = compression_header_size;
+    }
   else
-    stdoutput->flags |= BFD_COMPRESS;
-  compression_header_size
-    = bfd_get_compression_header_size (stdoutput, NULL);
+    {
+      compression_header_size = 0;
+      header_size = 12;
+    }
 
-  /* Create a new frag to contain the "ZLIB" header.  */
-  header_size = 12 + compression_header_size;
+  /* Create a new frag to contain the compression header.  */
   first_newf = frag_alloc (ob);
   if (obstack_room (ob) < header_size)
     first_newf = frag_alloc (ob);
@@ -1533,11 +1535,6 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
   if (compressed_size >= uncompressed_size)
     return;
 
-  if (compression_header_size)
-    memcpy (header, compression_header, compression_header_size);
-  memcpy (header + compression_header_size, "ZLIB", 4);
-  bfd_putb64 (uncompressed_size, header + compression_header_size + 4);
-
   /* Replace the uncompressed frag list with the compressed frag list.  */
   seginfo->frchainP->frch_root = first_newf;
   seginfo->frchainP->frch_last = last_newf;
@@ -1586,7 +1583,9 @@ write_contents (bfd *abfd ATTRIBUTE_UNUSED,
                                        f->fr_literal, (file_ptr) offset,
                                        (bfd_size_type) f->fr_fix);
          if (!x)
-           as_fatal (_("can't write %s: %s"), stdoutput->filename,
+           as_fatal (_("can't write %ld bytes to section %s of %s because: '%s'"),
+                     (long) f->fr_fix, sec->name,
+                     stdoutput->filename,
                      bfd_errmsg (bfd_get_error ()));
          offset += f->fr_fix;
        }
@@ -1607,7 +1606,9 @@ write_contents (bfd *abfd ATTRIBUTE_UNUSED,
                                                (file_ptr) offset,
                                                (bfd_size_type) fill_size);
                  if (!x)
-                   as_fatal (_("can't write %s: %s"), stdoutput->filename,
+                   as_fatal (_("can't fill %ld bytes in section %s of %s because '%s'"),
+                             (long) fill_size, sec->name,
+                             stdoutput->filename,
                              bfd_errmsg (bfd_get_error ()));
                  offset += fill_size;
                }
@@ -1637,7 +1638,8 @@ write_contents (bfd *abfd ATTRIBUTE_UNUSED,
                    (stdoutput, sec, buf, (file_ptr) offset,
                     (bfd_size_type) n_per_buf * fill_size);
                  if (!x)
-                   as_fatal (_("cannot write to output file '%s': %s"),
+                   as_fatal (_("cannot fill %ld bytes in section %s of %s because: '%s'"),
+                             (long)(n_per_buf * fill_size), sec->name,
                              stdoutput->filename,
                              bfd_errmsg (bfd_get_error ()));
                  offset += n_per_buf * fill_size;
@@ -2204,12 +2206,23 @@ write_object_file (void)
   obj_frob_file_after_relocs ();
 #endif
 
+#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
+  if (IS_ELF && flag_use_elf_stt_common)
+    stdoutput->flags |= BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON;
+#endif
+
   /* Once all relocations have been written, we can compress the
      contents of the debug sections.  This needs to be done before
      we start writing any sections, because it will affect the file
      layout, which is fixed once we start writing contents.  */
   if (flag_compress_debug)
-    bfd_map_over_sections (stdoutput, compress_debug, (char *) 0);
+    {
+      if (flag_compress_debug == COMPRESS_DEBUG_GABI_ZLIB)
+       stdoutput->flags |= BFD_COMPRESS | BFD_COMPRESS_GABI;
+      else
+       stdoutput->flags |= BFD_COMPRESS;
+      bfd_map_over_sections (stdoutput, compress_debug, (char *) 0);
+    }
 
   bfd_map_over_sections (stdoutput, write_contents, (char *) 0);
 }
This page took 0.026146 seconds and 4 git commands to generate.