aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote-nindy.c
diff options
context:
space:
mode:
authorKung Hsu <kung@cygnus>1995-06-23 18:54:56 +0000
committerKung Hsu <kung@cygnus>1995-06-23 18:54:56 +0000
commit8a7143f461b36ad82db0d8880f0e2690206b631f (patch)
tree6c184e3be51c7a38e9673738671b7d283864f7b8 /gdb/remote-nindy.c
parent31bda44a6dcd39af8883880fb0d266b4beec3290 (diff)
downloadfsf-binutils-gdb-8a7143f461b36ad82db0d8880f0e2690206b631f.zip
fsf-binutils-gdb-8a7143f461b36ad82db0d8880f0e2690206b631f.tar.gz
fsf-binutils-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.c42
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,