diff --git a/lib/Lifters/FunctionLifter.cpp b/lib/Lifters/FunctionLifter.cpp index 216bd1de..d601aebf 100644 --- a/lib/Lifters/FunctionLifter.cpp +++ b/lib/Lifters/FunctionLifter.cpp @@ -409,13 +409,6 @@ llvm::Function *FunctionLifter::LiftFunction(const FunctionDecl &decl) { return nullptr; } - // Function has no valid instructions. - auto &cfg = decl.cfg; - if (cfg.find(decl.entry_uid) == cfg.end()) { - LOG(ERROR) << "Function missing entry block " << std::hex << decl.address; - return nullptr; - } - // This is our higher-level function, i.e. it presents itself more like // a function compiled from C/C++, rather than being a three-argument Remill // function. In this function, we will stack-allocate a `State` structure, @@ -440,6 +433,14 @@ llvm::Function *FunctionLifter::LiftFunction(const FunctionDecl &decl) { return native_func; } + // Function has no valid instructions. + auto &cfg = decl.cfg; + if (cfg.find(decl.entry_uid) == cfg.end()) { + LOG(ERROR) << "Function missing entry block " << std::hex << decl.address; + return nullptr; + } + + // Every lifted function starts as a clone of __remill_basic_block. That // prototype has multiple arguments (memory pointer, state pointer, program // counter). This extracts the state pointer.