virtual void NotifyObjectEmitted(const llvm::object::ObjectFile& Obj, const llvm::RuntimeDyld::LoadedObjectInfo& L) { static StatCounter code_bytes("code_bytes"); code_bytes.log(Obj.getData().size()); llvm_error_code code; for (const auto& sym : Obj.symbols()) { llvm::object::section_iterator section(Obj.section_end()); code = sym.getSection(section); assert(!code); bool is_text; #if LLVMREV < 219314 code = section->isText(is_text); assert(!code); #else is_text = section->isText(); #endif if (!is_text) continue; llvm::StringRef name; code = sym.getName(name); assert(!code); uint64_t size; code = sym.getSize(size); assert(!code); if (name == ".text") continue; uint64_t sym_addr = L.getSymbolLoadAddress(name); assert(sym_addr); g.func_addr_registry.registerFunction(name.data(), (void*)sym_addr, size, NULL); } }
virtual void NotifyObjectEmitted(const llvm::object::ObjectFile& obj, const llvm::RuntimeDyld::LoadedObjectInfo& inf) override { const llvm::StringRef elf = obj.getData(); fs::file(fs::get_config_dir() + "LLVM.obj", fs::rewrite) .write(elf.data(), elf.size()); }