問題タブ [gcc-extensions]

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.

0 投票する
0 に答える
58 参照

c++ - __builtin_return_address の後に常に __builtin_extract_return_addr を使用する必要がありますか

gcc のドキュメント:

戻り値の追加の後処理が必要になる場合があります。 を参照してください__builtin_extract_return_addr

メモリに格納された戻りアドレスの表現は、 によって返されるアドレスとは異なる場合があります__builtin_return_address。たとえば、AArch64 では、格納されたアドレスは返信アドレスの署名で壊れている可能性がありますが、返されたアドレスはそうで__builtin_return_addressはありません。

リターンアドレスの格納された表現は何ですか?

__builtin_extract_return_addr :

によって返されるアドレスは、実際のエンコードされたアドレス__builtin_return_addressを取得するために、この関数を介してフィードする必要がある場合があります。たとえば、31 ビット S/390 プラットフォームでは最上位ビットをマスクする必要があり、SPARC プラットフォームでは真の次の命令が実行されるようにオフセットを追加する必要があります。

フィックスアップが必要ない場合、この関数は単に addr を通過します。

実際にエンコードされたアドレスは何ですか?

__builtin_return_addressCPU用に何らかの形でエンコードされたアドレスを返すということですか?そして__builtin_extract_return_addr(__builtin_return_address(0))、直接(エンコードなし)の実際の(シフトなしの)リターンアドレスを返しますか?

もしそうなら、なぜ誰かが__builtin_return_addressなしで使う必要があるの__builtin_extract_return_addrですか?


どの関数が自分の関数を呼び出しているかを知りたいだけです。nmユーティリティを使用して取得したすべての関数のアドレスがあります。から返されるnmアドレスと から返されるアドレス__builtin_extract_return_addr(__builtin_return_address(0))のエンコードは同じですか?

0 投票する
2 に答える
62 参照

c - GNU 拡張のテスト

複素数の実部を返すマクロを作成したいと考えています (これは double、float、および long double 型で動作します)。GNU C 拡張機能__real__は、(残念ながら移植性はありませんが) 法案に適合しているようです。私は次のことを試みています:

ただし、__real__拡張子が通常のマクロとして定義されていないように見えるため、 defined( __real__) テストは使用可能であるにもかかわらず失敗します。__real__これに適切なマクロを作成するために の存在をテストする方法を知っている人はいますか?

また、これを行う移植可能な方法を誰かが知っていれば、その解決策にも興味があります。