文字列リテラル領域をセクション分割したい

RX631/CS+/CC-RXを使っています。

RXシンプルフラッシュAPIのような内蔵ROM書換機能を使って、プログラムの更新機能を作りたいと考えています。

更新機能としては、

①更新対象とする領域と書換しない領域とをセクション分割しておき、

②更新時に更新対象部分のみ削除、

③削除成功時に新規プログラム部分を書込み

というようなものを考えています。

現在困っているのは、①セクション分割において、リテラル領域としてLセクションに割り当てられる領域についてです。

本来はセクション分割時、#pragma sectionでセクション名を指定すれば全ての領域が指定セクションに割り付けられると思っていたのですが、
リテラル領域と判別されたものはLセクションに割り付けられ、セクション分割がされません。
これだとLセクションを書き換えないと更新対象部は書き換わらないことになりますが、このとき書換しない領域においてリテラル部分の整合性が保たれない可能性が高いと思います。

CC-RXのマニュアル(http://documentation.renesas.com/doc/products/tool/doc/r20ut3248jj0101_ccrx.pdf)によると、LセクションとWセクションは#pragma sectionによる分割ができないと書かれています。

(p325)
次の項目のセクション名は変更できません。section オプションを使用してください。

(1) 文字列リテラルおよび集成体の動的初期化で用いる初期化子 (2) switch 文の分岐テーブル

私の考えていた更新機能は実現できないということで良いのでしょうか?

なお、下記のような記載があったので、

(p929)
コンパイル時に -section=L=C を指定することで、リテラル領域の出力先が C セクションに変更され、V.1.00 互換のセクション構成にすることができます。

上記のようにLではなくCセクションに割り当てられれば、#pragma sectionで割り当てがうまくいくのではと思って試してみましたが、結果はLセクションに割り当てられていたものがCセクションに入っただけで、分割はされないようです。

  • mark_n2様

    かふぇルネのご利用ありがとうございます。
    ルネサス内部スタッフです。

    #pragma sectionで文字列リテラルを別セクションに分けることはできないので
    別セクションに分けたい文字列リテラルを別ファイルで定義して、
    それぞれのファイルに対して個別コンパイラオプションの設定で

    <file1.cに対して>
     -section=L=CDATA1
    <file2.cに対して>
     -section=L=CDATA2

    のように設定してみるのは如何でしょうか?
    試してみて下さい。

  • こち様

    ご返答ありがとうございます。

    個別コンパイラオプションは思いつきませんでした。

    試してみます。