main.c (1437B)
1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <mach.h> 5 #include "dat.h" 6 7 int verbose; 8 9 void 10 usage(void) 11 { 12 fprint(2, "usage: acidtypes [-v] [-p prefix] executable...\n"); 13 exits("usage"); 14 } 15 16 void 17 main(int argc, char **argv) 18 { 19 int i, have; 20 Fhdr *fp; 21 Biobuf b; 22 char err[ERRMAX]; 23 24 quotefmtinstall(); 25 fmtinstall('B', Bfmt); 26 27 ARGBEGIN{ 28 case 'v': 29 verbose = 1; 30 break; 31 case 'p': 32 prefix = EARGF(usage()); 33 break; 34 default: 35 usage(); 36 }ARGEND 37 38 if(argc < 1) 39 usage(); 40 41 Binit(&b, 1, OWRITE); 42 for(i=0; i<argc; i++){ 43 Bprint(&b, "\n//\n// symbols for %s\n//\n\n", argv[i]); 44 if((fp = crackhdr(argv[i], OREAD)) == nil){ 45 rerrstr(err, sizeof err); 46 Bprint(&b, "// open %s: %s\n\n", argv[i], err); 47 fprint(2, "open %s: %s\n", argv[i], err); 48 continue; 49 } 50 have = 0; 51 if(fp->dwarf){ 52 if(dwarf2acid(fp->dwarf, &b) < 0){ 53 rerrstr(err, sizeof err); 54 Bprint(&b, "// dwarf2acid %s: %s\n\n", argv[i], err); 55 fprint(2, "dwarf2acid %s: %s\n", argv[i], err); 56 } 57 have = 1; 58 } 59 if(fp->stabs.stabbase){ 60 if(stabs2acid(&fp->stabs, &b) < 0){ 61 rerrstr(err, sizeof err); 62 Bprint(&b, "// dwarf2acid %s: %s\n\n", argv[i], err); 63 fprint(2, "dwarf2acid %s: %s\n", argv[i], err); 64 } 65 have = 1; 66 } 67 68 if(!have){ 69 Bprint(&b, "// no debugging symbols in %s\n\n", argv[i]); 70 /* fprint(2, "no debugging symbols in %s\n", argv[i]); */ 71 } 72 uncrackhdr(fp); 73 } 74 Bflush(&b); 75 Bterm(&b); 76 exits(0); 77 }