__bss_startのアドレスが間違っている

問題

FLASH ROM版のアプリケーションやサンプルをビルドすると、__bss_startシンボルが.bssセクションの先頭を正しく示さない。このため、start.Sで間違った領域をゼロフィルしてしまう。

原因

jsp_study/config/armv4/cq_frk_nxp_arm/lpc2388_flash.ldの中の間違った位置で上記シンボルを宣言していたのが原因。

CVS tag = step_14_registers では、__bss_startの宣言は以下のように.bssセクション宣言の外で行っていた。この結果、__bss_startには直前のセクション、つまり.bss.fiommrのロケーション・カウンタの値が代入されていた。

		/* 初期値なしの変数の配置 */
    __bss_start = .	;		
    .bss       :
    {
      *(.bss)
      *(COMMON)
    } > MEM_SRAM
   . = ALIGN(4);
    __bss_end = __bss_start + SIZEOF(.bss);

対策

当該箇所を以下のように変更して、__bss_startが.bssの先頭を示すように修正した。

		/* 初期値なしの変数の配置 */
    .bss       :
    {
      __bss_start = .	;		
      *(.bss)
      *(COMMON)
     . = ALIGN(4);
      __bss_end = __bss_start + SIZEOF(.bss);
    } > MEM_SRAM

対応タグ

CVSの対応タグは step_15_bugfix である。最新コードの取得方法を説明したページを参照のこと。

リンク