logo
 
WebChain/2 Previous Ramdom Jump WebChain/2 Home Next
 メインメニュー
 サイト内検索

検索オプション
 ログイン
ユーザID または e-mail:

パスワード:

IDとパスワードを記憶

パスワード紛失

新規登録
 IRC(チャット)
#OS/2:*.jp
楽しみ方はこの辺参照.
フォーラム一覧   -   トピック一覧
   アプリ
     Cairo support for OS/2
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
orca
投稿日時: 05/08/25 23:22
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
ほかにも同様のトラブルの方が現われるとは, 心強い … じゃなくて。

KAMUIさんは書きました:
cairo.dll 差し替えて見ました。
これまでは clock しか動きませんでしたが
font と svg も動く様になりました m(__)m

ウチは SNAP/se build 446 に S3 Savage4 (APG/16MB)環境。

σ(^^) が現在使ってるのも同じ 446です。
ドライバのバージョンというよりは画面の解像度や色数に影響を受けませんかねぇ….

解像度は前の追記にも書いたけど, ほかにも 640×480, 800×600, 1024×768, 1152×864も試してみたです。 色数も 256, 16Mとか。 で, 標準 VGAのドライバー, GRADDのVESA(800×600) も試してみたです。

あと考えられるのは, 実は DOSモードを導入していないので, ソレかも, とか。
本来はそんなことでエラーになるとは思えないけど, http://www.os2.jp/anon-ftp/pub/os2/orca/ にある shapes.zipのソースを見ると分かるかもだけど, 取り立てて変わったプログラムじゃないのに, σ(^^) のトコだと環境変数 SHAPESをセットするだけで動かなくなるです。

他には, もうカーネルの(バージョンの?)問題? みたいな
orca
投稿日時: 05/08/25 23:29
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
非公開 API というのは cairo-os2-surface.c 中で使われている GpiEnableYInversion とかそのへんです。

OS/2の APIはさっぱりだけど, ここ(↓)に公開されているので, 完全に非公開ではなくソレなりに非公開なのかも。
http://wiki.netlabs.org/index.php/GpiQueryYInversion()

記されたのは今月のよーれすね。
chagrin
投稿日時: 05/08/26 02:34
Not too shy to talk
登録日: 03/01/27
居住地: yokohama, japan
投稿: 39
Re: Cairo support for OS/2
shapes.exe を試してみました.環境変数 SHAPES を設定すると,
私の環境でも SYS3180 で落ちてくれます.逆汗してみると,落ちるのは
コプロセッサ命令でなくcallですね(笑) ちなみに CPU は Cyrix-MIIです.
MIIって,コプロ命令はキューに詰め込んで整数命令を先走るので,
変なところで止まるのでしょうか... ま,それは良いとして.

shapes.exe にバイナリパッチを当てて,コプロのコントロールワードを取ると,
0x0362 とのことです.これを強制的に 0x37f に変更してみると,
落ちずに動くようになりました.

| 0104AE DB5C24 50 FISTP dword ptr [ESP+50h]
この命令で無効演算例外が起きて落ちると.

sava さん曰くの,fpreset だか controlfp だかで,コプロ設定(の例外マスク)
を調整してあげれば良いんだと思いますが...
sava
投稿日時: 05/08/26 03:17
Quite a regular
登録日: 03/01/27
居住地: ちば…たぶん
投稿: 41
Re: Cairo support for OS/2
shapes はうちの環境(例によって qemu ですが)ではとりあえず問題なく動くようです。

FPU の初期化/制御ワード再設定できるバージョンをためしに作ってみました。

shapes2.zip

うーん、環境によって例外マスクの外れ方が違うんでしょうかね…
chagrin
投稿日時: 05/08/26 05:22
Not too shy to talk
登録日: 03/01/27
居住地: yokohama, japan
投稿: 39
Re: Cairo support for OS/2
-shapes つけて実行.Cyrix-MII, MCP1, Maxtox G400, 2.36.106
FPU control word = 0x127f
Rounding : nearest
Precision : 53bits
Exception Masks : INV_OP DENORMAL ZERO_DIV OVERFLOW UNDERFLOW PRECISION

