パスワードを忘れた? アカウント作成
359489 journal

okuの日記: Linux-2.6.0-test4-pc98

日記 by oku

Linux-2.6.0-test4 を PC-9800 向けにガシガシほげり中です。 今、ぶつかっている難題は __udivdi3()です。

この関数は long long の除算をすると、gcc が call してしまう関数らしいのですが、libgcc.a の関数であるため kernel と link することはできません。

なぜ PC-98x1 だと long long の除算が出てくるかというと、現時点では想像ですが、TICK_NSEC や TICK_USEC がマクロ定数でない (PC-98x1 にはシステムクロックが 5MHz 系のマシンと 8MHz 系のマシンがあるためコンパイル時点で定数にできない) ため、コンパイル時点で最適化が効かないせいではないかな~と。 SH や SPARC は自前の __udivdi3()を持っているので、PC-98x1 subarchitecture にも持たせたったらええやん、という方法もあるのですが、arch はあくまで i386 なのでちょっと不格好なのは否めません。

取り敢えず、解として検討中なのは、itimer.h の中でプリミティブな static __inline__ __udivdi3() を定義してしまおうかな~ (もちろん、#ifdef CONFIG_X86_PC9800 で囲って) という考えです。 美醜はさておき、動かすだけなら最短距離のような気がしますし。

続報: 2003-09-16

__udivdi3()は実装して、ともかく boot することは出来たのですが、login の遥か手前 (/proc と /dev/pts を mount した直後) にシステムが固まります。 原因不明につき、相当断念気味...。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...