Blob


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