mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 13:23:10 +08:00
* remote-utils.c, remote-utils.h (gr_load_image): New function to
download to target.
This commit is contained in:
@ -37,8 +37,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||||||
* a pass through mode a la kermit or telnet.
|
* a pass through mode a la kermit or telnet.
|
||||||
* autobaud.
|
* autobaud.
|
||||||
* ask remote to change his baud rate.
|
* ask remote to change his baud rate.
|
||||||
* put generic load here.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -620,6 +618,63 @@ gr_store_word (addr, word)
|
|||||||
dcache_poke (gr_get_dcache(), addr, word);
|
dcache_poke (gr_get_dcache(), addr, word);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* general purpose load a file specified on the command line
|
||||||
|
into target memory. */
|
||||||
|
|
||||||
|
void
|
||||||
|
gr_load_image (args, fromtty)
|
||||||
|
char *args;
|
||||||
|
int fromtty;
|
||||||
|
{
|
||||||
|
bfd *abfd;
|
||||||
|
|
||||||
|
asection *s;
|
||||||
|
struct cleanup *old_cleanups;
|
||||||
|
int delta = 4096;
|
||||||
|
char *buffer = xmalloc (delta);
|
||||||
|
|
||||||
|
abfd = bfd_openr (args, (char *) 0);
|
||||||
|
|
||||||
|
if (!abfd)
|
||||||
|
perror_with_name (args);
|
||||||
|
|
||||||
|
old_cleanups = make_cleanup (bfd_close, abfd);
|
||||||
|
|
||||||
|
QUIT;
|
||||||
|
immediate_quit++;
|
||||||
|
|
||||||
|
if (!bfd_check_format (abfd, bfd_object))
|
||||||
|
error ("It doesn't seem to be an object file.\n");
|
||||||
|
|
||||||
|
for (s = abfd->sections; s; s = s->next)
|
||||||
|
{
|
||||||
|
if (bfd_get_section_flags (abfd, s) & SEC_LOAD)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf_filtered ("%s\t: 0x%4x .. 0x%4x ",
|
||||||
|
s->name, s->vma, s->vma + s->_raw_size);
|
||||||
|
for (i = 0; i < s->_raw_size; i += delta)
|
||||||
|
{
|
||||||
|
int sub_delta = delta;
|
||||||
|
if (sub_delta > s->_raw_size - i)
|
||||||
|
sub_delta = s->_raw_size - i;
|
||||||
|
|
||||||
|
bfd_get_section_contents (abfd, s, buffer, i, sub_delta);
|
||||||
|
target_write_memory (s->vma + i, buffer, sub_delta);
|
||||||
|
printf_filtered ("*");
|
||||||
|
fflush (stdout);
|
||||||
|
}
|
||||||
|
printf_filtered ("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
immediate_quit--;
|
||||||
|
free (buffer);
|
||||||
|
write_pc (bfd_get_start_address (abfd));
|
||||||
|
bfd_close (abfd);
|
||||||
|
discard_cleanups (old_cleanups);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_sr_support ()
|
_initialize_sr_support ()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user