Renesas Synergy™

FAQ 1008181 : リンク時に、メッセージ "can not find GP-symbol in segment "*****" of illegal label reference for local symbol in file "*****" (section:*****, offset:*****,type:*****). local symbol is allocated in section "*****"(file:*****)." が表示されますが、どうしてですか?

回答

.dataセクション、.bss セクションが、gp 相対のセクションとして指定されていないためです。

Cコンパイラは .data セクション、.bss セクションへのアクセスは、gp 相対による 2 命令参照のコードを出力します。
したがって、どの領域にあってもアクセスが可能となっています。
自分でセグメントを data 属性、bss 属性として生成した場合、 そのセグメントをシンボル・ディレクティブにてgp相対アクセスできるものとして指定しないと、 上記のようなメッセージが表示されます。

たとえば、DATA、DATA2 というセグメントを次のように指定したとします。

DATA : !LOAD ?RW V0x0100000 {
.data = $PROGBITS ?AW .data;
.sdata = $PROGBITS ?AWG .sdata;
q .sbss = $NOBITS ?AWG .sbss;
.bss = $NOBITS ?AW .bss;
};

DATA2 : !LOAD ?RW V0x03E00000 {
device.bss = $NOBITS ?AW device.bss;
};

この際、gp のシンボル・ディレクティブを

__gp_DATA @ %GP_SYMBOL &__tp_TEXT { DATA DATA2 };

と指定すると、メッセージは表示されなくなります。

 

適用製品

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