GNU リンカ「ld」は、COMMON セクション シンボルと呼ばれる初期化されていないグローバル パラメータをサイズでソートするオプション「-sort-common」を提供します。リンカがシンボルを偶数アドレスに位置合わせする場合、このオプションはセクションの穴を最小限に抑えるのに役立ちます。たとえば、次のように定義するとします。
--main.c
char a;
短いb;
char c;
int main() { return 0; }
「sort-common」なしで main.o にコンパイルすると、「a」のアドレスと「b」のアドレスの間に 1 バイトの「穴」ができます。「sort-common」を使用すると、リンカーはパラメーターを「a、c、b」に並べ替えます。a のサイズは 1 バイトで、c のサイズは 1 バイトであるため、アドレス間に「穴」はありません。私の問題は、私のコードが次のようになることです:
--main.c
文字 a = 0;
短いb = 0;
char c = 0;
...
この場合、a、b、および c は BSS セクションにあります。つまり、"sort-common" はそれらに影響しません。
「COMMON」セクション以外のセクションのシンボルをソートするにはどうすればよいですか?
また、LD スクリプトの多くのオプションを検索しましたが、うまくいきませんでした。
更新:segment_flags の「Order」値について読んだことがありますが、その使用方法がわかりませんでした。どんな助けもかなりのものです。