From: Steve Chamberlain Date: Mon, 15 Nov 1993 23:21:29 +0000 (+0000) Subject: * remote-utils.c, remote-utils.h (gr_load_image): New function to X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bf2429ab86d69f5bfe715c6272e2999575df587f;p=binutils-gdb.git * remote-utils.c, remote-utils.h (gr_load_image): New function to download to target. --- diff --git a/gdb/remote-utils.c b/gdb/remote-utils.c index 5189bbdafc2..95043202bc1 100644 --- a/gdb/remote-utils.c +++ b/gdb/remote-utils.c @@ -37,8 +37,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ * a pass through mode a la kermit or telnet. * autobaud. * ask remote to change his baud rate. - * put generic load here. - */ #include @@ -620,6 +618,63 @@ gr_store_word (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 _initialize_sr_support () {