This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] initialize err variable in load_section_callback()


Theodore A. Roth wrote:
Hi,

I just encountered a problem with using the "load" command with a remote
avr target. The first packet would be sent to the remote target and then
gdb would just give up with this error message:

  (gdb) load
  Loading section .text, size 0x1f8 lma 0x0
  Sending packet: $M0,a:0c9446000c9463000c94#d7...Ack
  Packet received: OK
  Memory access error while loading section .text.

It looks like load_section_callback() in symfile.c is assuming that a
call to target_write_memory_partial() will set the err variable.
Unfortunately, that is not a valid assumption.

The attached patch got things working again, but this feels like a hack
to me since target_write_memory_partial() should really be setting err
to a sane value before returning.

Patch is against today's cvs mainline.

Here's the contract: /* Make a single attempt at transfering LEN bytes. On a successful transfer, the number of bytes actually transfered is returned and ERR is set to 0. When a transfer fails, -1 is returned (the number of bytes actually transfered is not defined) and ERR is set to a non-zero error indication. */ So the bug is further down the target stack.

Andrew

2004-10-19 Theodore A. Roth <troth@openavr.org>

	* symfile.c (load_section_callback): Initialize err to zero since
	target_write_memory_partial() may not set it in all situations.

Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.143
diff -u -p -p -r1.143 symfile.c
--- symfile.c 1 Oct 2004 10:23:09 -0000 1.143
+++ symfile.c 19 Oct 2004 20:07:58 -0000
@@ -1405,7 +1405,7 @@ load_section_callback (bfd *abfd, asecti
struct cleanup *old_chain;
CORE_ADDR lma = bfd_section_lma (abfd, asec) + args->load_offset;
bfd_size_type block_size;
- int err;
+ int err = 0;
const char *sect_name = bfd_get_section_name (abfd, asec);
bfd_size_type sent;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]