2017-08-02 3 views
1

LLVM(特にllvmlite)では、グローバル変数を宣言し、任意の(ランタイム)式の結果でその内容を初期化する方法はありますか?LLVMで非const値を使用してグローバル変数を初期化するためのコードを生成する方法は?

GlobalVariableオブジェクトを作成することができますが、そのinitializer引数は、Constantを想定しているようです。その値を決定するためにスタートアップ/ロード時に任意のコードを実行する必要がある場合はどうすればよいですか?そのコードはどこに行きますか?誰に指示を追加しますか?Builder?実行時にモジュールがメモリにロードされたときに自動的に実行されるように、特別な名前の関数を宣言するか、または魔法の属性を追加しますか?

答えて

2

完全にあなたの設定によって異なります。 Visual Studioを使用するCまたはC++では、CおよびC++初期化関数は.CRTセクションのサブセクションに置かれ、標準ランタイムライブラリによって実行されます。

CRTを使用せずにコンパイルしてこれらの初期化関数を使用すると、ランタイムがそれを処理するため起動しません。

修正編集:@llvm.global_ctorsが存在します。

イニシャライザの実行に役立つ実行時ライブラリがない環境でこれらが正しく動作するかどうかは不明ですが、そこにはあります。

関連する問題