File WAVMWasmModule.h

namespace wasm

SYSCALL NUMBERING

Have a look in the sysroot at include/bits/syscall.h to determine the system call numbering.

Functions

template<class T>
T unalignedWavmRead(WAVM::Runtime::Memory *memory, WAVM::Uptr offset)
template<class T>
void unalignedWavmWrite(const T &value, WAVM::Runtime::Memory *memory, WAVM::Uptr offset)
class WAVMModuleCache

Public Functions

std::pair<wasm::WAVMWasmModule&, faabric::util::SharedLock> getCachedModule(faabric::Message &msg)
std::string registerResetSnapshot(wasm::WasmModule &module, faabric::Message &msg)
void clear()
size_t getTotalCachedModuleCount()

Private Functions

int getCachedModuleCount(const std::string &key)

Private Members

std::shared_mutex mx
std::unordered_map<std::string, wasm::WAVMWasmModule> cachedModuleMap
class WAVMWasmModule : public wasm::WasmModule, private Resolver

Public Functions

WAVMWasmModule()
WAVMWasmModule(int threadPoolSizeIn)
WAVMWasmModule(const WAVMWasmModule &other)
WAVMWasmModule &operator=(const WAVMWasmModule &other)
~WAVMWasmModule()
virtual void doBindToFunction(faabric::Message &msg, bool cache) override
void bindToFunctionNoZygote(faabric::Message &msg)
virtual void reset(faabric::Message &msg, const std::string &snapshotKey) override
virtual void doThrowException(std::exception &e) override
virtual uint32_t mmapFile(uint32_t fd, size_t length) override
virtual uint8_t *wasmPointerToNative(uint32_t wasmPtr) override
virtual size_t getMemorySizeBytes() override
virtual size_t getMaxMemoryPages() override
virtual uint8_t *getMemoryBase() override
virtual void writeWasmEnvToMemory(uint32_t envPointers, uint32_t envBuffer) override
virtual void printDebugInfo() override
void executeWasmFunction(WAVM::Runtime::Function *func, WAVM::IR::FunctionType funcType, const std::vector<WAVM::IR::UntaggedValue> &arguments, WAVM::IR::UntaggedValue &result)
void executeWasmFunction(WAVM::Runtime::Function *func, const std::vector<WAVM::IR::UntaggedValue> &arguments, WAVM::IR::UntaggedValue &result)
void executeWasmFunction(WAVM::Runtime::Context *ctx, WAVM::Runtime::Function *func, const std::vector<WAVM::IR::UntaggedValue> &arguments, WAVM::IR::UntaggedValue &result)
virtual void writeArgvToMemory(uint32_t wasmArgvPointers, uint32_t wasmArgvBuffer) override
WAVM::Runtime::Function *getFunctionFromPtr(int funcPtr) const
bool resolve(const std::string &moduleName, const std::string &name, WAVM::IR::ExternType type, WAVM::Runtime::Object *&resolved) override
int32_t getGlobalI32(const std::string &globalName, WAVM::Runtime::Context *context)
std::map<std::string, std::string> buildDisassemblyMap()
int dynamicLoadModule(const std::string &path, WAVM::Runtime::Context *context)
uint32_t getDynamicModuleFunction(int handle, const std::string &funcName)
int getDynamicModuleCount()
uint32_t addFunctionToTable(WAVM::Runtime::Object *exportedFunc) const
int getNextMemoryBase()
int getNextStackPointer()
int getNextTableBase()
int getFunctionOffsetFromGOT(const std::string &funcName)
int getDataOffsetFromGOT(const std::string &name)
virtual int32_t executeFunction(faabric::Message &msg) override
virtual int32_t executeOMPThread(int threadPoolIdx, uint32_t stackTop, faabric::Message &msg) override
virtual int32_t executePthread(int threadPoolIdx, uint32_t stackTop, faabric::Message &msg) override

Public Members

WAVM::Runtime::GCPointer<WAVM::Runtime::Memory> defaultMemory
WAVM::Runtime::GCPointer<WAVM::Runtime::Table> defaultTable
WAVM::Runtime::GCPointer<WAVM::Runtime::Context> executionContext
WAVM::Runtime::GCPointer<WAVM::Runtime::Compartment> compartment

Public Static Functions

static void clearCaches()
static WAVM::Runtime::Function *getFunction(WAVM::Runtime::Instance *module, const std::string &funcName, bool strict)
static WAVM::Runtime::Context *createThreadContext(uint32_t stackTop, WAVM::Runtime::ContextRuntimeData *contextRuntimeData)

Private Functions

LoadedDynamicModule &getLastLoadedDynamicModule()
virtual bool doGrowMemory(uint32_t pageChange) override
void doBindToFunctionInternal(faabric::Message &msg, bool executeZygote, bool useCache)
void writeStringArrayToMemory(const std::vector<std::string> &strings, uint32_t strPoitners, uint32_t strBuffer) const
void clone(const WAVMWasmModule &other, const std::string &snapshotKey)
void addModuleToGOT(WAVM::IR::Module &mod, bool isMainModule)
void executeZygoteFunction()
void executeWasmConstructorsFunction(WAVM::Runtime::Instance *module)
void doWAVMGarbageCollection()
WAVM::Runtime::Instance *createModuleInstance(const std::string &name, const std::string &sharedModulePath)

Private Members

std::shared_mutex resetMx
WAVM::Runtime::GCPointer<WAVM::Runtime::Instance> envModule
WAVM::Runtime::GCPointer<WAVM::Runtime::Instance> wasiModule
WAVM::Runtime::GCPointer<WAVM::Runtime::Instance> moduleInstance
std::unordered_map<std::string, int> dynamicPathToHandleMap
std::unordered_map<int, LoadedDynamicModule> dynamicModuleMap
int lastLoadedDynamicModuleHandle = 0
std::unordered_map<std::string, WAVM::Uptr> globalOffsetTableMap
std::unordered_map<std::string, std::pair<int, bool>> globalOffsetMemoryMap
std::unordered_map<std::string, int> missingGlobalOffsetEntries
std::vector<WAVM::Runtime::Context*> openMPContexts

Private Static Functions

static WAVM::Runtime::Instance *getEnvModule()
static WAVM::Runtime::Instance *getWasiModule()
static WAVM::Runtime::Function *getMainFunction(WAVM::Runtime::Instance *module)
static WAVM::Runtime::Function *getDefaultZygoteFunction(WAVM::Runtime::Instance *module)
static WAVM::Runtime::Function *getWasmConstructorsFunction(WAVM::Runtime::Instance *module)