From 4dd67f29188d3bfefaebff926310e40b0a710bc8 Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Wed, 19 Dec 2001 05:18:34 +0000 Subject: [PATCH] 2001-12-18 Michael Snyder * 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 | 9 +++++++++ binutils/objcopy.c | 28 ++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 630202f1692..de70a2ad3d9 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +2001-12-18 Michael Snyder + + * 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 * readelf.c (get_machine_flags): Recognize header flags for ABI and diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 9a5971dacd3..ddd01978389 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -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); -- 2.30.2