void initialize() { if (init>0) return; #ifdef _allow_cachefiles cachedir = makefullpath(ReadConf("bkz.conf","svpccache")); mkdirRecursive(cachedir.c_str(), 0777); #endif init = 1; }
int T_main(int argc, TCHAR* argv[]) { double Dversion = 2.043; const TCHAR* pdbref = 0; bool debug = false; while (argc > 1 && argv[1][0] == '-') { argv++; argc--; if (argv[0][1] == '-') break; if (argv[0][1] == 'D') Dversion = T_strtod(argv[0] + 2, 0); else if (argv[0][1] == 'C') Dversion = 0; else if (argv[0][1] == 'n') demangleSymbols = false; else if (argv[0][1] == 'e') useTypedefEnum = true; else if (argv[0][1] == 'd' && argv[0][2] == 'e' && argv[0][3] == 'b') // deb[ug] debug = true; else if (argv[0][1] == 's' && argv[0][2]) dotReplacementChar = (char)argv[0][2]; else if (argv[0][1] == 'p' && argv[0][2]) pdbref = argv[0] + 2; else fatal("unknown option: " SARG, argv[0]); } if (argc < 2) { printf("Convert DMD CodeView/DWARF debug information to PDB files, Version %g\n", VERSION); printf("Copyright (c) 2009-2012 by Rainer Schuetze, All Rights Reserved\n"); printf("\n"); printf("License for redistribution is given by the Artistic License 2.0\n"); printf("see file LICENSE for further details\n"); printf("\n"); printf("usage: " SARG " [-Dversion|-C|-n|-e|-sC|-pembedded-pdb] <exe-file> [new-exe-file] [pdb-file]\n", argv[0]); return -1; } PEImage img; if (!img.loadExe(argv[1])) fatal(SARG ": %s", argv[1], img.getLastError()); if (img.countCVEntries() == 0 && !img.hasDWARF()) fatal(SARG ": no codeview debug entries found", argv[1]); CV2PDB cv2pdb(img); cv2pdb.Dversion = Dversion; cv2pdb.debug = debug; cv2pdb.initLibraries(); TCHAR* outname = argv[1]; if (argc > 2 && argv[2][0]) outname = argv[2]; TCHAR pdbname[260]; if (argc > 3) T_strcpy (pdbname, argv[3]); else { T_strcpy (pdbname, outname); TCHAR *pDot = T_strrchr (pdbname, '.'); if (!pDot || pDot <= T_strrchr (pdbname, '/') || pDot <= T_strrchr (pdbname, '\\')) T_strcat (pdbname, TEXT(".pdb")); else T_strcpy (pDot, TEXT(".pdb")); } makefullpath(pdbname); T_unlink(pdbname); if(!cv2pdb.openPDB(pdbname, pdbref)) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(img.hasDWARF()) { if(!img.relocateDebugLineInfo(0x400000)) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if(!cv2pdb.createDWARFModules()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(!cv2pdb.addDWARFTypes()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(!cv2pdb.addDWARFLines()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addDWARFPublics()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.writeDWARFImage(outname)) fatal(SARG ": %s", outname, cv2pdb.getLastError()); } else { if (!cv2pdb.initSegMap()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.initGlobalSymbols()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.initGlobalTypes()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.createModules()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addTypes()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addSymbols()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addSrcLines()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addPublics()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.writeImage(outname)) fatal(SARG ": %s", outname, cv2pdb.getLastError()); } return 0; }