単子葉類プログラマーのメモ

プログラミング関連の自分用メモだけど他の人の役に立つかもしれないので公開しておく感じのブログ

LLVM IRにデバッグ情報を埋め込むためにいろいろ調べたときのメモ

LLVM IRおよびそこから出力する実行可能ファイルにデバッグ情報を埋め込む方法を調べるため、下準備としていろいろやったのでその記録を残しておく。

基本的にWindows環境を想定しているが、Linuxgdbでの動作確認も行っている。

実施した内容は以下。

  • clangでデバッグ情報付きLLVM IRを出力
  • LLVM IRからobjファイルとpdbファイルを生成
  • objファイルをリンクしてexeファイルを生成
    • 普通ならclangで直接exeとpdbを出力すればよいが、今回はLLVM IRの内容を見たいので、LLVM IRを経由する。
  • デバッガでブレーク、ステップ実行や変数の中身の確認ができることを確認
    • コアダンプの解析とかまでは試していない

LLVMのバージョンは10.0.0。 clangやLLVM関連のツールはこの手順でセットアップしている。

目次

続きを読む

LLVM言語 学習メモ(6) - 構造体、配列

LLVMの構造体、配列について。

型については以前書いたが、その使い方についてはあまり書いていなかったので改めてまとめておく。

LLVMのバージョンは10.0.0

目次

  • 構造体
  • 配列
続きを読む

LLVM C++ API 学習メモ(4) - リテラル、算術演算、関数定義、ローカル変数

前回までで書いたもの以外の主要なAPIについてのメモ。

LLVMのバージョンは10.0.0

目次

  • リテラルの作成
  • 算術演算
  • 関数定義
    • getOrInsertFunction()とllvm::Function::Create()
  • ローカル変数の追加
続きを読む

LLVM C++ API 学習メモ(3) - Hello World

前回までで、LLVM IRを作成したりオブジェクトファイルを出力したりする方法を説明したが、プログラム本体は戻り値を返すだけのものだった。

それだけだとまともなプログラムを作成できないので、今回は標準出力にhello worldを出力するLLVM IRを作成する。

また、出力したオブジェクトファイルをリンクして実行可能ファイルを作成する方法も説明する。今回はC標準ライブラリの関数を利用するので、前回よりリンクに手間がかかる。

この手順LLVM 10.0.0をビルドした環境で、Visual Studioのプロジェクトをこの内容に設定してビルド確認している。

目次

  • 目的のLLVM IRコード
  • C++コード
  • 解説
    • puts関数の宣言
      • 引数リストを作成
      • 関数の型を作成
      • Modueに関数の宣言を追加
    • main関数を定義
    • 文字列定数"hello world"を定義
    • puts関数を実行
  • 実行可能ファイルの作成(リンク)
続きを読む

LLVM言語 学習メモ(5) - 外部ライブラリの呼び出し方

LLVM言語でダイナミックリンクライブラリや静的ライブラリで定義されている関数を呼び出す方法についてのメモ。

Linux環境でも流用できるかもしれないが、ここではWindows環境のみを対象としている。

LLVMのバージョンは10.0.0

目次

  • ダイナミックリンクライブラリ
  • 静的ライブラリ
続きを読む