aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2004-01-02 22:54:47 +0000
committerAlan Modra <amodra@gmail.com>2004-01-02 22:54:47 +0000
commit5e675b72e4c73a88a7eb08795b22ab9406a3cce4 (patch)
treef9ddbf483468d9ef88aadf6f13b8a6fa8574028d /binutils
parentede47fe9021c5e5a7a71ed1da59604c978f4ba4b (diff)
downloadfsf-binutils-gdb-5e675b72e4c73a88a7eb08795b22ab9406a3cce4.zip
fsf-binutils-gdb-5e675b72e4c73a88a7eb08795b22ab9406a3cce4.tar.gz
fsf-binutils-gdb-5e675b72e4c73a88a7eb08795b22ab9406a3cce4.tar.bz2
* objcopy.c (filter_bytes): Delete. Move code to..
(copy_section): ..here. Simplify size adjustment. Divide section lma by interleave.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/objcopy.c32
2 files changed, 19 insertions, 19 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 09a0d42..d2a65c6 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-03 Alan Modra <amodra@bigpond.net.au>
+
+ * objcopy.c (filter_bytes): Delete. Move code to..
+ (copy_section): ..here. Simplify size adjustment. Divide
+ section lma by interleave.
+
2004-01-02 Nick Clifton <nickc@redhat.com>
* po/ru.po: New file: Russian translation.
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index ac60cb1..32a1b7b 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1,6 +1,6 @@
/* objcopy.c -- copy object file from input to output, optionally massaging it.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003
+ 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -1084,23 +1084,6 @@ add_redefine_syms_file (const char *filename)
free (buf);
}
-/* Keep only every `copy_byte'th byte in MEMHUNK, which is *SIZE bytes long.
- Adjust *SIZE. */
-
-static void
-filter_bytes (char *memhunk, bfd_size_type *size)
-{
- char *from = memhunk + copy_byte, *to = memhunk, *end = memhunk + *size;
-
- for (; from < end; from += interleave)
- *to++ = *from;
-
- if (*size % interleave > (bfd_size_type) copy_byte)
- *size = (*size / interleave) + 1;
- else
- *size /= interleave;
-}
-
/* Copy object file IBFD onto OBFD. */
static void
@@ -2003,7 +1986,18 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
RETURN_NONFATAL (bfd_get_filename (ibfd));
if (copy_byte >= 0)
- filter_bytes (memhunk, &size);
+ {
+ /* Keep only every `copy_byte'th byte in MEMHUNK. */
+ char *from = memhunk + copy_byte;
+ char *to = memhunk;
+ char *end = memhunk + size;
+
+ for (; from < end; from += interleave)
+ *to++ = *from;
+
+ size = (size + interleave - 1 - copy_byte) / interleave;
+ osection->lma /= interleave;
+ }
if (!bfd_set_section_contents (obfd, osection, memhunk, 0, size))
RETURN_NONFATAL (bfd_get_filename (obfd));