================ @@ -324,66 +325,44 @@ object::OwningBinary<object::ObjectFile> getObjectFromFile(StringRef Filename) { return cantFail(object::ObjectFile::createObjectFile(Filename)); } -namespace { - -// Implementation of this class relies on the fact that a single object with a -// single function will be loaded into memory. -class TrackingSectionMemoryManager : public SectionMemoryManager { -public: - explicit TrackingSectionMemoryManager(uintptr_t *CodeSize) - : CodeSize(CodeSize) {} - - uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, - unsigned SectionID, - StringRef SectionName) override { - *CodeSize = Size; - return SectionMemoryManager::allocateCodeSection(Size, Alignment, SectionID, - SectionName); - } - -private: - uintptr_t *const CodeSize = nullptr; -}; - -} // namespace - Expected<ExecutableFunction> ExecutableFunction::create( std::unique_ptr<LLVMTargetMachine> TM, object::OwningBinary<object::ObjectFile> &&ObjectFileHolder) { assert(ObjectFileHolder.getBinary() && "cannot create object file"); std::unique_ptr<LLVMContext> Ctx = std::make_unique<LLVMContext>(); - // Initializing the execution engine. - // We need to use the JIT EngineKind to be able to add an object file. - LLVMLinkInMCJIT(); - uintptr_t CodeSize = 0; - std::string Error; - std::unique_ptr<ExecutionEngine> EE( - EngineBuilder(createModule(Ctx, TM->createDataLayout())) - .setErrorStr(&Error) - .setMCPU(TM->getTargetCPU()) - .setEngineKind(EngineKind::JIT) - .setMCJITMemoryManager( - std::make_unique<TrackingSectionMemoryManager>(&CodeSize)) - .create(TM.release())); - if (!EE) - return make_error<StringError>(Twine(Error), inconvertibleErrorCode()); - // Adding the generated object file containing the assembled function. - // The ExecutionEngine makes sure the object file is copied into an - // executable page. - EE->addObjectFile(std::move(ObjectFileHolder)); - // Fetching function bytes. - const uint64_t FunctionAddress = EE->getFunctionAddress(FunctionID); + + auto SymbolSizes = object::computeSymbolSizes(*ObjectFileHolder.getBinary()); + assert(SymbolSizes.size() == 3); + uintptr_t CodeSize = std::get<1>(SymbolSizes[2]); ---------------- legrosbuffle wrote:
Can you add a comment to explain which symbols we're expecting ? https://github.com/llvm/llvm-project/pull/72838 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits