diff options
author | Kung Hsu <kung@cygnus> | 1995-06-23 18:54:56 +0000 |
---|---|---|
committer | Kung Hsu <kung@cygnus> | 1995-06-23 18:54:56 +0000 |
commit | 8a7143f461b36ad82db0d8880f0e2690206b631f (patch) | |
tree | 6c184e3be51c7a38e9673738671b7d283864f7b8 /gdb/remote-nindy.c | |
parent | 31bda44a6dcd39af8883880fb0d266b4beec3290 (diff) | |
download | gdb-8a7143f461b36ad82db0d8880f0e2690206b631f.zip gdb-8a7143f461b36ad82db0d8880f0e2690206b631f.tar.gz gdb-8a7143f461b36ad82db0d8880f0e2690206b631f.tar.bz2 |
* remote-nindy (nindy_load): Put in target specific load, it's
20 times faster.
Diffstat (limited to 'gdb/remote-nindy.c')
-rw-r--r-- | gdb/remote-nindy.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/gdb/remote-nindy.c b/gdb/remote-nindy.c index 0fcaf2f..1ced9cc 100644 --- a/gdb/remote-nindy.c +++ b/gdb/remote-nindy.c @@ -675,6 +675,46 @@ nindy_open_stub (arg) return 1; } +static void +nindy_load( filename, from_tty ) + char *filename; + int from_tty; +{ + asection *s; + /* Can't do unix style forking on a VMS system, so we'll use bfd to do + all the work for us + */ + + bfd *file = bfd_openr(filename,0); + if (!file) + { + perror_with_name(filename); + return; + } + + if (!bfd_check_format(file, bfd_object)) + { + error("can't prove it's an object file\n"); + return; + } + + for ( s = file->sections; s; s=s->next) + { + if (s->flags & SEC_LOAD) + { + char *buffer = xmalloc(s->_raw_size); + bfd_get_section_contents(file, s, buffer, 0, s->_raw_size); + printf("Loading section %s, size %x vma %x\n", + s->name, + s->_raw_size, + s->vma); + ninMemPut(s->vma, buffer, s->_raw_size); + free(buffer); + } + } + bfd_close(file); +} + static int load_stub (arg) char *arg; @@ -754,7 +794,7 @@ specified when you started GDB.", memory_remove_breakpoint, 0, 0, 0, 0, 0, /* Terminal crud */ nindy_kill, - generic_load, + nindy_load, 0, /* lookup_symbol */ nindy_create_inferior, nindy_mourn_inferior, |