問題タブ [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.
c++ - __builtin_return_address の後に常に __builtin_extract_return_addr を使用する必要がありますか
戻り値の追加の後処理が必要になる場合があります。 を参照してください
__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_address
CPU用に何らかの形でエンコードされたアドレスを返すということですか?そして__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))
のエンコードは同じですか?
c - GNU 拡張のテスト
複素数の実部を返すマクロを作成したいと考えています (これは double、float、および long double 型で動作します)。GNU C 拡張機能__real__
は、(残念ながら移植性はありませんが) 法案に適合しているようです。私は次のことを試みています:
ただし、__real__
拡張子が通常のマクロとして定義されていないように見えるため、 defined( __real__
) テストは使用可能であるにもかかわらず失敗します。__real__
これに適切なマクロを作成するために の存在をテストする方法を知っている人はいますか?
また、これを行う移植可能な方法を誰かが知っていれば、その解決策にも興味があります。