解決
文字が表示されない問題の原因判明。結論からいうとリンカースクリプトの記述ミス。
bootpack.lsに.rodataの配置アドレスを書いてないのがダメだった。
正しいbootpack.lsはこう
OUTPUT_FORMAT("binary") /* We want raw binary image */ /* Define memory layout */ /* Specify input and output sections */ SECTIONS { .text 0x00: { *(.text) } /* Executable codes */ .data 0x280000 + SIZEOF(.text): AT ( ADDR (.text) + SIZEOF (.text) ) { *(.data) } /* Initialized data */ .rodata 0x280000 + SIZEOF(.text) + SIZEOF(.data): ←ここ AT ( ADDR (.text) + SIZEOF (.text) + SIZEOF (.data) ) { *(.rodata*) } /* Constant data (R/O) */ .bss 0x280000 + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.rodata): AT ( ADDR (.text) + SIZEOF (.text) + SIZEOF (.data) + SIZEOF(.rodata)) { *(.bss) } /* Uninitialized data */ }
gcc-4.1とgcc-4.0に吐かせたアセンブラを眺めてたら、4.0では.dataに配置されてた固定文字列や初期化済みのstatic配列なんかが4.1では.rodataに配置されてることが判明。もしやと思いbootpack.lsを見ると案の定.rodataの配置アドレスを書き忘れてる。よくこれで今まで動いてたな(笑
それにしてもなぜいきなり.rodataに配置されるようになったのか、それと固定文字列はいいとして配列は.rodataでいいのだろうか?
google先生にたずねてみるもいまいちよくわからず。