Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <mach.h>
5 #include "dat.h"
7 int verbose;
9 void
10 usage(void)
11 {
12 fprint(2, "usage: acidtypes [-v] [-p prefix] executable...\n");
13 exits("usage");
14 }
16 void
17 main(int argc, char **argv)
18 {
19 int i, have;
20 Fhdr *fp;
21 Biobuf b;
22 char err[ERRMAX];
24 quotefmtinstall();
25 fmtinstall('B', Bfmt);
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
38 if(argc < 1)
39 usage();
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 }
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 }