問題タブ [llvm-fs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - LLVM バインディングからのアンバランス スタック警告
数週間の努力の結果、JIT コンパイルに LLVM を使用する F# プログラムを作成することができました。ただし、Visual Studio 2010 でデバッガーをアタッチして (つまり、F5 キーを押して) プログラムを実行すると、次の警告が表示されます。
現在、Windows 7 ネットブックを使用している場合は PInvoke 呼び出しごとにこの警告が表示されますが、Windows Vista デスクトップを使用している場合は一部の呼び出しでのみ表示されます。
CDecl
この問題にぶつかった他の人々は、ANSI 文字列または呼び出し規約を要求する PInvoke 呼び出しに属性を追加することで解決したようです。呼び出し規約を変更すると、Windows Vista デスクトップでは警告が修正されますが、使用可能な呼び出し規約 (または ANSI フォーマット文字列) のいずれも、Windows 7 ネットブックでは警告を修正しないことがわかりました。これを修正する方法はありますか?
両方のマシンが完全に 32 ビット x86 であることに注意してください。
編集
人々はリプロを求めるコメントを投稿しています。この問題を再現する最も簡単な方法は、ここに記載されている手順に従って LLVM と llvm-fs をインストールし、指定されたサンプル プログラムのいずれかを実行することです。私のネットブックでの LLVM へのすべての呼び出しで、この問題が発生します。
または、次のコード (llvm-fs から派生) は、llvm-fs を必要とせずに問題を再現する必要があります。
元の C ヘッダー ファイルの対応する定義は次のとおりです。
.net - dllが実行可能ファイルと同じフォルダーにあるにもかかわらず、DllImportはdllを見つけることができません
F# の llvm バインディングを提供するllvm-fsプロジェクトを使用しようとしています。LLVM-3.1.dll
でファイルをコンパイル--enable-shared
し、コンパイル済みの実行可能ファイルと同じディレクトリに存在するようになりました (で確認しましたEnvironment.CurrentDirectory
)。DllImport
llvm-fs は次のようになります。
しかし、アプリケーションを実行すると、次のエラーが発生します。
DLL をロードするにはどうすればよいですか? 参考までに、ロードしようとしている正確な DLL を次に示します。
f# - F# からこのネイティブ関数を呼び出すにはどうすればよいですか? (LLVMCreateJITCompilerForModule)
私はllvm-fsバインディングを使用しており、呼び出したいメソッドの 1 つは、LLVM C APIcreateJITCompilerForModule
のネイティブ メソッドの externです。LLVMCreateJITCompilerForModule
llvm-fs の作成者は、F# でこの関数呼び出しの「適切な」バージョンを作成できないと述べています。
createJITCompilerForModule in llvm-fs:Generated.fs
:
F# からこの関数を呼び出す方法、またはネイティブ関数が何をするか知っていますか? OutJIT
(ネイティブコードがvoid*
指すものを再割り当てするため)の「出力パラメーター」があるようです。ネイティブ関数は次のとおりです。
LLVMCreateJITCompilerForModule in llvm-c:ExecutionEngineBindings.cpp
:
compiler-construction - コンパイラ エラーをデバッグするためにソース情報を LLVM ビットコード ファイルに入れる
私は基本的なコンパイラを作成しており、簡単にデバッグできるように生成された llvm コードの近くにコードのソース行を配置したいと考えています。例えば:
次のように、何らかの方法でソースに注釈を付ける必要があります。
これを行うための解決策/方法はありますか? (私はllvm-fsバインディングを使用していますが、IRで動作する方法が欲しいだけです)
compiler-construction - LLVM C Api/llvm-fsバインディングを使用してメタデータノードを追加する方法
命令上またはグローバルメタデータとして、メタデータノードをプログラムに追加しようとしています。LLVM C APIでこれを行うにはどうすればよいですか?LLVMAddNamedMetadataOperand
(この質問からわかるように)関数を提供するようになりましたが、使用方法がわかりません。これはllvm-fsaddNamedMetadataOperand
バインディングでバインドされます。私はこれを試しました:
メタデータノードが呼び出されることを期待していますfoobar
が、機能しません-キャストエラーについて文句を言います。多分あなたがaddNamedMetadataOperand
命令で使うことになっていると思ったので、私は試しました:
でもこれも気に入らなかった。