Mercurial > emacs
view src/unexencap.c @ 1255:ff06503c93b4
* gud.el (gud-def): Doc fix.
(gud-gdb-marker-filter, gud-sdb-marker-filter,
gud-dbx-marker-filter): Rename the argument `s' or `str' to
`string', and change all uses; these definitions were referring to
`string', which is unbound in the lexical context, but which
happens to end up being bound to the right thing by the caller,
gud-filter.
(sdb): Set comint-prompt-regexp, not comint-prompt-pattern; the
latter doesn't exist.
(gud-dbx-debugger-setup): Use the argument `f', not the variable
`file', which happens to be bound in the caller.
(gud-filter-insert): The variable `start' is never used. The
variable `moving' is unnecessary. The variable `old-buffer' and
the unwind-protect form are unneeded, since save-excursion can do
their work. The binding of output-after-point should be done after
switching to the process's buffer, not in whatever random buffer
happens to be current when the process filter is called. There's
no need to set the process mark if we've just inserted at its
location using insert-before-markers.
(gud-read-address): Don't bother setting the variable `result'; it
is never used.
* gud.el (gud-mode-map): Bind gud-refresh to C-c C-l, not C-c l;
the latter is reserved for the user's purposes.
* gud.el (gdb, sdb, dbx): Use C-c C-r ("resume") for continuing,
instead of C-c C-c. C-c C-c should be comint-interrupt-subjob;
it's important to have that available, and the C-c C-c binding is
consistent with all the other comint-derived modes.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Tue, 29 Sep 1992 07:45:05 +0000 |
parents | 80cdb2387043 |
children |
line wrap: on
line source
/* Waiting for papers! */ /* * Do an unexec() for coff encapsulation. Uses the approach I took * for AKCL, so don't be surprised if it doesn't look too much like * the other unexec() routines. Assumes NO_REMAP. Should be easy to * adapt to the emacs style unexec() if that is desired, but this works * just fine for me with GCC/GAS/GLD under System V. - Jordan */ #include <sys/types.h> #include <sys/fcntl.h> #include <sys/file.h> #include <stdio.h> #include "/usr/gnu/lib/gcc/gcc-include/a.out.h" filecpy(to, from, n) FILE *to, *from; register int n; { char buffer[BUFSIZ]; for (;;) if (n > BUFSIZ) { fread(buffer, BUFSIZ, 1, from); fwrite(buffer, BUFSIZ, 1, to); n -= BUFSIZ; } else if (n > 0) { fread(buffer, 1, n, from); fwrite(buffer, 1, n, to); break; } else break; } /* **************************************************************** * unexec * * driving logic. * ****************************************************************/ unexec (new_name, a_name, data_start, bss_start, entry_address) char *new_name, *a_name; unsigned data_start, bss_start, entry_address; { struct coffheader header1; struct coffscn *tp, *dp, *bp; struct exec header; int stsize; char *original_file = a_name; char *save_file = new_name; char *data_begin, *data_end; int original_data; FILE *original, *save; register int n; register char *p; extern char *sbrk(); char stdin_buf[BUFSIZ], stdout_buf[BUFSIZ]; fclose(stdin); original = fopen(original_file, "r"); if (stdin != original || original->_file != 0) { fprintf(stderr, "unexec: Can't open the original file.\n"); exit(1); } setbuf(original, stdin_buf); fclose(stdout); unlink(save_file); n = open(save_file, O_CREAT|O_WRONLY, 0777); if (n != 1 || (save = fdopen(n, "w")) != stdout) { fprintf(stderr, "unexec: Can't open the save file.\n"); exit(1); } setbuf(save, stdout_buf); fread(&header1, sizeof(header1), 1, original); tp = &header1.scns[0]; dp = &header1.scns[1]; bp = &header1.scns[2]; fread(&header, sizeof(header), 1, original); data_begin=(char *)N_DATADDR(header); data_end = sbrk(0); original_data = header.a_data; header.a_data = data_end - data_begin; header.a_bss = 0; dp->s_size = header.a_data; bp->s_paddr = dp->s_vaddr + dp->s_size; bp->s_vaddr = bp->s_paddr; bp->s_size = 0; header1.tsize = tp->s_size; header1.dsize = dp->s_size; header1.bsize = bp->s_size; fwrite(&header1, sizeof(header1), 1, save); fwrite(&header, sizeof(header), 1, save); filecpy(save, original, header.a_text); for (n = header.a_data, p = data_begin; ; n -= BUFSIZ, p += BUFSIZ) if (n > BUFSIZ) fwrite(p, BUFSIZ, 1, save); else if (n > 0) { fwrite(p, 1, n, save); break; } else break; fseek(original, original_data, 1); filecpy(save, original, header.a_syms+header.a_trsize+header.a_drsize); fread(&stsize, sizeof(stsize), 1, original); fwrite(&stsize, sizeof(stsize), 1, save); filecpy(save, original, stsize - sizeof(stsize)); fclose(original); fclose(save); }