| |||
Home > リンカコマンドラインオプション > --largeregions、--no_largeregions |
このオプションは、大きい実行領域でセクションのソート順序を制御して、相互に呼び出すセクション間の距離を最小限にします。
実行領域に、分岐命令の範囲を超えるコードが含まれている場合は、大領域モードに切り替わります。 このモードでは、各セクションの近似平均コール深度に従って昇順にソートされます。 また、ベニアの数を最小限に抑えるために、コードセクション間に分散ベニアが配置される場合もあります。
大領域モードでは、入力に加えた変更が少しの場合でも、イメージのレイアウトが大幅に変わる可能性があります。
大領域モードを無効にし、語句順に戻すには、--no_largeregions
を使用します。
セクションの配置が予測でき、イメージの比較が予測しやすくなります。 ただし、一部の分岐はターゲットに到達せず、リンク順が失敗する可能性があります。
その場合は、適切なスキャッタファイルを使用してコードとデータのセクションを明示的に配置するか、独自ベニアを記述する必要があります。
大領域のサポートは、以下を可能にします。
平均コール深度ソート、--sort=AvgCallDepth
API ソート、--api
ベニア挿入、--veneerinject
以下のコマンドラインは同等です。
armlink --largeregions --no_api --no_veneerinject --sort=Lexical armlink --no_largeregions
デフォルトは --no_largeregions
です。 少なくとも 1 つの実行領域に最小のインターセクション分岐を越えるコードが含まれている場合は、--largeregions
に自動的に切り替えられます。
最小のインターセクション分岐は、領域内のコードとターゲットプロセッサによって異なります。
ARM のみを含む実行領域。
実行領域に Thumb が含まれており、32 ビット Thumb がサポートされています。
実行領域に Thumb が含まれており、32 ビット Thumb がサポートされていません。