解決

文字が表示されない問題の原因判明。結論からいうとリンカースクリプトの記述ミス。
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先生にたずねてみるもいまいちよくわからず。