WinCreateMsgQueue
FPU control word = 0x0362
Rounding : nearest
Precision : 64bits
Exception Masks : DENORMAL PRECISION

y_intersect ==
SYS1808: 処理が停止しています。
ソフトウェア診断コード(例外コード)は 0097 です。

-fpreset や -reassign をつけると,動きます.
例外マスクの外れ方は同じに見えます.う〜ん,謎だ.
orca
投稿日時: 05/08/26 08:24
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
shapes2試してみたです。
異常終了のときのメッセージは chagrinさんとまったく同じ。
んで, -fpreset -reassign のどちらか片方でも付けると, FPU control wordが 0x0362 → 0x127f に戻って, (-)の最大値が普通に表示され処理は続行するです。
sava
投稿日時: 05/08/26 22:53
Quite a regular
登録日: 03/01/27
居住地: ちば…たぶん
投稿: 41
Re: Cairo support for OS/2
落ちる環境と落ちない環境がある、というのが実は素朴に疑問だったりするのです。
(これが落ちるのだとしたら、FPU を用いる他の PM アプリでも予期せぬ動作をする可能性があるわけで)

Winなんちゃらの中で FPU 関係のエラーがなんか出ていて、それが残ってしまっているのかも…と考えたのですがステータスワード見れないとわからないのでまた少し追加してみました。

shapes3.zip

他のコンパイラ(gcc, VAC)だとどうなるんですかね。

# もうだんだん Cairo そのものから外れていくような…
orca
投稿日時: 05/08/26 23:46
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
こんばんは。
savaさんは書きました:
他のコンパイラ(gcc, VAC)だとどうなるんですかね。
# もうだんだん Cairo そのものから外れていくような…

shapes2は gccでも試してみたです。FPU control wordは 0x037f → 0x0362 → 0x037f
あとは同じで, -shapes で異常終了するです。
chagrin
投稿日時: 05/08/26 23:47
Not too shy to talk
登録日: 03/01/27
居住地: yokohama, japan
投稿: 39
Re: Cairo support for OS/2
#完全にcairoから外れて発言してます...

shapes3 -shapes -reassign の末尾.
-shapes だけだと落ちてしまって,ステータスが見えないので.

y_intersect ==
-2147483648
FPU status word = 0x4021
TOS C3 C2 C1 C0 ERROR-SUMMARY STACK-FAULT EXCEPTION: PE UE OE ZE DE IE
0 1 0 0 0 0 0 1 0 0 0 0 1

IE が立って,かつマスクされていない(0x0362)時は落ちてしまうと.
これ自体はとっても明快ですが,なんだって環境依存でこんな事になるのか,
とっても謎です.

カーネルとか,os2ldr(この娘が割り込み管理してたりしない?)とか,
ソフトウェア側に何かあるのでしょうか?
achain
投稿日時: 05/08/26 23:52
Webmaster
登録日: 03/01/26
居住地: とーきょー じゃぺーん
投稿: 2597
Re: Cairo support for OS/2
カーネルとか,os2ldr(この娘が割り込み管理してたりしない?)とか,
ソフトウェア側に何かあるのでしょうか?


浮動小数点ってことで実は数日前から気になっていたのですが,今回の件ってまさに「この件」と同じなのでは….
chagrin
投稿日時: 05/08/27 00:20
Not too shy to talk
登録日: 03/01/27
居住地: yokohama, japan
投稿: 39
Re: Cairo support for OS/2
最新カーネルを拾ってきてはあるものの,試している娘にいれているのは,
まさに,14.100o_W4 debug version + cyrix patch でした.
OS は連座せず,アプリケーションだけが処刑される,のかな.
真面目に処理しようとする副作用の可能性がありますね.


