問題タブ [gcc-plugins]
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 - インストルメンテーション コードを使用して、すべての関数のプロローグとエピローグにアセンブリ コードを追加する方法は?
みんな。
私は C プロジェクトに取り組んでおり、ソース コード内のすべての関数のプロローグとエピローグにアセンブリ コードを追加する方法が必要です。
例を挙げましょう。
これはソースコードです:
相対的なアセンブリ コードは次のとおりです。
今私がやりたいことは、コンパイル時にプロローグとエピローグにアセンブリ コードを自動的に追加する方法を見つけることです。そして、次のような状況になります。
私はこれについて多くの研究を行ってきました。そして、その方法を説明するものは何も見つかりませんでした。gcc コンパイラが関数を計測するオプションを
提供していることは知っていますが、必要なものではありません。-finstrument-functions
これは、そのオプションに次の 2 つの関数を追加する必要があるためです。
関連するアセンブリでは、これらの関数の呼び出しであることが判明しましたが、それは私が望んでいることではありません。
gccプラグインを介してこの結果を得ることができるかもしれないと読みましたが、ドキュメントは本当に貧弱です。DynamoRio
についても読みましたが、必要なのは動的ではなく静的な計測システムだと思います。
誰かが私を正しい方向に向けることができますか? よろしくお願いします!
gcc - GCC プラグインのコンパイルの問題
カスタム カーネル モジュール (この git から)をクロスコンパイルしようとしています。これは、もともと git 内でコンパイルされたプラグインに依存しています ($git/buildtools/gcc-nexmon-plugin/nexmon.c にあります)。
もともと、このツリーはラズベリー pi で直接ビルドすることを目的としていますが、この機能を buildroot システムに移植したいと考えています。つまり、ラズベリー pi に gcc/g++ がなく、私のノートパソコン。
私の問題は、nexmon.so(プラグインファイル)を適切に作成して、後でクロスコンパイル中に使用できるようにする方法です
nexmon.so を生成する元のコマンド ラインは次のとおりです。
ご覧のとおり、ツリー ("../gcc-arm..") 内にいくつかのクロスコンパイラが含まれています。
これで、プラグインをクロスコンパイルしてはならないことがわかりました。彼らはこれをラズベリーパイで実行することを望んでいるので、「g++」は埋め込まれた「g++」です。私の側では、ラップトップの「g ++」を実行する必要があります。
残念ながら、私のラップトップでは動作しないようです。これが私が最近試していることです:
現在 g++ 8.3.0-6 を使用しているため、プラグイン開発用の対応するヘッダーを見つけました。これを実行すると、大量の問題が発生します。
- 「含まれている plugin/include/tree.h ファイル: #error Unknown BITS_PER_UNIT」
- 「インクルードされた plugin/include/cpplib.h ファイル: #error 少なくとも 32 ビットの符号付き整数型が見つかりません」
これにより、ラップトップのアーキテクチャを適切に定義するためのフラグがいくつか不足していると思いますが、間違っている可能性があります。
ここに私のエラーの完全な PasteBin があります:出力ログ
gcc8/plugin/include が存在するので、プラグインを構築するためのものがあると思います。「gcc-multilib、gcc-8-plugin-dev-i686-linux-gnu、gcc-8-plugin-dev-x86-64-linux-gnux32、gcc-8-plugin-dev」をインストールしようとしました。以前の gcc (4.8、5、6、7 など) に戻ることができません。これは、すべての debian アップグレードでそれらが削除され、使用されなくなったためです。
これまで誰も私を助けることができず、アイデアが尽きてしまいました。この点は、私のプロジェクトを完全に妨げています。