(toppers-users 2622)

Yoshinao Aoki aoki @ uquest.co.jp
2007年 6月 8日 (金) 17:53:38 JST


初めまして、東電ユークエストの青木と申します。
よろしくお願いいたします。

環境は
WindowsXP Pro SP2
cygwin
gcc : 3.4.4
binutils : 2.17
newlib : 1.14.0
を使用しております。

現在T-engine MS7727CP01上に
TOPPERS/IIMPの構築を試みています。

早速ですが質問です。
1.gcc3系でIIMPのコンフィグレータのコンパイルがうまくいきません。
2.コンパイルしたコンフィグレータを使用すると
  Segmentation faultが起きコアダンプを吐く
3.IIMPのコンパイル時のリンクがうまくいきません。



問題1
gcc(g++)は3.4.4を使用しておりますが
IIMPのコンフィグレータのc++のソースは
gcc(g++)2.95.xに最適化?されておりコンパイルできません。
もし最近(3系)のgcc(g++)に合わせるにはどのように
修正すればよろしいでしょうか。

お恥ずかしい話ですが私はc++について詳しくなく
g++Ver3系を境に文法が変わったということぐらいしか
わかっておりません。。。

そこでcygwinのインストーラからgcc(g++)2.95.3-10である
gcc-2(g++-2)をインストールし、
コンフィグレータのMakefileのCCを
CC = g++
から
CC = g++-2
に変更することでコンパイルが出来ました。
しかしリンク時に
Info: resolving __impure_ptr by linking to __imp___impure_ptr (auto-import)
というメッセージが出てしまいました。
ただ、調べたところあまり重要な問題ではないらしいですが心配です。。。
問題ないでしょうか?



問題2
上記で作成したコンフィグレータを使用して
IIMPのサンプルプログラム /iimp_full/prg/smpl_sh7729r/src/shinki
をコンパイルしようと
Make depend
を行うと

========================================================================
$ make depend
/usr/local/bin/sh-hitachi-elf-cpp -I. -I../../include 
-I../../config/sh3 -I../../config/sh3/ms7727cp01 -DLABEL_ASM 
sample.cfg -D_MACRO_ONLY \
	|  ../../cfg/path1/cfg1 -s -id -cfg -obj -L. -ls -ext -p=sh3 -pp sh3
mITRON 4.0 Kernel Configurator ver 8.0 for TOPPERS/IIMP
In file included from sample.cfg:249:
../../include/../systask/serial.cfg:9:1: warning: "_MACRO_ONLY" redefined
<command line>:2:1: warning: this is the location of the previous definition
/bin/sh: line 1:  1956 Done 
/usr/local/bin/sh-hitachi-elf-cpp -I. -I../../include 
-I../../config/sh3 -I../../config/sh3/ms7727cp01 -DLABEL_ASM 
sample.cfg -D_MACRO_ONLY
       3784 Segmentation fault      (core dumped) 
| ../../cfg/path1/cfg1 -s -id -cfg -obj -L. -ls -ext -p=sh3 -pp sh3
make: *** [kernel_cfg1.c] Error 139
========================================================================

となってしまいます。gdbで追いかけてみたところ、
プリプロセッサの出力を読み込んで
ファイル出力をするらしいところで例外が発生しているようです。

/iimp_full/cfg/path1/directorymap.cpp - 504行目
void Directory::Store(ostream * out) という関数の

     out->write((const char *)&type, sizeof(type));

の処理に入ると例外が起きているようです。
なにかお気づきの点などありましたらよろしくお願いいたします。



問題3
配布されているIIMPにはコンパイル済みのコンフィグレータが同梱されております。
この同梱されているコンフィグレータを使用した場合の問題です。

make depend
make
を行い、リンカスクリプトを使用してリンクするところで以下のエラーが発生 
いたします。

========================================================================
/usr/local/bin/sh-hitachi-elf-gcc -c -m3 -O0 -mb -DLABEL_ASM    -I. 
-I../../include -I../../config/sh3 -I../../config/sh3/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_support.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 task_sync.o task_except.o 
semaphore.o eventflag.o dataqueue.o mailbox.o mempfix.o time_manage.o 
cyclic.o mempprot.o mboxprot.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 sample1.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/ml/m2/libgcc.a
/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
/usr/local/bin/sh-hitachi-elf-ld: 
/usr/local/lib/gcc/sh-hitachi-elf/3.4.4/ml/m2/libgcc.a(_udivsi3.o): 
uses instructionswhich are incompatible with instructions used in 
previous modules
/usr/local/bin/sh-hitachi-elf-ld: failed to merge target specific 
data of file /usr/local/lib/gcc/sh-hitachi-elf/3.4.4/ml/m2/libgcc.a(_udivsi3.o)
/usr/local/bin/sh-hitachi-elf-ld: section .bss_DOM1 [000000000002e000 
-> 000000000002e00b] overlaps section .data_kernel [000000000002de7c 
-> 000000000002e0b3]
make: *** [Tempiimp.map] Error 1
========================================================================

これは同梱されているコンフィグレータがリンクしている
binutilsとバージョンが違うため起きていると思い
コンフィグレータをコンパイルしようとして、問題1、2に当たりました。



その他
問題1、2、3に直面するまでに
・/iimp_full/cfg/path1/Makefile
    $(CC) $(CFLAGS) $(TOBS) $(KOBS) $(OBS) ${PATH1AOBJS} $(LIBS) -o cfg1
  を
    $(CC) $(CFLAGS) $(TOBS) $(KOBS) ${PATH1AOBJS} $(OBS) $(LIBS) -o cfg1
  に修正
・/iimp_full/config/sh3/makeoffset.c の BIT_REF 修正
  toppers-users 1207 参照
・/iimp_full/utils 以下のスクリプトの修正
  toppers-users 849 参照
・/iimp_full/config/sh3/cpu_config.c 124行目
  extern ID tmax_domid;
  をコメントアウト

などの修正を行っています。(挙げていたらきりがないですけども)

どのようにすれば問題1、2、3が解決するでしょうか。
以上よろしくお願いいたします。