int main(int argc, char *argv[]) { if (argc < 3) { usage(argv[0]); exit(1); } // TODO: Check for failure ifstream config_file; config_file.open(argv[1]); ifstream llvmir_file; llvmir_file.open(argv[2]); outputName = argv[3]; // Parse json file Rewriter rw; try { rw.parseConfig(config_file); } catch (runtime_error ex){ string exceptionString = "Error parsing configuration: "; logger.write_error(exceptionString.append(ex.what())); config_file.close(); llvmir_file.close(); return 1; } // Get module from LLVM file LLVMContext &Context = getGlobalContext(); SMDiagnostic Err; #if (LLVM_VERSION_MINOR >= 6) std::unique_ptr<Module> _m = parseIRFile(argv[2], Err, Context); Module *m = _m.release(); #else Module *m = ParseIRFile(argv[2], Err, Context); #endif if (!m) { logger.write_error("Error parsing .bc file."); Err.print(argv[0], errs()); config_file.close(); llvmir_file.close(); return 1; } loadPlugins(rw,m); // Instrument bool resultOK = instrumentModule(*m, rw); delete m; config_file.close(); llvmir_file.close(); if(resultOK) { logger.write_info("DONE."); return 0; } else { logger.write_error("FAILED."); return 1; } }