Slide 1

Slide 1 text

x64/aarch64コンパイラを含む ミニツールチェーン+αの開発 第10期ラボユース成果発表会 言語処理系ゼミ 菅原大和/Drumato

Slide 2

Slide 2 text

一年間まとめ ● x86_64/AArch64コードの生成ができるコンパイラを設計/実装した ○ 生成コードの効率は悪いが,Typed ASTという中間表現を用いてシンプル ● x86_64用のELFを生成するミニツールチェーンを実装した ○ 上記コンパイラ+アセンブラ/リンカが協調動作する ● 高い抽象度を持たせたRust用ELFライブラリを開発した ● 上記ライブラリでTUI版readelfを実装した ● 既存のリンカスクリプトの欠点を考察し,一つのアイデアを提案した ○ 後ほど解説

Slide 3

Slide 3 text

目次 ● デモ ● 一年間で達成できた目標/できなかった目標 ● Linker Script Generatorについて ● これからの目標

Slide 4

Slide 4 text

DEMO1: ツールチェーンの動作 (6/9時点の画像)

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

DEMO2:TUI版readelfでの解析

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

一年間で達成できた目標#実装物 ● peachili … 自作言語とそれをサポートするコンパイラ ○ アセンブラとリンカをシンプルにするため,Bundlerが動いて依存関係を解決しグラフを構築 ○ 複数のファイルで構成されたPeachiliコードから,最終的に単一のアセンブリファイルを生成 ● asmpeach … x86_64のアセンブラ ○ 構成としては,アセンブリファイルのパーサ/命令の変換/オブジェクトファイルの生成 ● pld … x86_64のstatic linker ● elf-utilities … RustでELFをスマートに使えるライブラリ ○ できるだけスマートに使えるように多くを抽象化している ■ ex. セクション追加時にユーザがehdr.e_shnumをインクリメントしなくていい等 ● elfpeach … TUIで操作できるreadelf ○ これも最低限の機能しか持っておらず,実質プロトタイプ ● py-linkage … Linker Script Generator(ただしプロトタイプ) ○ これについては後述

Slide 9

Slide 9 text

一年間で達成できなかった目標 ● コンパイラのアーキテクチャは結局初歩的なものだった ○ スタックマシン実装であり,生成コードの効率は非常に悪い ○ SecHack365参加時はなんちゃってレジスタマシン実装だったが,よっぽど速い ○ 最適化パスは実装できなかった ● 作りたかった言語機能のいくつかを保留にした ○ Arena Allocatorのような標準ライブラリ ○ RustのEnumやZigのtagged unionのような機能 ○ Goのような言語組み込みのテストフレームワーク

Slide 10

Slide 10 text

活動2ヶ月後に とりあえず "最小の自作ツールチェーン"は 達成した

Slide 11

Slide 11 text

まだまだ開発することは沢山ある (動的リンカ/言語拡張/LTO/etc)

Slide 12

Slide 12 text

ところで,他になにか "新しいこと"はできないか?

Slide 13

Slide 13 text

アイデア: Linker Script Generatorについて

Slide 14

Slide 14 text

Linker Script Generator#background ● 既存のリンカはconfiguration interfaceにリンカスクリプトを用意 ● リンカスクリプトは重要かつ便利だが,学習コストが高い ○ 特に日本語のドキュメントは少なく,理解しづらい ● section size/location pointerの計算など,ある程度表現力を持つ ○ yamlなどの(学習コストが低くて)読みやすい形式では代替できない ○ "スクリプト"の機能がなければならない

Slide 15

Slide 15 text

Pythonライブラリを動かして configを"生成"できないか?

Slide 16

Slide 16 text

Linker Script Generator#proposal in Python ● 新たに文法を覚える必要はない ○ 普通のPythonライブラリを使ったコーディング ● Pythonの計算を経由して,最終的に数値がハードコードされたyamlを生成 ○ 出力フォーマットを指定でき,リンカスクリプトのフォーマットも吐ける ■ 既存リンカ/自作リンカのどちらでも役立つ ● 別にPythonじゃなくても,"スクリプト"レベルのフットワークで書ければ良い

Slide 17

Slide 17 text

Linker Script Generator#proposal in Python ● 現状はほぼプロトタイプであり,机上の空論 ● 鋭意実装中 ○ elf-parserとfile-translator, リンカスクリプトの仕様に即した計算機能

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

成果発表後の目標

Slide 20

Slide 20 text

これからの目標(一部) ● elf-utilitiesはRustで一番使われるELFライブラリを目指したい ● elfpeachにも高級な機能を用意したい ○ e.g. シンボルテーブルのフィルタリング機能 ● 最適化コンパイラの理論と実装 ○ まずはx64のバックエンドだけを変更する ● py-linkageはGNU ldのデフォルトスクリプトを置き換えられるぐらいの規模 がほしい

Slide 21

Slide 21 text

最後に ● メンターの方々には多くの助言を頂きました ○ 特に川合さんにはラボユース活動自体の紹介もしていただきました ● ユース生/研究生の皆さんの活動が励みになりました ○ xxさんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます 一年間(以上)ありがとうございました!