[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 28) TOPPERS/JSP On PPC Linux



はじめまして。

現在、Linuxのシミュレーション環境はIntelのみですが、
PPCのLinuxでの構築に挑戦してみました。

PPCのLinuxの場合、/usr/include/bits/setjmp.hが

(前の部分、ばっさり略)
#if defined __USE_MISC || defined _ASM
# define JB_GPR1   0  /* Also known as the stack pointer */
# define JB_GPR2   1
# define JB_LR     2  /* The address we will return to */
# define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18 in total */
# define JB_CR     21 /* Condition code registers. */
# define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total */
#endif
(後ろも、ばっさり略)

という定義になっていますので、config/linuxのcpu_context.hとsys_config.hに
あるJB_PCとJB_SPをそれぞれJB_LRとJB_GPR1に変換してコンパイルしたところ、
コンパイルに成功し、しかもできたプログラムもあっさり起動しました。

が、あっさり起動したのはいいけれども、Intel版では問題なくできた"r"キーでの
taskのswitchingがPPCでは全くできず、キーを押すたびに

E_CTX reported by `iwup_tsk(TSK_LINUX_SIGIO)' in line 56 of
`../systask/linux_sigio.c'

というエラーが出て、taskが切り替わりません。

それで、調べてみると、config/linux/cpu_config.hのインライン関数current_stackの

    sigaltstack(((void *)0), &ss);

を実行したときに、構造体ssのメンバss.ss_flagsを1にしてくれないみたいです。

#Intel版だと、ちゃんと1にしてくれるんだけどなぁ。なんで?




----
やまぐちたかゆき
<tyamaguchi at geocities co jp> or <yamaguchi at ppc linux or jp>