/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #ifndef XENIA_CPU_USERMODULE_H_ #define XENIA_CPU_USERMODULE_H_ #include #include #include #include #include #include namespace llvm { class ExecutionEngine; class Function; class LLVMContext; class Module; } namespace xe { namespace cpu { namespace codegen { class ModuleGenerator; } } } namespace xe { namespace cpu { typedef std::tr1::unordered_map FunctionMap; class ExecModule { public: ExecModule( xe_memory_ref memory, shared_ptr export_resolver, const char* module_name, const char* module_path, shared_ptr& engine); ~ExecModule(); int PrepareUserModule(kernel::UserModule* user_module); int PrepareRawBinary(uint32_t start_address, uint32_t end_address); void AddFunctionsToMap(FunctionMap& map); void Dump(); private: int Prepare(); int InjectGlobals(); int Init(); int Uninit(); xe_memory_ref memory_; shared_ptr export_resolver_; char* module_name_; char* module_path_; shared_ptr engine_; shared_ptr sdb_; shared_ptr context_; shared_ptr gen_module_; auto_ptr codegen_; FunctionMap fns_; }; } // namespace cpu } // namespace xe #endif // XENIA_CPU_USERMODULE_H_