+2023-05-03  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+
+       * archive.c (_bfd_write_archive_contents): Use a larger buffer in
+       order to improve efficiency.
+
 2023-05-03  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
 
        * coffcode.h (coff_read_word_from_buffer): New function.
 
   bfd_size_type wrote;
   int tries;
   char *armag;
+  char *buffer = NULL;
 
   /* Verify the viability of all entries; if any of them live in the
      filesystem (as opposed to living in an archive open for input)
        }
     }
 
+#define AR_WRITE_BUFFERSIZE (DEFAULT_BUFFERSIZE * 1024)
+
+  /* FIXME: Find a way to test link_info.reduce_memory_overheads
+     and change the buffer size.  */
+  buffer = bfd_malloc (AR_WRITE_BUFFERSIZE);
+  if (buffer == NULL)
+    goto input_err;
+
   for (current = arch->archive_head;
        current != NULL;
        current = current->archive_next)
     {
-      char buffer[DEFAULT_BUFFERSIZE];
       bfd_size_type remaining = arelt_size (current);
 
       /* Write ar header.  */
       if (!_bfd_write_ar_hdr (arch, current))
-       return false;
+       goto input_err;
       if (bfd_is_thin_archive (arch))
        continue;
       if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
 
       while (remaining)
        {
-         size_t amt = DEFAULT_BUFFERSIZE;
+         size_t amt = AR_WRITE_BUFFERSIZE;
 
          if (amt > remaining)
            amt = remaining;
          if (bfd_bread (buffer, amt, current) != amt)
            goto input_err;
          if (bfd_bwrite (buffer, amt, arch) != amt)
-           return false;
+           goto input_err;
          remaining -= amt;
        }
 
       if ((arelt_size (current) % 2) == 1)
        {
          if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1)
-           return false;
+           goto input_err;
        }
     }
 
+  free (buffer);
+
   if (makemap && hasobjects)
     {
       /* Verify the timestamp in the archive file.  If it would not be
 
  input_err:
   bfd_set_input_error (current, bfd_get_error ());
+  free (buffer);
   return false;
 }
 \f