Renesas Synergy™

FAQ 1008205 : タイプ、属性、名前が同じセクションを、異なるメモリ領域に分けて配置したいのですが?

回答

メモリのロードする単位はセグメントなので、 同じ性質のセクションを異なるセグメントに割り付けることになります。


このとき、例1のようにすると、すべての.textセクションがTEXT1セグメントに割り付いています。

例1)
-----------------------------------
TEXT1 : !LOAD ?RX V0x100000{
    .text = $PROGBITS ?AX .text;
};
-----------------------------------

このような場合、セクションにファイル名を指定することで、 同じ性質のセクションを異なるセグメントに割り付けることができます。

例2)
-------------------------------------------------------
TEXT1 : !LOAD ?RX V0x100000{
    text1 = $PROGBITS ?AX .text {start.o};
};

TEXT2 : !LOAD ?RX V0x200000{
    text2 = $PROGBITS ?AX .text {main.o sub.o};
};
-------------------------------------------------------

例2では、start.oに含まれる.textセクションは、 0x100000番地に置かれるTEXT1セグメントに割り付けられ、 main.oとsub.oに含まれる.textセクションは、 0x200000番地に置かれるTEXT2セグメントに割り付けられます。



例2のような場合、出力セクション名も忘れずに異なる名前にしてください (例では"text1"と"text2")。 同じ名前にすると、リンク時にエラーになります。



例2の記述で、TEXT2に対してはファイル名を省略することができます。

---------------------------------------------
TEXT1 : !LOAD ?RX V0x100000{
    text1 = $PROGBITS ?AX .text {start.o};
};

TEXT2 : !LOAD ?RX V0x200000{
    text2 = $PROGBITS ?AX .text;
};
---------------------------------------------

この記述は、TEXT1で指定したファイル以外に含まれる.textセクションが、 すべてTEXT2に割り付けることを示します。

ただし、CA850 V2.41以前では、TEXT1(下位のアドレスのセグメント)に対してファイル名を省略すると、すべての.textセクションがTEXT1に割り付けられ、TEXT2は生成されないので注意してください。

----------------------------------------
TEXT1 : !LOAD ?RX V0x100000{
    text1 = $PROGBITS ?AX .text;
};

TEXT2 : !LOAD ?RX V0x200000{
    text2 = $PROGBITS ?AX .text {main.o sub.o};
};
----------------------------------------

上記の記述では、main.oとsub.oの.textセクションも、TEXT1セグメントに割り付けられています。

 

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください