#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include "llvm/ADT/StringRef.h" #include "llvm/Pass.h" #include "revng/ADT/STLExtras.h" #include "revng/Model/LoadModelPass.h" #include "revng/Model/RawBinaryView.h" class LoadBinaryWrapperPass : public llvm::ModulePass { public: static char ID; private: std::unique_ptr MaybeBuffer; llvm::ArrayRef Data; std::optional BinaryView; public: LoadBinaryWrapperPass(); LoadBinaryWrapperPass(llvm::ArrayRef Data) : llvm::ModulePass(ID), Data(Data) { revng_check(Data.data() != nullptr); } LoadBinaryWrapperPass(llvm::StringRef Data) : LoadBinaryWrapperPass(toArrayRef(Data)) {} public: void getAnalysisUsage(llvm::AnalysisUsage &AU) const override { AU.addRequired(); } public: RawBinaryView &get() { revng_assert(BinaryView); return *BinaryView; } public: bool runOnModule(llvm::Module &M) override final; };