(toppers-users 4788) Re: 【質問】rosdataセクションの配置について

Hiroaki TAKADA hiro @ ertl.jp
2018年 11月 28日 (水) 17:32:35 JST


毛利さん,皆様

細かなところまでフォローできていませんが,おそらく以下の事情と思います。

TOPPERS/ATK2は,最初,Niosプロセッサをターゲットとして開発されました。
Niosでは,ショートデータのベースを指すためのグローバルポインタが1つ
しかありません。そのため,sdataとsrodataが離れた場所に配置されると,
グローバルポインタ相対で届かなくなるため,srodataセクションをRAMに
配置して,1つのグローバルポインタからの相対でアクセスできるようにし
ていました。srodataをRAMに置いても,その番地をメモリ保護ユニットで
書き込み禁止にしてあげれば,保護の観点では問題がないはずです。

RH850では,グローバルポインタが2つあるので,上のような対応は必要な
いはずですが,Niosのコードがそのまま流用されて,今のような実装になっ
ているのではないかと思います。

高田広章
名古屋大学

On 2018/11/28 16:57, 毛利 慶伍 wrote:
> 株式会社ヴィッツ 毛利です。
> 
> arch内に用意されているldファイルはSC1/SC2にて使用されます。
> 今回のSC3/SC4では、メモリ保護にてセクションのソートが必要のため
> ldscript.tfにてcfg2_out.ldとldscript.ldが順番に生成され使用されるはずです。
> 
> ldscript.tfを確認していましたが一つ気になる点があります。
> 
> arch/v850_ghs/ldscript.tf
> 118行目より参照
> ---------------------------------
> $           // small data section の先頭に.rosdataセクションを配置するための
> $           // ダミーセクション配置
>              $IF (MO.SEFLAG[moid] & 0x400) != 0$
> $                $TAB$.rosdata : {$NL$
>                  $TAB$.rosdata : {$NL$
>                  $TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
>                  $NL$$NL$
>              $END$
> ---------------------------------
> 
> STANDARD_RAMにはINTRAMが入っているため、
> この時点でrosdataはINTRAMに問答無用で配置するようになっています。
> また、生成されたldscript.ldを確認しましたが、
> sdataセクションにすべてのrosdataが配置されていました。
> 
> ldscript.ld 生成例
> ---------------------------------
>      .sdata_shared_0_ffffffff_XX ALIGN(32) : {
>          ___start_sram_shared_0_ffffffff_XX = .;
>          ___start_sdata_shared_0_ffffffff_XX = .;
>          ___start_sdata_shared__0_ffffffff_XX = .;
>          A.o(.rosdata) A.o("*.rosdata") A.o("*.rosdata.*") *(.rosdata) *("*.rosdata") *("*.rosdata.*")  *(.rosdata_shared)
>          ___end_sdata_shared__0_ffffffff_XX = .;
>          ___end_sdata_shared_0_ffffffff_XX = .;
>      } > INTRAM
> ---------------------------------
> 
> 以上、よろしくお願いいたします。
> 
> On 2018/11/28 15:15, morita @ adac.co.jp wrote:
>>> 株式会社ヴィッツの毛利と申します。
>>>
>>> 現在、GHSの統合開発環境であるMULTIにて、
>>> OSにTOPPERS/ATK2-SC4を使用しております。
>>> その上で、MULTIの機能の一つであるSDA機能を使用し、
>>> OS含むプロジェクト全体をスモールデータエリアとして適用しております。
>>>
>>> MULTIはビルド時に何らかの法則に従って定数値を
>>> rodataセクションかrosdataセクションに配属させているようですが、
>>> その際にATK2では以下のようにセクションを移動させておりました。
>>>  ・rodata(ROM) → text(ROM)
>>>  ・rosdata(ROM) → sdata(RAM)
>>>
>>> rodataセクションとtextセクションは共にROM配置のため問題ありませんが、
>>> 本来ROM配置のrosdataセクションをRAM配置のsdataセクションに移動させてい
>> るのは何故でしょうか?
>>> ROMに配置するべき定数値をRAMに配置するというのはよろしくないと思われる
>> のですが、
>>> 本対応に関する意図等をご存知の方がおりましたらお教えください。
>>>
>> 直接の関係者ではありませんが、参考に返信しまう。
>>
>>
>> RH850F1H(ルネサスエレクトロニクス)簡易パッケージ の GHS版にある
>>
>> arch/v850_ghs/rh850_f1h_6m.ld (リンクマップファイル)を見てみると
>> .rosdata はちゃんとROMに配置されていますので
>> そちらでそのように変更されたのではないでしょうか?
>>
>>
>>
>> /*
>>   *  RH850/F1L-2Mリンカスクリプト
>>   */
>>
>> MEMORY
>> {
>>      INTROM(raxi) : org = 0x00000000, len = 4M
>>      INTROMPE2    : org = 0x00800000, len = 2M
>>      INTRAM(wax)  : org = 0xfef00000, len = 128k
>>      LRAM_PE1(wax) : org = 0xFEBD0000, len = 192k
>>      LRAM_PE2(wax) : org = 0xFE9D0000, len = 192k
>> }
>>
>>
>>      . = ALIGN(4);
>>      .rosdata : { *(.rosdata) } > INTROM
>>
>>      . = ALIGN(4);
>>      .rodata : { *(.rodata) } > INTROM
>>
>>
>>
>>
>>
>> ========================================
>> 森田 浩<morita @ adac.co.jp>
>> Advanced Data Controls, Corp.
>> Tel: +81 3-3576-5351
>> ========================================
>>
> 
> -- 
>   -----------------------------------------
>   株式会社ヴィッツ
>   組込みシステム開発部
>   セキュアシステムPF開発室
>    毛利 慶伍 (Mouri Keigo)
>    Mail:mouri @ witz-inc.co.jp
>    TEL:052-220-1525
>   -----------------------------------------
>