diff options
author | Ken Raeburn <raeburn@cygnus> | 1992-10-09 04:51:32 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@cygnus> | 1992-10-09 04:51:32 +0000 |
commit | 0256270d646c14bc4e75322b48338ba571f89a89 (patch) | |
tree | d6c8f90dd462bccb408b86bf1d6f87e853d89b81 /gdb/remote-nindy.c | |
parent | 439a4936c31d03a62b5b71468e803b44190cdb71 (diff) | |
download | gdb-0256270d646c14bc4e75322b48338ba571f89a89.zip gdb-0256270d646c14bc4e75322b48338ba571f89a89.tar.gz gdb-0256270d646c14bc4e75322b48338ba571f89a89.tar.bz2 |
* remote-nindy.c (nindy_load): Replacement version from Steve
Chamberlain, doesn't require forking to run "strip" or "sx".
Diffstat (limited to 'gdb/remote-nindy.c')
-rw-r--r-- | gdb/remote-nindy.c | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/gdb/remote-nindy.c b/gdb/remote-nindy.c index 2fc965f..0840bb6 100644 --- a/gdb/remote-nindy.c +++ b/gdb/remote-nindy.c @@ -276,41 +276,41 @@ nindy_load( filename, from_tty ) char *filename; int from_tty; { - char *tmpfile; - struct cleanup *old_chain; - char *scratch_pathname; - int scratch_chan; - - if (!filename) - filename = get_exec_file (1); - - filename = tilde_expand (filename); - make_cleanup (free, filename); - - scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0, - &scratch_pathname); - if (scratch_chan < 0) - perror_with_name (filename); - close (scratch_chan); /* Slightly wasteful FIXME */ - - have_regs = regs_changed = 0; - mark_breakpoints_out(); - inferior_pid = 0; - dcache_flush(); - - tmpfile = coffstrip(scratch_pathname); - if ( tmpfile ){ - old_chain = make_cleanup (unlink,tmpfile); - immediate_quit++; - ninDownload( tmpfile, !from_tty ); -/* FIXME, don't we want this merged in here? */ - immediate_quit--; - do_cleanups (old_chain); + 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); } - - /* Return the number of characters in the buffer before the first DLE character. */ @@ -941,8 +941,8 @@ specified when you started GDB.", 0, /* lookup_symbol */ nindy_create_inferior, nindy_mourn_inferior, - 0, /* can_run */ - 0, /* notice_signals */ + 0, /* can_run */ + 0, /* notice_signals */ process_stratum, 0, /* next */ 1, 1, 1, 1, 1, /* all mem, mem, stack, regs, exec */ 0, 0, /* Section pointers */ |