#関係ないけど,
>これもひとえに自分のおかげです(バキ

うんうん,その通りだと思いますよん.
orca
投稿日時: 05/08/27 07:17
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
testcaseの kernelをいくつか揃えてたけど, ソレでもダメでした。
uni20050129.zip
uni20050317.zip
起動時に, 画面の左下が替わってるので置き換えは大丈夫のよーだけど, 結果は相変わらず。

chagrinさんの環境では直ったのでしょーか。
sava
投稿日時: 05/08/28 03:38
Quite a regular
登録日: 03/01/27
居住地: ちば…たぶん
投稿: 41
Re: Cairo support for OS/2
・-fpreset と -reassign とでステータスレジスタの値が異なるか
・タグワードの内容(-tag オプションで見れます)

といったあたりはいかがでしょうか…。
chagrin
投稿日時: 05/08/28 03:40
Not too shy to talk
登録日: 03/01/27
居住地: yokohama, japan
投稿: 39
Re: Cairo support for OS/2
直りません.

カーネルを 14.62_W4 (とっても古い)と 14.104a_W4 に入れ替えてみましたが,
結果は全く変わりません.同じところで同じエラー.

alpref.inf によると,「If the value is too large to represent as an integer,
an I exception is raised. The masked response is to write the most negative
integer to memory.」とのことです.エラーになるのが正しいと読めます.
なぜ,環境によっては動くのだろう...

環境によっては動いてしまうものの,本来は orca さんが取ったような
レンジチックを行うのが,あるべき姿なのかも.


ちなみに,shapes3.exe, printf("%d \n", (long)tmp);
の double から long へのキャストの実体は以下の通り.

010597 FLD qword ptr[ESP+48h]
01059B CALL _000109D4
0105A0 FISTP dword ptr[ESP+50h] ; ここがエラーになる.

_000109D4 PUSH 00000C3Fh ; chop, 24bit, all exception masks
0109D9 FNSTCW word ptr[ESP+02h]
0109DD FLDCW word ptr[ESP]
0109E0 FRNDINT
0109E2 FLDCW word ptr[ESP+02h]
0109E6 LEA ESP,[ESP+04h]
0109EA RET

#あれ,-tag をつけると動くよ.出力はすべてempty.ますます訳が分からない.
sava
投稿日時: 05/08/28 04:56
Quite a regular
登録日: 03/01/27
居住地: ちば…たぶん
投稿: 41
Re: Cairo support for OS/2

chagrinさんは書きました:

#あれ,-tag をつけると動くよ.出力はすべてempty.ますます訳が分からない.


うわ、すいません。f[n]stenv は実行後に例外をマスクするんだった。制御ワードを書き戻さないとダメでした。

それはそれとして、逆アセンブルリストを見てすこし思ったことがあるのですが(FRNDINT で丸め込んでいるはずなのに、その後の FISTP でエラーが出るのがなんかヘン)、さすがにもう Cairo と全然関係ないように思えます…。
orca
投稿日時: 05/08/28 12:12
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
-fpreset と -reassign とでステータスレジスタの値が異なるか

σ(^^) のトコでは, shapes3 -shapes -fpreset も shapes3 -shapes -reassign も まったく同じ内容れす。
そのときの FPU status word は 0x4021です。

んで, uni20050317.zipのカーネルは 14.103a だったはずなので, その後のカーネルもたぶんダメってことれすね。(T-T)

それはそれとして、逆アセンブルリストを見てすこし思ったことがあるのですが(FRNDINT で丸め込んでいるはずなのに、その後の FISTP でエラーが出るのがなんかヘン)

異常終了を引き起こす値は, 普通に doubleの直値として記述できないよーなので (普通に書くと異常にならない), そーゆートコも影響してるのかもです。
ソレは 8Byte 16進数では 0x53451c1041e27ecf だったです。


追記: cairoの話に持ってくと …
調べたところ, C言語では 浮動小数点数 → 整数への変換で, 範囲外なら その動作は未定義だそーれす。
もしソレが異常終了しても構わないってことなら, 今回のコレは cairoの問題と言えなくもないかも。
って, 言いがかりっぽい感じ。
achain
投稿日時: 05/08/30 17:55
Webmaster
登録日: 03/01/26
居住地: とーきょー じゃぺーん
投稿: 2597
Re: Cairo support for OS/2
どこに繋げれば良いのか悩んだ末,最後の投稿に繋げます.

いえね,ひところmozilla.os2ニュースグループで「MozillaやFirefoxがFP exception(SYS3183等)で落ちる」といった報告が多数あったんですよ.ただ今回のCairoと同じく私の環境では特に問題なかったので,真剣に話題を追っておらず,例のkernel更新のしばらく後に「Mozilla FP exception bugが直った」といった投稿を見たような気がしたので,「ああ,結局kernelが悪かったんだな」となんとなく思っておりました.

#長い前振りだ…

で,今回改めて調べてみたところ,MozillaのFP Exception BugはきっちりMozilla内で修正されておりました.関連するBugzilla項目を挙げておきます.
https://bugzilla.mozilla.org/show_bug.cgi?id=224487
https://bugzilla.mozilla.org/show_bug.cgi?id=280813

上のほうのバグのコメントから要約すると,「OS/2でなにがしかのシステムコールを行った際にFPコントロールワードが変化してしまうことがある.だから計算を行なう前にいちいちコントロールワードを設定することにした」といった感じでしょうか.

Cairoの問題もこれと同じだとすると,同じ手法を採用するしかないのかな.また私の環境で問題が出ないのはその「なにがしかのシステムコール」(←主にPM関係のようですが)がたまたまFPコントロールレジスタをいじらない環境/Fixレベル/組み合わせ…なのでしょうかね.
orca
投稿日時: 05/08/31 15:26
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
雰囲気でゆーと, マスクが外れるのは仕方がないことって感じれすね。ホントかな。
「OS/2でなにがしかのシステムコールを行った際にFPコントロールワードが変化してしまうことがある.だから計算を行なう前にいちいちコントロールワードを設定することにした」といった感じでしょうか.

Cairoの問題もこれと同じだとすると,同じ手法を採用するしかないのかな.また私の環境で問題が出ないのはその「なにがしかのシステムコール」(←主にPM関係のようですが)がたまたまFPコントロールレジスタをいじらない環境/Fixレベル/組み合わせ…なのでしょうかね.


で, 環境で違うのは, ひとつには CPUがあるかもです。
FPUが, 前からのものと違い 別の用途に利用されたり(MMXとか), 一風変わったブツが追加されたり, そんなこんなで いつもマスクしてる訳にはいかなくなった … だとか。(あくまで想像だけど)
achain
投稿日時: 05/09/03 16:17
Webmaster
登録日: 03/01/26
居住地: とーきょー じゃぺーん
投稿: 2597
Re: Cairo support for OS/2
Orcaさん版cairo.zipをここに移しておきました.(古いのはoldサブディレクトリに移動してあります)
ただしこのOrcaさん版テストアプリ新バージョン,うちではSYS2070が出て起動しませんでした.アプリとcairo.dllとの辻褄が合っていないような….
09-03-2005  15:48:44  SYS2070  PID 0357  TID 0001  Slot 00c2
F:\TMP\CAIRO\FONT.EXE
FONT->CAIRO.190
182


さて,Cairo/2コミュニティってどこかに無いんでしょうか.問題点をDoodleさんに報告するだけならメールで良いのですが,オリジナルのCairo/2テストアプリでFP exceptionが出るのは我々(除くachain)だけなのか,それとも全世界的な問題なのか…も知りたいところ.
orca
投稿日時: 05/09/03 20:35
Home away from home
登録日: 03/01/28
居住地:
投稿: 269
Re: Cairo support for OS/2
achainさんは書きました:
Orcaさん版cairo.zipをここに移しておきました.(古いのはoldサブディレクトリに移動してあります)
ただしこのOrcaさん版テストアプリ新バージョン,うちではSYS2070が出て起動しませんでした.アプリとcairo.dllとの辻褄が合っていないような….

dllはコレでしょーか?
05-09-02 19:55 1209474 0 cairo.dll

さて,Cairo/2コミュニティってどこかに無いんでしょうか.問題点をDoodleさんに報告するだけならメールで良いのですが,オリジナルのCairo/2テストアプリでFP exceptionが出るのは我々(除くachain)だけなのか,それとも全世界的な問題なのか…も知りたいところ.

Cairo/2コミュニティーつったら, まずはココですね。
netlabs.org探しても見つからなかったし。

んで, この問題は ThinkPad T23なら起こる可能性が高い, のかもです。


追記: cairo/2じゃなく cairoコミュニティーなら, cairographics.orgML から http://lists.freedesktop.org/archives/cairo/ に辿り着くことできるです。
« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Powered by IBM OS/2 Warp, Apache, PHP, MySQL and XOOPS Cube