* linker.c (default_fill_link_order): Handle four byte fill value.
authorAlan Modra <amodra@gmail.com>
Fri, 17 Aug 2001 09:50:05 +0000 (09:50 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 17 Aug 2001 09:50:05 +0000 (09:50 +0000)
bfd/ChangeLog
bfd/linker.c

index 93d76d8..93af021 100644 (file)
@@ -1,5 +1,9 @@
 2001-08-17  Alan Modra  <amodra@bigpond.net.au>
 
+       * linker.c (default_fill_link_order): Handle four byte fill value.
+
+2001-08-17  Alan Modra  <amodra@bigpond.net.au>
+
        * elf64-sparc.c (sparc64_elf_output_arch_syms): Add missing
        prototype.
        * nlm32-alpha.c (nlm_alpha_write_external): Fix warning.
@@ -31,6 +35,8 @@
        (elfNN_ia64_relocate_section): Fix warning.
        (elfNN_ia64_unwind_entry_compare): Make params const.
 
+2001-08-17  Alan Modra  <amodra@bigpond.net.au>
+
        * config.bfd (targ64_selvecs): New.
        <powerpc-*-aix* entry>: Use it here instead of ineffectual #ifdef.
 
@@ -43,6 +49,8 @@
        * bfd-in2.h: Regenerate.
        * configure: Regenerate.
 
+2001-08-17  Alan Modra  <amodra@bigpond.net.au>
+
        * bfd.c (enum bfd_error): Add bfd_error_wrong_object_format.
        (bfd_errmsgs): Add corresponding message.
        * archive.c (bfd_generic_archive_p): Don't release bfd_ardata when
index 1144e92..00389ac 100644 (file)
@@ -2655,28 +2655,35 @@ default_fill_link_order (abfd, info, sec, link_order)
      struct bfd_link_order *link_order;
 {
   size_t size;
-  char *space;
+  unsigned char *space;
   size_t i;
-  int fill;
+  unsigned int fill;
+  file_ptr loc;
   boolean result;
 
   BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0);
 
   size = (size_t) link_order->size;
-  space = (char *) bfd_malloc (size);
-  if (space == NULL && size != 0)
+  if (size == 0)
+    return true;
+
+  space = (unsigned char *) bfd_malloc (size);
+  if (space == NULL)
     return false;
 
   fill = link_order->u.fill.value;
-  for (i = 0; i < size; i += 2)
+  for (i = 0; i < size; i += 4)
+    space[i] = fill >> 24;
+  for (i = 1; i < size; i += 4)
+    space[i] = fill >> 16;
+  for (i = 2; i < size; i += 4)
     space[i] = fill >> 8;
-  for (i = 1; i < size; i += 2)
+  for (i = 3; i < size; i += 4)
     space[i] = fill;
-  result = bfd_set_section_contents (abfd, sec, space,
-                                    (file_ptr)
-                                     (link_order->offset *
-                                      bfd_octets_per_byte (abfd)),
-                                    link_order->size);
+
+  loc = (file_ptr) (link_order->offset * bfd_octets_per_byte (abfd));
+  result = bfd_set_section_contents (abfd, sec, space, loc, link_order->size);
+
   free (space);
   return result;
 }