1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-01-13 07:20:16 +00:00

79 lines
1.6 KiB
C

#include "aout.h"
extern int load_a_out(const char *file, struct exec *E);
extern int printins(int addr);
extern void patch_symbols(void);
extern void print_symtables(void);
extern u_int8_t *ispace, *dspace; /* Instruction and Data spaces */
extern int doprint;
int onepass = 0; /* Only do a single pass */
int printaddrs = 0; /* Print out addresses and words */
void dopass(struct exec *e)
{
int i;
u_int16_t *iptr;
for (i = e->a_entry; i < e->a_entry + e->a_text;) {
iptr = (u_int16_t *) & ispace[i];
if (doprint && printaddrs)
printf("%06o: %06o\t", i, *iptr);
i += printins(i);
}
}
void usage()
{
fprintf(stderr, "Usage: disaout [-1a] file\n");
exit(1);
}
int main(int argc, char *argv[])
{
struct exec E;
int ch, err;
/* Get any arguments */
while ((ch = getopt(argc, argv, "1a")) != -1) {
switch (ch) {
case '1':
onepass = 1;
break;
case 'a':
printaddrs = 1;
break;
case '?':
default:
usage();
}
}
argc -= optind;
argv += optind;
/* Check we have an file to open */
if (argc != 1)
usage();
/* Get the header details for the a.out file */
err = load_a_out(argv[0], &E);
if (err == -1) {
fprintf(stderr, "%s does not appear to be a PDP-11 a.out file\n", argv[0]);
exit(1);
}
printf("/ text at 0%o, len 0%o, end 0%o\n",
E.a_entry, E.a_text, E.a_entry + E.a_text);
if (onepass == 0) {
doprint = 0;
dopass(&E); /* Do pass 1 to infer symbols */
patch_symbols();
/* print_symtables(); */
}
doprint = 1;
dopass(&E); /* Do pass 2 to print it out */
exit(0);
}