リンクスクリプトでオブジェクトが出力されない

RZ/A2Mにてソースのコーディング中です。

リンクスクリプトファイルの編集中ですが、思い通りに割付できません。

.data.memclk_setup : ALIGN(0x20)
{
*/r_spibsc_setup.o (.text .text.* .rodata .rodata.* .data .data.*)
*/r_memclk_setup.o (.text .text.* .rodata .rodata.* .data .data.*)
*/r_*_memclk_setup.o (.text .text.* .rodata .rodata.* .data .data.*)
*/r_spibsc_adjust_timing_data.o (.text .text.* .rodata .rodata.* .data .data.*)
*/r_spibsc_lld_rza2m.o (.text .text.* .rodata .rodata.* .data .data.*)
*/r_spibsc_sflash_userdef.o (.text .text.* .rodata .rodata.* .data .data.*)
. = ALIGN(0x4);
} >HARDWARE_INIT_RAM AT> ROM

上記のリンクスクリプトファイルでビルドを実行し、mapファイルを確認すると下記の様にセクションのサイズが0になります。

.data.memclk_setup
0x80024000 0x0 load address 0x20000060

試しに最初のオブジェクトを相対パスで指定すると

../HardwareDebug/generate/system/r_spibsc_setup.o (.text .text.* .rodata .rodata.* .data .data.*)  <-こんな感じ

そのオブジェクトの.textセクションが下記の様に配置されます(サイズが0でなくなる)。

.data.memclk_setup
0x80024000 0x180 load address 0x20000060

*/ で任意のパスをつけてオブジェクトを指定してもオブジェクトが無視されているようです。

以上、よろしくお願いします。

  • さとうさん、
    フォーラム管理人です。

    さとうさんの書込みは、システムが不適切と判断したようです。管理人がAdmin権限で復帰させました。
    本文中にソースコードが含まれているとシステムが不適切な書込みと判断することがあります。
    書込みができない場合は、ソースコードを別ファイルとして添付してみてください。

    以上、よろしくお願いします

  • フォーラム管理人さま

    お手数をおかけしました。

    何度投稿しても保留となり困ってました。

  • 最終的に何を実現されたいのかがイマイチ解りません(.textを.dataに入れようとしているのも良く解りません)が、
    ワイルドカード(*)の使い方には問題があるように思えます。
    (ワイルドカードだと何も見つからなくてもエラーにはならないので、何が悪いか分からないんですよね)

    GNU Linkerのマニュアルはここですが、難しい…
    https://sourceware.org/binutils/docs/ld/Input-Section-Wildcards.html

    これの最後の方のコメントとか、他の方の使い方を眺めてみるのが早いと思います。
    https://stackoverflow.com/questions/21418593/linker-script-put-a-particular-file-at-a-later-position

  • Thanks for sharing, I found a lot of interesting information here. A really good post, very thankful and helpful that you will write many more posts like this one.

    MaryKayInTouch USA

  • 自己解決しました。

    原因はやはり、ワイルドカードにありました。

    異なった親ディレクトリ(HardwareDebugとRelease)の下に同じ名前のディレクトリ(genarate)があり、無視されたようです。結果、オブジェクトファイルがリンクされずオブジェクトファイルのセクションが見つからずのサイズ0となったようです。

    パスを指定することで解決しました。アドバイス、ありがとうございました。