diff options
author | Nick Clifton <nickc@redhat.com> | 2002-04-16 10:18:14 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2002-04-16 10:18:14 +0000 |
commit | 36ebab424664f0efa2e5a69aafe1047b8bad25a3 (patch) | |
tree | df99b3f3059ff1ceb6ea00acf3816b72704b6e76 /bfd/ihex.c | |
parent | 07fa41587653e9d99d541ad6fb104fb33b05d426 (diff) | |
download | gdb-36ebab424664f0efa2e5a69aafe1047b8bad25a3.tar.gz |
Fix test for records crossing a 64K boundary
Diffstat (limited to 'bfd/ihex.c')
-rw-r--r-- | bfd/ihex.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/bfd/ihex.c b/bfd/ihex.c index 64f9fc7d931..0aad1649d52 100644 --- a/bfd/ihex.c +++ b/bfd/ihex.c @@ -3,21 +3,21 @@ Free Software Foundation, Inc. Written by Ian Lance Taylor of Cygnus Support <ian@cygnus.com>. -This file is part of BFD, the Binary File Descriptor library. + This file is part of BFD, the Binary File Descriptor library. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This is what Intel Hex files look like: @@ -147,12 +147,12 @@ static int ihex_sizeof_headers PARAMS ((bfd *, boolean)); #define CHUNK 16 -/* Macros for converting between hex and binary. */ +/* Macros for converting between hex and binary. */ -#define NIBBLE(x) (hex_value (x)) +#define NIBBLE(x) (hex_value (x)) #define HEX2(buffer) ((NIBBLE ((buffer)[0]) << 4) + NIBBLE ((buffer)[1])) #define HEX4(buffer) ((HEX2 (buffer) << 8) + HEX2 ((buffer) + 2)) -#define ISHEX(x) (hex_p (x)) +#define ISHEX(x) (hex_p (x)) /* When we write out an ihex value, the values can not be output as they are seen. Instead, we hold them in memory in this structure. */ @@ -288,6 +288,7 @@ ihex_scan (abfd) lineno = 1; error = false; bufsize = 0; + while ((c = ihex_get_byte (abfd, &error)) != EOF) { if (c == '\r') @@ -314,11 +315,9 @@ ihex_scan (abfd) unsigned int chksum; /* This is a data record. */ - pos = bfd_tell (abfd) - 1; /* Read the header bytes. */ - if (bfd_bread (hdr, (bfd_size_type) 8, abfd) != 8) goto error_return; @@ -336,7 +335,6 @@ ihex_scan (abfd) type = HEX2 (hdr + 6); /* Read the data bytes. */ - chars = len * 2 + 2; if (chars >= bufsize) { @@ -553,7 +551,6 @@ ihex_object_p (abfd) } /* OK, it looks like it really is an Intel Hex file. */ - if (! ihex_mkobject (abfd) || ! ihex_scan (abfd)) return NULL; @@ -875,8 +872,8 @@ ihex_write_object_contents (abfd) rec_addr = where - (extbase + segbase); /* Output records shouldn't cross 64K boundaries. */ - if (rec_addr + now > 0xfffff) - now = 0xffff - rec_addr; + if (rec_addr + now > 0xffff) + now = 0x10000 - rec_addr; if (! ihex_write_record (abfd, now, rec_addr, 0, p)) return false; |