(toppers-users 2625) Re: TOPPERS/IIMP について (was Re: )

Yoshinao Aoki aoki @ uquest.co.jp
2007年 6月 8日 (金) 18:56:12 JST


青木です。
ご返事ありがとうございます。

At 18:21 07/06/08, Masaki Muranaka wrote:
>こんにちは.
>
>IIMPの公式リリースは全くメンテされていない状況ですので,
>コンフィギュレータのGCC-2.95系以外のビルドは残念ながら
>絶望的です.
>// ちなみに,IIMP後継のHRPカーネルでは,コンフィギュレータが
>// 新設計になりました.

なるほど。。。
HRPのコンフィグレータを使用すれば解決出来そうですね。
TOPPERS/HRPカーネルはまだ一般公開されていませんよね?

>よって,問題3を解決するのが現実的です.
>
>問題はおそらく2つあります.
>
>On 2007/06/08, at 17:53, Yoshinao Aoki wrote:
> > /usr/local/bin/sh-hitachi-elf-ld: 
> /usr/local/lib/gcc/sh-hitachi-elf/3.4.4/ml/m2/libgcc.a(_udivsi3.o): 
> compiled for a little endian system and target is big endian
>
>ツールチェインが持っているライブラリと,IIMPのオブジェクトの間で
>エンディアンの不一致があると言っています.
>/usr/local/lib/gcc/sh-hitachi-elf/3.4.4/ml/m2/libgcc.a
>辺りが直接の原因だと思います.
>ところで,MS7727CP01って,リトルエンディアンマシンだったような
>気がします.banner.cのコマンドラインオプションで-mbが指定されて
>いるようなのですが,大丈夫なのでしょうか.
>ともあれ,コンフィギュレータのせいで置きているエラーではなさそうです.

申し訳ありません。ライブラリの指定が間違っておりました。
ビッグエンディアン、リトルエンディアンの
両方のエンディアンでエンディアン指定によるエラーが
起きないところまで出来ております。

ビッグエンディアン、リトルエンディアン両方を試しており
そのとき一部を修正し忘れたままmakeをしたときのログを張ってしまいました。

/usr/local/lib/gcc/sh-hitachi-elf/3.4.4/m2/libgcc.a
を指定することでエンディアンの違いによるエラーは起きなくなりました。


ターゲットのMS7727CP01はリトル、ビッグどちらでも動作できます。
私は基本的にリトルで動作させているためリトルでコンパイルを行っております。

リトルエンディアンでのコンパイル方法は

/iimp_full/config/sh3/ms7729rse01/Makefile.config
のエンディアンの指定を
SYS_CFLAGS = -ml
へ変更
make depend
を行い中間ファイルを生成、
このとき出力されるリンカスクリプトはビッグエンディアンでしか
コンパイルしないようになっております。

ld.script、Templd.scriptの
OUTPUT_FORMAT("elf32-sh","elf32-sh","elf32-sh")
を
OUTPUT_FORMAT("elf32-shl","elf32-shl","elf32-shl")
に変更することで
リトルエンディアンでコンパイルし、リンクするところまで出来ております。

ただ、中間ファイル生成毎にスクリプトを修正するのも面倒なので
動作を確認するまでビッグエンディアンでコンパイルを行っております。

再度ログを貼り付けます

======================================================
/usr/local/bin/sh-hitachi-elf-gcc -c -m3 -O0 -mb -DLABEL_ASM    -I. 
-I../../include -I../../config/sh3 -I../../config/sh
3/ms7727cp01 -g -Wall -I../../kernel ../../kernel/banner.c
/usr/local/bin/sh-hitachi-elf-ld -T ld.script -M -Map Tempiimp.map 
-o iimp start.o kernel_cfg1.o cpu_support.o sys_suppo
rt.o startup.o banner.o cpu_config.o sys_config.o domain.o memory.o 
task.o wait.o time_event.o syslog.o task_manage.o ta
sk_sync.o task_except.o semaphore.o eventflag.o dataqueue.o 
mailbox.o mempfix.o time_manage.o cyclic.o mempprot.o mboxpr
ot.o sys_manage.o interrupt.o exception.o svc_manage.o 
activate_tex.o  timer.o serial.o logtask.o jsp_util.o sample.o sa
mple1.o sample2.o sample3.o shared.o function.o vasyslog.o 
jsp_perror.o strerror.o   /usr/local/lib/gcc/sh-hitachi-elf/3
.4.4/m2/libgcc.a
/usr/local/bin/sh-hitachi-elf-ld: section .bss_DOM1 
[000000000002e000 -> 000000000002e00b] overlaps section .data_kernel
  [000000000002de7c -> 000000000002e0b3]
make: *** [Tempiimp.map] Error 1
======================================================

> > /usr/local/bin/sh-hitachi-elf-ld: section .bss_DOM1 
> [000000000002e000 -> 000000000002e00b] overlaps 
> section .data_kernel [000000000002de7c -> 000000000002e0b3]
>
>カーネルドメイン用の領域とDOM1用の領域が重なっていると言っています.
>IIMPでは,リンカスクリプトをコンフィギュレータが吐きますから,
>コンフィギュレータにバグがある可能性はありますが…とりあえず,
>エンディアンの問題をクリアするほうが先決だと思います.
>
>--
>from もなか