問題タブ [eabi]

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 投票する
1 に答える
149 参照

assembly - アセンブリの .size 演算子 ( stm32 )

私の質問は、このスタートアップ スクリプトのような ARM CORTEX M スタートアップ ファイルでの .size 演算子の使用についてです。

.size 演算子に関する他の質問を読みましたが、次の行が私の理解です。

.size X,.-X

現在の位置 (.) とシンボル X の定義の間の距離によって X のサイズを定義できます。

この行が X 定義の最後に使用されている場合、これは問題ありません。それで問題ありません。しかし、シンボルの前に使用するとどのように機能しますか?

起動スクリプトの 94 行目で、以下を読むことができます。

-1のサイズを定義すべきではありませんか???? それはどのように機能しますか?これはすべての STM32 スタートアップ コードに見られるので、間違いではないと思います ^^

ありがとう、

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

c - アームリンカーが関数呼び出しで使用する「ベニア」とは何ですか?

https://www.keil.com/support/man/docs/armlink/armlink_pge1406301797482.htmを読みました。しかし、アームリンカーが関数呼び出しの間に挿入するベニアが何であるかを理解できません。

「ARMアーキテクチャのプロシージャコール標準」ドキュメントでは、次のように述べています。

5.3.1.1 リンカによる IP の使用 ARM 状態および Thumb 状態の BL 命令はいずれも 32 ビット アドレス空間全体をアドレス指定できないため、リンカが呼び出しルーチンと呼び出されたルーチンの間にベニアを挿入する必要がある場合があります。サブルーチン。ベニアは、ARM-Thumb インターワーキングまたは動的リンクをサポートするためにも必要になる場合があります。挿入されたすべてのベニアは、IP (r12) と条件コード フラグを除くすべてのレジスタの内容を保持する必要があります。適合プログラムは、IP を変更するベニアが、インターワーキングまたは長い分岐をサポートする再配置にさらされる分岐命令に挿入される可能性があると想定する必要があります。注 R_ARM_CALL、R_ARM_JUMP24、R_ARM_PC24、R_ARM_THM_CALL、R_ARM_THM_JUMP24、R_ARM_THM_JUMP19 は、このプロパティを持つ ELF 再配置タイプの例です。詳細については、[AAELF] を参照してください。

これは私が推測するものです、それはこのようなものですか?: 関数 A が関数 B を呼び出し、これらの 2 つの関数が離れすぎてblコマンドが表現できない場合、リンカーは関数 A と B の間に関数 C を挿入し、関数 C が関数 B に近づくようにします。関数 A はb命令を使用します。関数Cに移動し(関数呼び出し間ですべてのレジスタをコピーします)、関数Cはbl命令を使用します(すべてのレジスタもコピーします)。もちろん、r12 レジスタは、残りのロング ジャンプ アドレス ビットを保持するために使用されます。これはベニヤの意味ですか?(アームがベニアとは何かを説明せず、ベニアが提供するものだけを説明する理由がわかりません..)