mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 10:09:16 +08:00
2000-11-10 J.T. Conklin <jtc@redback.com>
* target.c (do_xfer_memory): Only perform a single memory transfer instead of iterating to tranfer the entire region. Higher layers are expected to call this function multiple times for partial transfers. (target_xfer_memory_partial): Remove unused local variables. 2000-11-10 Nick Duffek <nsd@redhat.com> * target.c (target_xfer_memory_partial): Return bytes transferred instead of 0.
This commit is contained in:
@ -1,3 +1,16 @@
|
||||
2000-11-10 J.T. Conklin <jtc@redback.com>
|
||||
|
||||
* target.c (do_xfer_memory): Only perform a single memory transfer
|
||||
instead of iterating to tranfer the entire region. Higher layers
|
||||
are expected to call this function multiple times for partial
|
||||
transfers.
|
||||
(target_xfer_memory_partial): Remove unused local variables.
|
||||
|
||||
2000-11-10 Nick Duffek <nsd@redhat.com>
|
||||
|
||||
* target.c (target_xfer_memory_partial): Return bytes transferred
|
||||
instead of 0.
|
||||
|
||||
2000-11-09 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* values.c (value_being_returned, using_struct_return): Protoize.
|
||||
|
51
gdb/target.c
51
gdb/target.c
@ -837,15 +837,10 @@ target_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
|
||||
return target_xfer_memory (memaddr, myaddr, len, 1);
|
||||
}
|
||||
|
||||
/* Move memory to or from the targets. Iterate until all of it has
|
||||
been moved, if necessary. The top target gets priority; anything
|
||||
it doesn't want, is offered to the next one down, etc. Note the
|
||||
business with curlen: if an early target says "no, but I have a
|
||||
boundary overlapping this xfer" then we shorten what we offer to
|
||||
the subsequent targets so the early guy will get a chance at the
|
||||
tail before the subsequent ones do.
|
||||
/* Move memory to or from the targets. The top target gets priority;
|
||||
if it cannot handle it, it is offered to the next one down, etc.
|
||||
|
||||
Result is 0 or errno value. */
|
||||
Result is -1 on error, or the number of bytes transfered. */
|
||||
|
||||
int
|
||||
do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
|
||||
@ -863,17 +858,12 @@ do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
|
||||
0. */
|
||||
errno = 0;
|
||||
|
||||
/* The quick case is that the top target does it all. */
|
||||
/* The quick case is that the top target can handle the transfer. */
|
||||
res = current_target.to_xfer_memory
|
||||
(memaddr, myaddr, len, write, ¤t_target);
|
||||
if (res == len)
|
||||
return len;
|
||||
|
||||
if (res > 0)
|
||||
goto bump;
|
||||
/* If res <= 0 then we call it again in the loop. Ah well. */
|
||||
|
||||
while (len > 0)
|
||||
/* If res <= 0 then we call it again in the loop. Ah well. */
|
||||
if (res <= 0)
|
||||
{
|
||||
for (item = target_stack; item; item = item->next)
|
||||
{
|
||||
@ -889,19 +879,18 @@ do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
|
||||
}
|
||||
|
||||
if (res <= 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
bump:
|
||||
done += res;
|
||||
memaddr += res;
|
||||
myaddr += res;
|
||||
len -= res;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return done;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/* Perform a memory transfer. Iterate until the entire region has
|
||||
been transfered.
|
||||
|
||||
Result is 0 or errno value. */
|
||||
|
||||
static int
|
||||
target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
|
||||
{
|
||||
@ -937,17 +926,15 @@ target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
|
||||
}
|
||||
|
||||
|
||||
/* Perform a partial memory transfer. */
|
||||
/* Perform a partial memory transfer.
|
||||
|
||||
Result is -1 on error, or the number of bytes transfered. */
|
||||
|
||||
static int
|
||||
target_xfer_memory_partial (CORE_ADDR memaddr, char *myaddr, int len,
|
||||
int write_p, int *err)
|
||||
{
|
||||
int res;
|
||||
int err_res;
|
||||
int len_res;
|
||||
struct target_ops *t;
|
||||
struct target_stack_item *item;
|
||||
|
||||
/* Zero length requests are ok and require no work. */
|
||||
if (len == 0)
|
||||
@ -968,7 +955,7 @@ target_xfer_memory_partial (CORE_ADDR memaddr, char *myaddr, int len,
|
||||
}
|
||||
|
||||
*err = 0;
|
||||
return 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
int
|
||||
|
Reference in New Issue
Block a user