1.WAVM源码解析 —— WASI接口定义、互联S互内部实例初始化及实例链接
WAVM源码解析 —— WASI接口定义、源码源码内部实例初始化及实例链接
从前面文章中,联站我们知道WAVM执行WASM程序的互联S互流程。本文着重解析第三、源码源码pyecharts 源码四、联站巴爷商城源码五部分:生成内部实例、互联S互调用接口与实例链接。源码源码
生成内部实例的联站关键在于调用接口,接口参数是互联S互Intrinsics::Module类型的列表。内部实例不基于WASM程序,源码源码仅关注导入导出段内容,联站因此Intrinsics::Module类仅包含Function、互联S互dj舞曲联盟源码Global、源码源码Table、联站Memory等元素。宏定义WAVM_INTRINSIC_MODULE_REF(wasi)生成一个Intrinsics::Module对象,代源码免费观看其实际实现对应WASI标准接口。
初始化Intrinsics::Module对象通过宏函数WAVM_DEFINE_INTRINSIC_FUNCTION完成,这个宏定义接口并将其赋值给Intrinsics::Module对象。以sched_yield为例,新传奇引擎源码宏定义后生成一个静态的Intrinsics::Function对象,通过构造函数自动赋值到Intrinsics::Module中。
Intrinsics::instantiateModule()函数执行步骤包括:将moduleRefs转化为IR::Module,编译生成的IR::Module,调用实例化接口函数生成内部实例。关键步骤为将外部接口函数转化为WASM格式的thunks函数,并将thunks导出。最终,通过实例化创建出内部实例,与普通实例的主要区别在于导入段内容的获取方式。
链接器实现实例化的一大功能,即提供查询导出项的接口。核心逻辑简单,具体实现则较为复杂,本文不展开解析。关于实例化细节,后续文章将深入探讨。