昔の最近の出来事(2003.04)

2003/04/30

出張。

2003/04/29

日が傾いた頃に起床。

先日のppcsimのSegfaultを追いかけ。シミュレータメモリリストを 眺めてみると、何故か異なるメモリブロックに同じ先頭ポインタが 入っているのを発見。Segfaultの直接の原因は、同じポインタが 入っている二つのリストを順にfree()した時に、二番目のリストのポインタは 一番目のリストのfree()により既にfree()されている為、死ぬという 事でした。で、誰が 同じメモリポインタを返しているのかを追いかけたところ、 なんとmalloc()が返しており、なんかちょっとお手上げ気味。 因みに、brk()の エミュレーションで使用される領域とテキスト領域とがぶつかって いたので、シミュレータ上のプログラムがbrk()によるメモリ割り当てを 行った後でデータを書きかえると同時にテキスト領域が潰された結果、 先日のようなUnknownInstructionが発生したものと思われます。 この辺を手がかりに、Changelogの履歴を探ってみるのが先かも。

Changelogをみた所、2003/02にnewlibのmallocr.cに少し手が入って いるようだったので、それより以前の2003/01頃のsnapshotのソースと 比較した所、コードレベルの違いは全く無し(インデントでタブとスペース の違いはあった.diff -b で差分無し)でした。謎。
こんなのだったら簡単な再現プログラムで落ちそうな感じだったので、 書いてみたところ、バッチリ再現(^^;

test> cat malloc_test.c
#include <stdlib.h>
#include <stdio.h>

//#define MALLOC_SIZE 0x00fffff4
#define MALLOC_SIZE 0x01000000

int main()
{
  unsigned char *p[2] ;

  p[0]=malloc(MALLOC_SIZE) ;
  if( p[0]==NULL ){
    printf("malloc error 0\n") ;
    exit(-1) ;
  }
  p[1]=malloc(MALLOC_SIZE) ;
  if( p[1]==NULL ){
    printf("malloc error 1\n") ;
    exit(-1) ;
  }
  printf("0 : 0x%08x\n",(unsigned int)p[0]) ;
  printf("1 : 0x%08x\n",(unsigned int)p[1]) ;

  free(p[0]) ;
  free(p[1]) ;
  exit(0) ;
}
  
test> gcc malloc_test.c
test> ./a.exe 
0 : 0x866ab008
1 : 0x866ab008
Segmentation fault (core dumped)

で、MALLOC_SIZEが0x00fffff4まではエラーせず割り当てられますが、 0x00fffff5以上だと同じポインタをmalloc()が返して来て、結果 double free()となってしまいSegfaultで死ぬ様です。巨大なメモリ割り当て を行なわなければ大丈夫という感じなので、一般に問題が顕在化して いないだけなのかも。むぅ。

2003/02/11まではppcsimで何かやっていたので、その時は別に このようなエラーが出なかったところを見ると、2003/03にリリース された1.3.21から変で、1.3.20〜1.3.21の間の変更に秘密がありそうな 予感。少なくとも 1.3.19ではppcsim+povrayで使っていたので、ここまで戻れば問題は 出ないと思われ。

.......1.3.20のchangelogの中に 「Set up "resort to mmap" threshold in malloc to 16M. 」と いうのがあるのですが、これぁどういう意味かしら?(爆死) 閾値が16MBにあるのでそれ以内に入れろって事?でもそれだと NULLを返して失敗すれば良いのに?ここは的ハズレか.......

そんな感じで明日から出張です。

2003/04/28

少し早めに帰着。ふぅ。

Cygwinのスナップショットの新しいのが出ていたのでbuild。でも、 先日のVirtualFreeで失敗する件は変化無し。
少しソースを眺めてみたところ、メッセージは winsup/cygwin/cygthread.cc:cygthread::terminate_thread()内 から出力されている模様。ここまではエラーメッセージ通り。 で、次のような感じになっているようですが、

   248    while (!stack_ptr)
   249      low_priority_sleep (0);
   250  
   251    MEMORY_BASIC_INFORMATION m;
   252    memset (&m, 0, sizeof (m));
   253    (void) VirtualQuery (stack_ptr, &m, sizeof m);
   254  
   255    if (!m.RegionSize)
   256      system_printf ("m.RegionSize 0?  stack_ptr %p", stack_ptr);
   257    else if (!VirtualFree (m.AllocationBase, 0, MEM_RELEASE))
   258      system_printf ("VirtualFree of allocation base %p<%p> failed, %E",
   259                     stack_ptr, m.AllocationBase);

VirtualQuery()の動作がよく判らなくて死亡。また、 system_printf()内の%Eは、以前forkバグを調べた時、GetLastError() と同じコードを表示していたので、今もそうだろうと思ったのですが、 それを見ると、先日の結果は error 0 で、w32api/winerror.hのそれを 見ると、0は「#define NO_ERROR 0L」で、別にエラーじゃない気分。 なんのこっちゃ。
このまま使うとメモリリークしそうな雰囲気が漂いまくりですが、 threadの破棄と思われる操作なので、threadの終了が子プロセスの 終了コードに影響しなければ、configureなどはエラーしないっぽい感じ。 しかも、エラーしても、エラー処理をするでもなく、そのまま ハンドラとかポインタとかをNULLで塗りつぶして先に進んでいるので、 尚更エラーすると何が起こるのか謎。むぅ、最後のsystem_printf() を削ってしまうか!(コラコラ;

「DEAR BOYS」 とか 「LASTEXILE」 とか観たり。DEARの方はなんか動き にスピードが無い感じ。EXILEの方はなんかよくわからんです。 変なメカ物ですか?
「秋葉☆りむじん」。「秋葉な連中」の線上にある新番組らしいのですが、 なんだか連中の頃とは趣向が違うというか、笑いのベクトルが 違うというか。てゆーか、秋葉かんけー無いじゃんって感じ。 インターネットランキングの方をメインに出しているのは、 連中に出てきた秋葉ちゃんのセレクトやコメントでは一般人が 付いて行けないからですか? そうですか....(<ってそうなの?)

gcc-3.2.3のppcクロスgccのbuildはどうにか完了。make後、 /tmpに大量に一時ファイルが生成されたままになっているのが 謎ですが それはそれとして。make installしてPOV-Ray 3.5を ppcコンパイル。コンパイルには問題無し。で、ppcsimで実行 した所、何故かUnknownInstruction。objdumpでpovrayバイナリ を確認しても、別に変な命令ではありません。もう一度 ppcsim上で実行した後、UnknownInstructionが出たところで、 その命令を逆アセンブルした所、確かに変な命令になって います。むぅ。たまたま取ってあった古いppcsim実行ファイル を使ってみた所、エラーせずシミュレーション終了。 あぁ、どうやらppcsimの方がどっかで壊れたらしい(汗;
で、ppcsimのコンパイルでコンパイルオプションを変えて みるも状況変わらず。しかも、povrayシミュ―レートでの ただのヘルプ出力でも、ヘルプ出力を終えて最後にプロセスを 削除する部分でSegfaultしていて、free()の中のdlfree()とやらで 例外が発生している模様。リリース時の確認で取っておいた昔 のバイナリを順に試すと、0.92はOKで、0.93以降がNGの 模様。むぅ。
デバッガで追った所、あるメモリブロックを開放する時、 何故かそのブロックがヘンテコな領域に割り当たっている模様。

(gdb) 
21            free(proc_list->proc[id].mem[i]) ;
(gdb) print proc_list->proc[id].mem[i]
$5 = (unsigned char *) 0x8d020008 <Address 0x8d020008 out of bounds>
(gdb)

で、こいつをfree()するとSegfaultで死ぬと。何故 out of boundsな 領域に割り当たるのか不明。因みに、DLLを1.3.22の パッケージリリースに戻しても状況変わらず。 Windowsを再起動しても状況変わらず。むむぅ、お手上げ。

2003/04/27

昼過ぎ起床。寝過ぎ。

gcc-3.2.3のbuild結果にファイルが何も入っていなかったので、 不思議に思って調べてみたら、前回実行したメモをコピペで そのまま実行した所、3.2.1がbuildされてしまった模様(激汗; 昨日のDLLずっこけログもそうやって実行してるし(<気づけよ)

で、3.2.3をbuildしてcastテストのプログラムを実行してみたの ですが、やっぱダメそう。

gcc> cat cast.c
#include <stdlib.h>
#include <stdio.h>

int main()
{
  double pi ;
  unsigned int *ip ;

  pi=3.141592654 ;

  printf("%f\n",pi) ;

  ip=(unsigned int *)&pi ;
  ip++ ;
  *ip |= 0x80000000 ;

  printf("%f\n",pi) ;
}

gcc> ./xgcc.exe -I../../gcc/ginclude -S cast.c
gcc> gcc cast.s
gcc> ./a.exe 
3.141593
-3.141593
gcc> ./xgcc.exe -I../../gcc/ginclude -O2 -S cast.c
gcc> gcc cast.s
gcc> ./a.exe 
3.141593
3.141593
gcc> ./xgcc --version
xgcc (GCC) 3.2.3
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

むぅ。

ppcクロスgccをmake。でもコンパイルエラーで停止。適当に直して 再make。でも、C++のconfigureで例のforkバグで停止。 forkバグをパッチしたsnapshotは変なエラーが出るし。 むぅ、王手っぽい。

そういや、出張中、暇つぶしに「SoftwarePeople」という雑誌を 読んでみました。ソフトウェアの開発時に問題となる人の性格 などについて色々書かれていたり。書いてある事の全てが全て 正しいとは思いませんでした(理想としては正しいけど実際にできるか と聞かれると異常に難しい話とか)が、心当たりのある点の方が 多くてアイタタタと思わず反省してみたり。 多人数で行なう開発というモデルという観点で見ると、ソフトウェア 開発に限らず、結構色々な物が当てはまるのではないかと思いました (因みに私の本物お仕事はソフト屋さんではありません)。

うぅっ; 買わないですよぅ。だって、 麻雀の役がよく判らないので。 えぇ、それさえクリアされれば買うけどね (<買うのかよ)
でもですね、脱衣麻雀やエロゲーとかは基本的にやらないんです。 と言うのは、 金出してるのに エロがすぐ見られないのが 我慢ならん!かーーーーっ!! (ぉぃ; って感じだからです。

2003/04/26

出張。帰着ふぅ。

Cygwinの最新スナップショットと、gcc-3.2.3をダウンロード。 ダウンロード中に、出張帰りに買ってきた攻殻5などを鑑賞。ぴひゅー。

Cygwinのスナップショット(20030421)はビルドはできたのですが、 それを使用してgccのconfigureを実行するとDLLがエラーをぶっこいて 死亡。

gcc-3.2.3> ./contrib/gcc_build -o build -d ~/develop/gcc_cyg/gcc-3.2.1 -c '--prefix=/usr  --enable-languages=c' build
Configuring: /cygdrive/c/tane/develop/gcc_cyg/gcc-3.2.1/configure --prefix=/usr  --enable-languages=c
     94 [main] sh 1457111 cygthread::terminate_thread: VirtualFree of allocation base 0x19A6FFA0<0x19860000> failed, Win32 error 0

これでも、先に進んで微妙に動いてたりして(^^; 不気味なので、 結局DLLを戻してみたり。何故か3月末から4月にリリースされた snapshotはshellが勝手に終了したり、結構挙動が不審だったりする ので、直っているかと期待したのですが残念。でも、thread関係 の問題っぽいので、ここ最近色々変わっている所を見ると、 すぐ直るのかも。問題は、最近、snapshotの更新が週単位になっている という点かも知れませんが。

で、gccのbuild。終りそうにないのでほったらかし。

そのうち眠くて死亡。

2003/04/25

出張。

2003/04/24

出張。

2003/04/23

出張。

2003/04/22

出張。

2003/04/21

出張。

2003/04/20

昼前起床。

髪切りに床屋へ。ふと見るとピンポンの総集編が置いてあったので 思わず手に取って読んでしまったり。雑誌連載時にリアルタイムで 読んで以降、今日まで一度も原作を読み返す事は無かったのですが、 改めて読んで激ハマり(^^;。原作の細かい所は微妙に忘れてしまって いたので、DVDの実写映画を観た時はそれなりに楽しめたのですが、 今度は逆に実写映画での映像化にあたって、「原作のこの絵を実写化 していたのか」とか、原作と映画の微妙な違いなど、また別の意味で 楽しめました。気づいた実写化のシーンの中に、ラケットのラバーと 球のぶつかる瞬間の超拡大CG映像のシーンがあるのですが、これ、 原作の試合シーンの流れの中で二コマくらいで描かれた絵を再現 したものだというのが判ってちょっと感動しました。 というのも、このシーンは映画のみの 全く新しく後で考えて作り付け足された映像なのだと勝手に思って いたのですが、絶対見えないであろう画を原作マンガ中で実際に 描いてあったという事と、そのわずか二コマの絵を見逃さずに CG映像化し、迫力ある一つのシーンとして作り上げていた と言う二つの点に気づいたという所からだったりします。
でもなにより、見逃した原作最終話をやっと見れた事が一番 だったかも(^^; そんな感じでえらく待って、終ったらすっかり日が暮れていて ぐんにょり。

本屋に。床屋で何気に読んだスピリッツに連載されている 「高校アフロ田中」が面白かったので単行本を探したのですが 見つからず。そういや最近のスピリッツって表紙がグラビアに なっているのですな。確か、対抗誌であるヤングジャンプは アイドルグラビアを使っているのに対して、素人女子大生水着 写真で勝負している...とかいうのをスピリッツ誌上に書いてあった ような気がしたのですが、やっぱこの不景気にはナリフリ かまってられませんか。

そんな感じで明日から出張です。

2003/04/19

夕方頃起床。寝過ぎ。つーか腹が減って起きた模様(汗;

キャリバーIIで武器を全種お買い上げ。あとはExtraArcadeで全キャラ クリアなのですが、ノーマルArcadeよりもCOMが強くて 苦戦気味。

そういや、ナムコがセガに合併を申し入れた話。もし合併が実現 すると、「VF vs 鉄拳」とか出たりするのかしら?あぁ、でもなぁ、 VFも鉄拳も あまり色気が無いのだよなぁ。それよりも、 テクモとナムコのカップリングで「DOA + キャリバー/どっきん 女だらけの水泳大会」とかは どう?(<どうって.....) 操作はひたすら連打で「揺らし対決ゲーム」とか、 どう? (<バカですか)

少し前から、メーラーをOutlookからNetscapeのmessangerに 切り替えたのですが、messangerで分割メールをで受け取った ところ、引っ付け合わす事ができなくて死亡。分割メールを 引っ付け合わせられないmessangerもアレなのですが、 メールサーバーへの負荷軽減の効果があるとは言え、今の 御時世 わざわざ分割して出すなんてのもナンセンスな気分。 でも、分割して出したのは自分なんだけどね(<ぉぃ)

藤原紀香が出ている「ほぐすサプリ」とかいう飲料水のCM。 なんか、ヤバい薬を飲んだみたいに見えるのは気のせいか?

2003/04/18

出張。帰着。ふぅ。

キャリバーIIをやっていたら眠くて死亡。

2003/04/17

出張。

2003/04/16

出張。

2003/04/15

出張。

2003/04/14

出張。

2003/04/13

昼頃起床。

大往生やったり、ごくせんスペシャルの再放送を観たり。

大往生の1面だけでもフルコンボできる様にならないかと思ったの ですが、基本的に無理っぽいので練習諦め気味。後半ステージを やっていて思ったのですが、コンティニューでやっていると 思わず「リフレクトフォーッス!」って叫びたくなるくらい 画面が敵弾で埋め尽くされます。DVDのそれとか見ていると、 それほど敵弾が出ている様にないのですが、どうも敵の出現 位置が完全に覚えられている為、比較的すぐに倒してしまって もコンボが繋がる敵は、弾を出させる前に殺ってしまうので、 画面が埋め尽くされないという感じに思えました。埋め尽くされない とは言っても、普通には避けられないくらいバラ撒かれている のでそれでも十分難しいのですが、5面とかは途中で死ぬと 常に追い詰められている状態になってしまうので、事実上 復活不能って感じに思ったのですがどうでしょう。後、ハイパー 使うと、実際には画面上の弾を一掃できる点で、準ボンバー的 な役割を果たしているのですが、もしスコアを気にしないと するならば(気にせず使っている所を見ると、ハイパーを 持っているだけでは得点には何も関係しないらしいので)、 恐らくハイパー未使用でノーミスクリアするのが一番極まって いるという感じがします。そういうやり込みが 見てみたいと少しだけ思ったりして。

本屋とゲーセン。キャリバーIIを何気にやってみたり。まったり 一人で遊んでたらいきなり乱入(^^; かーーっ!断るっ!!という 事はできませんので、やってみたらストレート負け。つーか、 対人だと勝てるレベルじゃないんです(>私)。決して2P側で やってたせいでは無いらしい。
本屋でG-taste(6)を買ったり。色指定絵(原画)も載せる様になった のは最近になってからみたいなのですが、いつ見ても異常に 細かいのに色んな意味で感心してみたり。

ちょこーりコーディング。すぐ煮詰まって、キャリバーII(ぉぃ; どうにかWeaponMasterモード全ミッションコンプリート。 貯まったお金で残りの武器を購入。でも、全ては揃わない感じ なので、金稼ぎの為にコンプリートしたミッションを何度か やる必要がありそうです。あぁ、後はExtraモードで全キャラ コンプリートくらいか。

そんな感じで明日から出張です。

2003/04/12

出張。帰着。ふぅ。

帰りにPS2版「怒首領蜂大往生」をゲット。
飯食べながら特典DVDを閲覧。もうね、飯を食べる口が度々止まって、 食った気がしませんよ(ぉぃ; 凄過ぎて、逆にスゴイかどうかが判らなく なるくらい、簡単そうに避けているのですが、 ふつうは無理、絶対無理。 そんな感じでした(^^;。で、ゲームをプレーイ。むぅ、やっぱ あんなに繋がらないよなぁ。てゆーか、私がやるとアーケードでも そうなのですが、3面ボス辺りはもう避けられる気がしません(^^; 蜂に至っては蛹含め、あのマスゲームのような弾幕を見ているだけで 目が回ってくるという始末(<ダメ過ぎ)。そんな感じです。
シミュレーションモードに入っているスーパーリプレイも結構スゴイ のですが、二周目やラスボスの方は苦戦している感じ。これを 見るとDVDのそれが如何にスゴイのか再認識したり。

んー、Easyだと弾足が少し遅いので弾の隙間が広く見え........ ないな、やっぱり(^^;

2003/04/11

出張。

2003/04/10

出張。

2003/04/09

出張。

2003/04/08

出張。

2003/04/07

出張。

2003/04/06

昼過ぎ起床。ちょっこり出社。今日は暖かくて良い感じ。

帰りに本を買ってきたり。
ヒカ碁(21)読み。ぴひゅー、続きが楽しみ。

初めて「ファミ通Wave DVD」を買ってみました。 やり込みプレイが観られるというのは、良い時代になったものだと 思いました。てか、メタルギアソリッド2 サンズ・オブ・リバティ で、ハリアー相手にハンドガンでノーダメージクリアとか、 凄過ぎですよ。他にも大往生のステージ1フルコンボだとか、真魂斗羅の ラスボスノーミスプレイだとか、斑鳩のスゴイのとか色々。 やり込みのDVDも出ている様で、その中に、先日何気に思い出した SFCのF-ZERO MUTECITY-Iでのスゴイのとか収録されている らしい。見たら買ってしまうかも(^_^;

キャリバーII。アーケードで一応全キャラクリア。20人以上 は出ないのかしら? WeaponMasterモードは残り4ミッション。洞窟系 は長いのが難点。で、バトルシアターモードをお買い上げ。 でも、DC版のキャリバーに比べてカメラがあまり 近くに寄れず。観察にはイマイチ使えなくなっているという 感じ(<しつこいです)。ゲームレベルを一番高くして、 CPU vs CPU で見ていると、普段見たこと無い技が出まくりで 面白いです。ただ、ガードインパクトのスラッシングにハマる (互いにガードインパクトを出しつづける)事が多いのが 難点かも。

風呂の水をため過ぎたり沸かし過ぎたりなんかダメダメ。

そんな感じで明日から出張です。

2003/04/05

出張。帰着。ふぅ。

どもども。「R-TYPE FINAL」は楽しみにしてます。 でも、R-TYPEシリーズは年の為かきつくなって来たと、 デルタを久々にやって、すっかりヘボになっている加減に 感じる今日この頃です(^^;。

2003/04/04

出張。

2003/04/03

出張。

2003/04/02

出張。

2003/04/01

回復せず一日死亡。いや、ウソじゃなく。


TOP PREV