(module
(func (export "throw")
unreachable
)
)
unreachable 在 C 中可以用 __builtin_trap(); 生成,是 unconditional trap。#DynamoRIO 遇到瓶颈了,再接下来推进工作感觉需要对 dr 的 codebase 有更深入的理解才行了。打算再读一遍那篇论文,看看有没有新收获;然后更完整地读 Aarch64 port 的代码,把一个 nontrivial 的程序在 dr 中运行的各种细节搞清楚。
🔥2❤1
思考了一下如何在 WebAssembly 这种哈弗架构中做 JIT:
主模块中需要导出的东西:
1.
2.
在主模块中动态生成 Wasm Module Binary(JIT 模块),放到
JavaScript 在实例化模块后,需要做 late linking,把 JIT 模块导出的函数注册到主模块的
另外 JIT 模块导出的函数也会直接读写主模块的内存,减少数据交换。这就要求 JIT 模块导入主模块的
当主模块需要调用 JIT 出来的函数时,使用
主模块中需要导出的东西:
1.
indirect function table :实现“函数指针”调用2.
memory :用于把动态生成的 wasm module 传给 JavaScript在主模块中动态生成 Wasm Module Binary(JIT 模块),放到
memory 里面,然后调用 JavaScript,JavaScript 从 memory 拿到数据后编译并实例化模块。JavaScript 在实例化模块后,需要做 late linking,把 JIT 模块导出的函数注册到主模块的
indirect function table 。另外 JIT 模块导出的函数也会直接读写主模块的内存,减少数据交换。这就要求 JIT 模块导入主模块的
memory ,这一步可以在 JIT 模块初始化时完成。当主模块需要调用 JIT 出来的函数时,使用
call_indirect $function_table_index 即可。[11:18 PM] ksco: I was tired of debugging so I took a nap, after waking up, it took me like 5 minutes to find the cause.
[11:19 PM] ksco: amazing.
[11:19 PM] ksco: amazing.