diff options
author | Alan Modra <amodra@gmail.com> | 2004-01-02 22:54:47 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2004-01-02 22:54:47 +0000 |
commit | 5e675b72e4c73a88a7eb08795b22ab9406a3cce4 (patch) | |
tree | f9ddbf483468d9ef88aadf6f13b8a6fa8574028d /binutils/objcopy.c | |
parent | ede47fe9021c5e5a7a71ed1da59604c978f4ba4b (diff) | |
download | gdb-5e675b72e4c73a88a7eb08795b22ab9406a3cce4.zip gdb-5e675b72e4c73a88a7eb08795b22ab9406a3cce4.tar.gz 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/objcopy.c')
-rw-r--r-- | binutils/objcopy.c | 32 |
1 files changed, 13 insertions, 19 deletions
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)); |