[Uclinux-h8-devel] Re: PIC support

Zurück zum Archiv-Index

Yoshinori Sato ysato****@users*****
2004年 2月 9日 (月) 02:28:10 JST


At Fri, 06 Feb 2004 10:12:00 -0500 (EST),
Kazu Hirata wrote:
> 
> 佐藤様、
> 
> > ありがとうございます。
> > テストプログラムが正常に読める所までは確認できました。
> > 基本的な動作は問題ないと思います。
> > もう少しいろいろ試してみます。
> 
> こちらこそどうもありがとうございます。実行の試験ですが、2 点、気になり
> ます。
> 
> 1) switch statement が jump table を使う時の試験が必要かもしれません。
>    新たに追加された R_H8_PCREL32 という reloc を使うからです。以下のよ
>    うな program に適当な main() をつけて走らせて頂けると幸いです。
> 
> int g;
> 
> void
> foo (int a)
> {
>   switch (a)
>     {
>     case 0: g = 4;
>     case 1: g = 3;
>     case 2: g = 2;
>     case 3: g = 1;
>     case 4: g = 0;
>     }
> }
> 
> 2) 初期化された大域変数の確認。以下では、p の初期化が ".long g" として
>    行われます。つまり、position independent ではない g に対する絶対位
>    置がそのまま p の中に入ってしまいます。elf2flt がうまいこと直してく
>    れていると良いのですが、自信がありません。
> 
> int g;
> int *p = &g;
> 
> int
> main ()
> {
>   g = 1234;
>   return *p == 1234;
> }

どちらも正常に動作しました。
2の方はnopic用の再配置処理でロード時にアドレス計算していますが、m68kも
同じ仕様なのでこれで問題ないと思います。

これとは関係ありませんが、gasでR_H8_DIR32が出力されるはずなのに、R_H8_GOT32O
が出力されてしまう事があるようです。
こののパッチで直りましたが、別の原因があるかもしれません。

--- binutils-040205/gas/config/tc-h8300.c~	2004-02-09 01:35:14.000000000 +0900
+++ binutils-040205/gas/config/tc-h8300.c	2004-02-09 00:23:07.000000000 +0900
@@ -2031,6 +2031,11 @@
   operand[0].mode = 0;
   operand[1].mode = 0;
   operand[2].mode = 0;
+#ifdef OBJ_ELF
+  operand[0].pic_reloc = pic_none;
+  operand[1].pic_reloc = pic_none;
+  operand[2].pic_reloc = pic_none;
+#endif
 
   if (OP_KIND (instruction->opcode->how) == O_MOVAB
       || OP_KIND (instruction->opcode->how) == O_MOVAW

-- 
Yoshinori Sato
<ysato****@users*****>



Uclinux-h8-devel メーリングリストの案内
Zurück zum Archiv-Index