(toppers-users 28) TOPPERS/JSP On PPC Linux
Takayuki YAMAGUCHI
tyamaguchi @ geocities.co.jp
2000年 11月 21日 (火) 21:34:06 JST
はじめまして。
現在、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 @ geocities.co.jp> or <yamaguchi @ ppc.linux.or.jp>