Open7

WasmLinux: Emscripten版にコンソールを繋ぐ

okuokuokuoku

というわけでEmscripten版にコンソールを繋ぐ。やることが多くて:

  1. ダミーのネットワークコードを書く。Emscripten内ではTCP/IPできないので、ポートさえ合っていればTCPで繋がっているように見せるダミーを用意する。
  2. ビルドをhtmlからmjsに変更する。Emscriptenは一応HTMLのテンプレートを差し替える機能も提供するが、mjsにして自分でロードした方が簡単と言える。
  3. デバッグprintfを別の関数に置換して、起動後は別のコンソールにリダイレクトする。まぁxterm.jsを2枚開いて、JavaScript側に出力関数を用意してやるのが簡単かな。
okuokuokuoku

とりあえずCygwin上でテスト

なんとなく動いた。これでネットワーク通信一切なし、ttyに直接 ioctl という状況にできたので、これをxterm-pty上で動作させれば期待通り動作する。はず。

https://github.com/okuoku/miniio/commit/5bc8da75dac489e28385df39632a0cc8118ba5f6

I/Oバックエンドは適当な実装。とりあえず動くが、簡単のために accept したソケットは直ぐ start_read されるという仮定を置いている。こうすることで、 write を失敗させなければならない(writeしたデータが対向するコンテキストにqueueできない)ケースを無くせる。

ついでに、出力がごっちゃにならないようにデバッグ出力を止める機能をrunner側に入れた。

okuokuokuoku

xterm-ptyをリンクできない

error: undefined symbol: malloc (referenced by $PTY_waitForReadableWithAtomic, referenced by $PTY_waitForReadable, referenced by fd_read, referenced by root reference (e.g. compiled C/C++ code))
warning: To disable errors for undefined symbols use `-sERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _malloc may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library

うーん。。とりあえず指示に従ってみる。。?

https://github.com/okuoku/wasmlinux-runner/blob/c75eac3e5132223c2e00272ad9649a17feea9ded/hostrunner/CMakeLists.txt#L112

okuokuokuoku

xterm-ptyのサンプルで正常にCSSをロードしてこない

<link rel="stylesheet" href="https://unpkg.com/xterm@5.3.0/css/xterm.css"  crossorigin />

という感じに crossorigin が必要だと思うんだけど、無しで上手くいくCORS設定がある。。?

okuokuokuoku

lsしたら死ぬ

うーん。。まだmismatchがあんのか。。debug printに真面目に対応しないとデバッグが厳しいな。。

okuokuokuoku

再現しない

とりあえず ping とかをSIGINTで止めると再現できる ことがある ので、これもメモリ破壊事象っぽいな。。つまり、確率的に sigaction の引数を壊しているのではないか説。