Как я могу проверить код x86 / x64, созданный V8 из WebAssembly?

https://webassembly.studio/ позволяет проверять файлы WebAssembly (WASM) и соответствующий код x86, сгенерированный SpiderMonkey. Я хотел бы аналогичным образом проверить инструкции, генерируемые компиляторами WASM V8 (Liftoff и TurboFan).

Я совершенно не знаком с кодовой базой / API V8 (хотя я скомпилировал и связал его, а также выполнил несколько руководств). Кажется, что доступен класс v8::CompiledWasmModule, но он, похоже, не предоставляет доступ к сгенерированным инструкциям x86 / x64 ни Liftoff, ни TurboFan.

WebAssembly - добавление нового кода операции описывает процесс добавления кода операции WASM в V8. В упомянутых классах доступны, казалось бы, подходящие функции для компиляции / выполнения WASM. Хотя они кажутся довольно глубоко слоистыми в кодовой базе V8, и к ним было бы трудно получить доступ, если бы я связал V8 как библиотеку. Кроме того, я не уверен, соответствует ли это Liftoff или TurboFan.

Может ли кто-нибудь, знакомый с кодовой базой V8, дать мне несколько указателей относительно того, как я могу получить доступ к модулю компиляции Liftoff и / или TurboFan WebAssembly, чтобы получить код x86 / x64?


person Dennis    schedule 24.04.2020    source источник


Ответы (1)


Чтобы проверить сгенерированный код, вы можете запустить оболочку d8 с флагом --print-wasm-code. Вам понадобится либо отладочная сборка, либо сборка выпуска с v8_enable_disassembler = true GN arg.

Не существует способа получить сгенерированный код через API V8; так что, если это то, что вы хотите, вам придется его добавить. Имейте в виду, что V8 не предназначен для автономного компилятора, а это означает, что сгенерированный код предполагает, что он будет работать «внутри V8», поэтому, если вы хотите использовать его для чего-то еще, вам придется внести значительные изменения.

person jmrk    schedule 24.04.2020