2001-12-18 Michael Snyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Wed, 19 Dec 2001 05:18:34 +0000 (05:18 +0000)
committerMichael Snyder <msnyder@vmware.com>
Wed, 19 Dec 2001 05:18:34 +0000 (05:18 +0000)
        * objcopy.c (copy_file): Accept corefiles (format bfd_core).
        (copy_object): Don't set the start address or flags of a core file.
        (copy_section): Don't relocate a core file.  Don't copy contents
        if the input section has the contents flag set, but the output
        section does not (which happens with the fake 'note' pseudo-
        sections that BFD creates for corefiles).

binutils/ChangeLog
binutils/objcopy.c

index 630202f16922bef11a8b70b8e39d89ceedbc93ee..de70a2ad3d914883ddb66903f4a0ffdd8057c378 100644 (file)
@@ -1,3 +1,12 @@
+2001-12-18  Michael Snyder  <msnyder@redhat.com>
+
+       * objcopy.c (copy_file): Accept corefiles (format bfd_core).
+       (copy_object): Don't set the start address or flags of a core file.
+       (copy_section): Don't relocate a core file.  Don't copy contents
+       if the input section has the contents flag set, but the output
+       section does not (which happens with the fake 'note' pseudo-
+       sections that BFD creates for corefiles).
+
 2001-12-18  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
 
        * readelf.c (get_machine_flags): Recognize header flags for ABI and
index 9a5971dacd31907a90ace07d37e998b39a7c1a63..ddd01978389ceccc06ea6b0b7f77b75ebbaf36c8 100644 (file)
@@ -958,11 +958,16 @@ copy_object (ibfd, obfd)
     start = bfd_get_start_address (ibfd);
   start += change_start;
 
-  if (!bfd_set_start_address (obfd, start)
-      || !bfd_set_file_flags (obfd,
-                             (bfd_get_file_flags (ibfd)
-                              & bfd_applicable_file_flags (obfd))))
-    RETURN_NONFATAL (bfd_get_filename (ibfd));
+  /* Neither the start address nor the flags 
+     need to be set for a core file. */
+  if (bfd_get_format (obfd) != bfd_core)
+    {
+      if (!bfd_set_start_address (obfd, start)
+         || !bfd_set_file_flags (obfd,
+                                 (bfd_get_file_flags (ibfd)
+                                  & bfd_applicable_file_flags (obfd))))
+       RETURN_NONFATAL (bfd_get_filename (ibfd));
+    }
 
   /* Copy architecture of input file to output file.  */
   if (!bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
@@ -1403,7 +1408,8 @@ copy_file (input_filename, output_filename, input_target, output_target)
 
       copy_archive (ibfd, obfd, output_target);
     }
-  else if (bfd_check_format_matches (ibfd, bfd_object, &matching))
+  else if (bfd_check_format_matches (ibfd, bfd_object, &matching)
+          || bfd_check_format_matches (ibfd, bfd_core, &matching))
     {
       bfd *obfd;
 
@@ -1674,7 +1680,12 @@ copy_section (ibfd, isection, obfdarg)
   if (size == 0 || osection == 0)
     return;
 
-  relsize = bfd_get_reloc_upper_bound (ibfd, isection);
+  /* Core files do not need to be relocated. */
+  if (bfd_get_format (obfd) == bfd_core)
+    relsize = 0;
+  else
+    relsize = bfd_get_reloc_upper_bound (ibfd, isection);
+
   if (relsize < 0)
     RETURN_NONFATAL (bfd_get_filename (ibfd));
 
@@ -1713,7 +1724,8 @@ copy_section (ibfd, isection, obfdarg)
   isection->_cooked_size = isection->_raw_size;
   isection->reloc_done = true;
 
-  if (bfd_get_section_flags (ibfd, isection) & SEC_HAS_CONTENTS)
+  if (bfd_get_section_flags (ibfd, isection) & SEC_HAS_CONTENTS 
+      && bfd_get_section_flags (obfd, osection) & SEC_HAS_CONTENTS)
     {
       PTR memhunk = (PTR) xmalloc ((unsigned) size);