bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Can't read srec files without an end record


From: Mike Ditto
Subject: Can't read srec files without an end record
Date: Thu, 11 Sep 2008 22:42:14 -0700
User-agent: Thunderbird 2.0.0.16 (X11/20080707)

In binutils 2.18, the 'srec' BFD file format does not handle EOF correctly.
This situation only comes up when the srec file does not contain an explicit
"end" record (S7, S8, or S9).

Here is a comparison of the native objdump on a RHEL system, which works OK on
such a file, and a host=i386-redhat-linux target=powerpc-linux cross objdump
built from binutils-2.18:


| $ cat test.srec
| S315000000000909090909090909444444444444444482
| S3150000001072727272727272724A4A4A4A4A4A4A4AFA
| $ objdump --version
| GNU objdump 2.14.90.0.4 20030523
| Copyright 2002 Free Software Foundation, Inc.
| This program is free software; you may redistribute it under the terms of
| the GNU General Public License.  This program has absolutely no warranty.
| $ xppc-objdump --version
| GNU objdump (GNU Binutils) 2.18
| Copyright 2007 Free Software Foundation, Inc.
| This program is free software; you may redistribute it under the terms of
| the GNU General Public License version 3 or (at your option) any later 
version.
| This program has absolutely no warranty.
| $ objdump -x test.srec
|
| test.srec:     file format srec
| test.srec
| architecture: UNKNOWN!, flags 0x00000000:
|
| start address 0x00000000
|
| Sections:
| Idx Name          Size      VMA       LMA       File off  Algn
|   0 .sec1         00000020  00000000  00000000  00000000  2**0
|                   CONTENTS, ALLOC, LOAD
| SYMBOL TABLE:
| no symbols
|
|
| $ xppc-objdump -x test.srec
| xppc-objdump: test.srec: File format not recognized

The problem appears to be caused by the function srec_get_byte assuming that
bfd_bread will set bfd_error to bfd_error_file_truncated when encountering EOF,
though bfd_bread does not always do that -- in some cases it leaves bfd_error
unchanged.

One fix, assuming that bfd_bread is correct and srec_get_byte is at fault, is
this:

*** binutils-2.18/bfd/ORIGsrec.c        2007-08-06 12:59:41.000000000 -0700
--- binutils-2.18/bfd/srec.c    2008-09-11 17:52:23.000000000 -0700
***************
*** 221,226 ****
--- 221,227 ----
  {
    bfd_byte c;

+   bfd_set_error (bfd_error_file_truncated);
    if (bfd_bread (&c, (bfd_size_type) 1, abfd) != 1)
      {
        if (bfd_get_error () != bfd_error_file_truncated)


--
                                        -=] Mike [=-




reply via email to

[Prev in Thread] Current Thread [Next in Thread]