2007-07-18 Roland McGrath <roland@redhat.com>
authorRoland McGrath <roland@gnu.org>
Wed, 18 Jul 2007 09:46:05 +0000 (09:46 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 18 Jul 2007 09:46:05 +0000 (09:46 +0000)
* emultempl/elf32.em (gld${EMULATION_NAME}_write_build_id_section):
Use ASEC->contents for CONTENTS when missing, and allocate
ASEC->size if needed.

ld/emultempl/elf32.em

index ee34e3f..a3af5ca 100644 (file)
@@ -945,12 +945,12 @@ gld${EMULATION_NAME}_write_build_id_section (bfd *abfd)
 
   if (i_shdr->contents == NULL)
     {
-      ASSERT (asec->output_offset == 0);
-      i_shdr->contents = xcalloc (i_shdr->sh_size, 1);
-      if (i_shdr->contents == NULL)
-       return FALSE;
+      if (asec->contents == NULL)
+       asec->contents = xmalloc (asec->size);
+      contents = asec->contents;
     }
-  contents = i_shdr->contents + asec->output_offset;
+  else
+    contents = i_shdr->contents + asec->output_offset;
 
   e_note = (void *) contents;
   size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
@@ -1019,9 +1019,10 @@ gld${EMULATION_NAME}_write_build_id_section (bfd *abfd)
   else
     abort ();                  /* Should have been validated earlier.  */
 
-  size = i_shdr->sh_size;
-  return (bfd_seek (abfd, i_shdr->sh_offset, SEEK_SET) == 0
-         && bfd_bwrite (i_shdr->contents, size, abfd) == size);
+  size = asec->size;
+  return (bfd_seek (abfd,
+                   i_shdr->sh_offset + asec->output_offset, SEEK_SET) == 0
+         && bfd_bwrite (contents, size, abfd) == size);
 }