昼過ぎ起床。
洗濯したり買出ししたりして終了。
Emacsのterm+を256色設定してみたり。
説明書通りに設定すると
何故かxterm-256color.elでエラーしたのですが、新しいのをgithubから持ってくれば
大丈夫でした。ついでにscreenもxterm-256color化。.screenrcに以下のような
呪文を追加したり。
defbce "on" term xterm-256color termcapinfo xterm 'Co#256:pa#32767:AB=\E[48;5;%dm:AF=\E[38;5;%dm' termcapinfo xterm-256color 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
昼過ぎ起床。
ppcクロス環境。FedoraでビルドしたglibcをCygwinに持ってきて、
gccの二回目ビルドからCygwinで行ったところ、一応ビルドできました。
で、IJGのツールをppcクロスコンパイルしてppcsimで実行してみたところ、
すっとんだアドレスをアクセスしてたり。あれぇ?動かなくなってる(^^;
qemu-ppcで命令単位実行したものと比べながら値を見たところ、
argの受け渡し方がなんか違ってる感じだったり。そういや、ppcsimの
argの受け渡し方って、どうして今の実装でOKって事になっているのか
思い出せなかったり(^^;
ppcsimでは関数呼び出しと同様に、単純にargc,argvをr3,r4レジスタにセットして
スタートしているだけだったのですが、
少なくとも、今のglibcではargやmain()のスタート位置とかは、
スタックに予め仕込まれている事になっていて、スタックを取り出す
コードがsysdeps/unix/sysv/linux/powerpc/libc-start.cというソースに
書かれています。このスタックの内容を完コピすれば動くハズ......
もそもそ調べてみるも、色々仕込みをいれておかなくてはならないようで
なかなか動かず。
「タケヲちゃん物怪録(7)」。3巻(2013年3月 初版)まで出てるくらいから
読んでましたが、今巻が最終巻です。
稲生物怪録
をベースに、とよ田節でアレンジされた物語になっていて、面白かった
です。因みに1巻は2012年5月 初版なので、妖怪ウォッチ と関係は
無いものと思われます。
LINKSというWebブラウザの
存在を知ったり。日本語文字は激しく化けるようですが、
w3mの替わりに画像としてページをレンダリングしてEmacsに表示
できればewwと張り合える外付けブラウザになりそうな予感。
そういや、linksは確かに激しく日本語文字が化けてはいるものの、
平仮名やカタカナはローマ字のように読めるのが不思議に思ったり。
なんでだ?
ゴミを捨てる為に早起きしたけど、すぐに二度寝して起きたら昼頃。
先日のCygwinでのPPCクロス環境ビルドは何故かコンパイルエラーで
失敗。glibcのクロスコンパイル部分じゃなくてCygwinネイティブコンパイルでビルド
できなくてはならなない実行ファイルのコンパイルに失敗していたり。
書き換えたりしてみたものの、通せる気がしなかったり。
Webで調べてみると
似た話
の書き込みがあったのですが、コメントなどは特に無し。
という訳でCygwinでのppcクロスビルドは保留。
Cygwinではファイルの大文字/小文字を区別しないのですが、それに
由来する問題(参考)も対応が
必要なままなので、敷居はまだ高いと思いますが。
FedoraでPPCクロスgdcをビルドしてみたり。結果から言うと多少の対応は
必要(ARMのそれと違い、壊れていると言っていいレベル)でしたが、
libdruntime,libphobosのビルドはできて、少し怪しい
ながらもqemu-ppcで動くという感じでした。過去には動いていたと
思いますので、詳しい人が対応してくれれば大丈夫なんじゃない?と
いうレベルかも。
$ cat hello.d import std.stdio; import std.string; void main(string[] args) { writef("Hello D world\n") ; version( GNU ) writef("I am GNU\n" ) ; version( Unix ) writef("I am Unix\n" ) ; version( linux ) writef("I am linux\n" ) ; version( Windows ) writef("I am Windows\n") ; version( MinGW ) writef("I am MinGW\n" ) ; version( MinGW32 ) writef("I am MinGW32\n") ; version( MinGW64 ) writef("I am MinGW64\n") ; version( cygwin ) writef("I am cygwin\n" ) ; version( Win32 ) writef("I am Win32\n" ) ; version( Win64 ) writef("I am Win64\n" ) ; version( Posix ) writef("I am Posix\n" ) ; version( X86 ) writef("I am X86\n" ) ; version( X86_64 ) writef("I am X86_64\n" ) ; version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ; version( ARM ) writef("I am ARM\n" ) ; version( PPC ) writef("I am PPC\n" ) ; version( PPC64 ) writef("I am PPC64\n" ) ; version( PPC_SoftFloat ) writef("I am PPC_SoftFloat\n" ) ; version( PPC_HardFloat ) writef("I am PPC_HardFloat\n" ) ; foreach( int i, arg; args ){ writef("%d : %s\n",i,arg) ; } return ; } $ powerpc-linux-gdc hello.d -o hello $ qemu-ppc -L /usr/local/ppctools/powerpc-linux ./hello aaa bbb ccc qemu: Unsupported syscall: 249 Hello D world I am GNU I am Unix I am linux I am Posix I am PPC I am PPC_HardFloat 0 : ./hello 1 : aaa 2 : bbb 3 : ccc
$ grep 249 /usr/local/ppctools/powerpc-linux/include/asm/unistd.h #define __NR_swapcontext 249
昼頃起床。
洗濯したり掃除したり。
ANIMAXでやってた「雪の女王」のCGアニメ。
3D CG作品なのですが、髪の毛やパーティクルが今風だったので、
どこのアニメーションスタジオの作品なんだろう?と思い、調べてみるも
アナ雪の方がひっかかり過ぎてあまり情報を得られず。
結局、
amazoneのDVD情報
が一番情報がありました。ただ、2012年制作というのとロシア製という事
だけしか分からなかったり。原作に忠実なためか、話が詰め込み過ぎに
思いましたが、ロシアもこのレベルの絵が出せるんだとは思いました。
「雪の女王」の事を調べていて
見つけた記事。
確かにスゲぇ。
ARMのクロス環境を作ったついでに、PowerPCの方も更新しとくかと
ビルドを試したり。基本、ARMと同じでいけるハズだけどなんかダメ
な箇所があって調べたり。ppcsimがある都合でCygwinの方でも確認
してみるものの、遅くて終わらず。ただ、パッチや出来合いのヘッダが
が無くてもビルドできるようになった点は良いです。
昼過ぎ起床。
QEMUでARM。none-linuxだったのは、参考にしたwebがそうなってた
だけだったので、arm-linux-gnueabi とかにすれば特に問題無いようです。
プロ遊の下に「QEMU ARMで遊ぼう」
という文書を置いてみました。ご参考まで。
調子に乗って、ARM-linux ターゲットのクロスgdcのビルドを行ってみたり。
まだmasterではない ibuclawさんのブランチである
ba5291954e3f17fe31b4671659965090ccf1e3b1
てのを使用してみました。ほんの少し直す必要がありましたが、
結果から言うとクロスgdcのビルドと、コンパイラを使って生成した
実行バイナリのQEMUによる実行に成功しました。マジでか!? gdcすげぇ!!
$ arm-linux-gnueabi-gdc -v Using built-in specs. COLLECT_GCC=arm-linux-gnueabi-gdc COLLECT_LTO_WRAPPER=/usr/local/arm_linux/libexec/gcc/arm-linux-gnueabi/5.0.0/lto-wrapper Target: arm-linux-gnueabi Configured with: ../gcc-5-20141207/configure --target=arm-linux-gnueabi --enable-languages=d --prefix=/usr/local/arm_linux --disable-bootstrap --disable-nls --disable-libgomp --disable-libmudflap --disable-multilib --disable-libsanitizer Thread model: posix gcc version 5.0.0 20141207 (experimental) (GCC) $ cat hello.d import std.stdio; import std.string; void main(string[] args) { writef("Hello D world\n") ; version( GNU ) writef("I am GNU\n" ) ; version( Unix ) writef("I am Unix\n" ) ; version( linux ) writef("I am linux\n" ) ; version( Windows ) writef("I am Windows\n") ; version( MinGW ) writef("I am MinGW\n" ) ; version( MinGW32 ) writef("I am MinGW32\n") ; version( MinGW64 ) writef("I am MinGW64\n") ; version( cygwin ) writef("I am cygwin\n" ) ; version( Win32 ) writef("I am Win32\n" ) ; version( Win64 ) writef("I am Win64\n" ) ; version( Posix ) writef("I am Posix\n" ) ; version( X86 ) writef("I am X86\n" ) ; version( X86_64 ) writef("I am X86_64\n" ) ; version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ; version( ARM ) writef("I am ARM\n" ) ; foreach( int i, arg; args ){ writef("%d : %s\n",i,arg) ; } return ; } $ arm-linux-gnueabi-gdc hello.d $ qemu-arm -L /usr/local/arm_linux/arm-linux-gnueabi ./a.out aaa bbb ccc Hello D world I am GNU I am Unix I am linux I am Posix I am ARM_SoftFloat I am ARM 0 : ./a.out 1 : aaa 2 : bbb 3 : ccc
仕事納め。早めに帰着。
QEMUでARM向けバイナリ実行。Linuxのプロセスイメージを実行する
ようで、ARM-Linuxで動くバイナリを食わせないとダメそうな予感。
そんな訳で、ビルドの方法を調べるのですが、古いgccでのビルド方法
だったり、出来合いのバイナリをインストールする方法だったり、
ビルドで突っかかった質問に対して的を外した回答のMailingList情報
だったりと、なかなかズバリな答えが得られず。結局、色々試して
これでいけそうという所に辿り着いたり。
$ arm-none-linux-gnueabi-readelf -h ./djpeg ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0x10ac8 Start of program headers: 52 (bytes into file) Start of section headers: 3546584 (bytes into file) Flags: 0x5000202, has entry point, Version5 EABI, soft-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 6 Size of section headers: 40 (bytes) Number of section headers: 37 Section header string table index: 34 $ qemu-arm -L /usr/local/arm_linux/arm-none-linux-gnueabi ./djpeg --help usage: ./djpeg [switches] [inputfile] Switches (names may be abbreviated): -colors N Reduce image to no more than N colors -fast Fast, low-quality processing -grayscale Force grayscale output -scale M/N Scale output image by fraction M/N, eg, 1/8 -bmp Select BMP output format (Windows style) -gif Select GIF output format -os2 Select BMP output format (OS/2 style) -pnm Select PBMPLUS (PPM/PGM) output format (default) -targa Select Targa output format Switches for advanced users: -dct int Use integer DCT method (default) -dct fast Use fast integer DCT (less accurate) -dct float Use floating-point DCT method -dither fs Use F-S dithering (default) -dither none Don't use dithering in quantization -dither ordered Use ordered dither (medium speed, quality) -map FILE Map to colors used in named image file -nosmooth Don't use high-quality upsampling -onepass Use 1-pass quantization (fast, low quality) -maxmemory N Maximum memory to use (in kbytes) -outfile name Specify name for output file -verbose or -debug Emit debug output $ qemu-arm ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg $ diff -s ./testimg.ppm testout.ppm Files ./testimg.ppm and testout.ppm are identical
遅めに帰着。
BPG (Better Portable Graphics)
という画像フォーマットの存在を知ったり。
遅めに帰着。
QEMUで実行バイナリをコマンドラインから動かす方法があるのを
知ったり。VMware上のFedoraで試しにARM向けのコンパイラをビルドしてみて試した
ところ、それっぽく動くには動いたのですが、argがうまく伝わって
いないとか、なんか違っているような気がしたり。
昼頃起床。
ぐうたら過ごしたり。
ちょろり調べ事。
気持ち早めに帰着。
freeglutをダイナミックリンクライブラリでもスタティックリンクライブラリでも
リンクできるようにしたいと思ったり。D言語ではDLL内に含まれる関数の
場合は「extern(Windows) ....」、スタティックの場合は「extern(C) ....」
のようにリンケージ属性を指定する必要があります。で、version()で
キーワードを指定したときにスタティックライブラリにしようと、
version(STATIC_GLUT){ extern(C) : }else{ extern(Windows) : } void glutInit(int *argcp, char **argv) ; :
version(STATIC_GLUT){ extern(C){ }else{ extern(Windows){ } void glutInit(int *argcp, char **argv) ; : }
version(STATIC_GLUT){ extern(C) }else{ extern(Windows) } { void glutInit(int *argcp, char **argv) ; : }
昼頃起床。
洗濯したり掃除したり。
OpenGLを使うにあたってglutを使用しているのですが、
自分でビルドができなかった為、出来合いのDLLを使用しています。
で、freeglut
に乗り換えられないか?と思ったり。
そんな訳で、ビルドを試してみたり。説明書にはconfigureを実行するとか
書かれていますが、configureスクリプトはどこにも無い為、実際には
cmakeを使ってビルドする必要がありました。
MinGWのクロスビルドをCygwinのmingwツールチェーンを使って行って
みたところ、demoのビルドもできたので一応使えそうな感じに。
因みに、MinGWネイティブでは何故かcmakeがうまく動きませんでした。
ところがmigw gdcで使ってみるとダメだったり。
glutと違い、glutInit()を実行しなくてはglut*関数群が
使えない仕様になっているようなのですが、glutInit()を実行しても
描画がうまく行われなかったり。うーむ、うまくいきません。
glutを使ってウインドウを開くようなD言語コードは一応動いてみたり。
ますます うーむ。
スタティックライブラリのビルドができるのでデバッガで見てみた
ところ、libfreeglut内の関数でSegfaultしていたり。
glutでティーポットやトーラスなどのプリミティブを描画できますが、
描画関数内のカレントウインドウ?を取得するコードでNULLポインタ
アクセスしてました。glutCreateWindow()とかでウインドウを開かない限り
値がセットされていないと思われるので、描画コンテキストの用意や
設定は自前で行ってあるからプリミティブの描画だけ行って欲しいんだけど?
という要求に応えられないコードになっているような気がしたり。
そんな訳でちょこっといじってみたところ描画できてみたり。
*** ../src/fg_geometry.c.orig 2014-10-30 02:09:57.000000000 +0900 --- ../src/fg_geometry.c 2014-12-22 00:31:48.032092000 +0900 *************** *** 178,188 **** void fghDrawGeometrySolid(GLfloat *vertices, GLfloat *normals, GLfloat *textcs, GLsizei numVertices, GLushort *vertIdxs, GLsizei numParts, GLsizei numVertIdxsPerPart) { ! GLint attribute_v_coord = fgStructure.CurrentWindow->Window.attribute_v_coord; ! GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal; ! GLint attribute_v_texture = fgStructure.CurrentWindow->Window.attribute_v_texture; ! if (fgStructure.CurrentWindow->State.VisualizeNormals) /* generate normals for each vertex to be drawn as well */ fghGenerateNormalVisualization(vertices, normals, numVertices); --- 178,188 ---- void fghDrawGeometrySolid(GLfloat *vertices, GLfloat *normals, GLfloat *textcs, GLsizei numVertices, GLushort *vertIdxs, GLsizei numParts, GLsizei numVertIdxsPerPart) { ! GLint attribute_v_coord = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_coord; ! GLint attribute_v_normal = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_normal; ! GLint attribute_v_texture = fgStructure.CurrentWindow==NULL ? -1 : fgStructure.CurrentWindow->Window.attribute_v_texture; ! if (fgStructure.CurrentWindow!=NULL && fgStructure.CurrentWindow->State.VisualizeNormals) /* generate normals for each vertex to be drawn as well */ fghGenerateNormalVisualization(vertices, normals, numVertices); *************** *** 202,208 **** fghDrawGeometrySolid11(vertices, normals, textcs, numVertices, vertIdxs, numParts, numVertIdxsPerPart); ! if (fgStructure.CurrentWindow->State.VisualizeNormals) /* draw normals for each vertex as well */ fghDrawNormalVisualization11(); } --- 202,208 ---- fghDrawGeometrySolid11(vertices, normals, textcs, numVertices, vertIdxs, numParts, numVertIdxsPerPart); ! if (fgStructure.CurrentWindow!=NULL && fgStructure.CurrentWindow->State.VisualizeNormals) /* draw normals for each vertex as well */ fghDrawNormalVisualization11(); }
AM中に起床。休出。
なにやら「萌え絵」
なるWikipediaの存在を知ったり。
特徴についての記述があるのですが、結局、アニメ絵との違いが
よく分からない説明だなぁ?と思ったりも。
飯を食ったらあまりの眠さに急速停止。
遅めに帰着。
WBSでやってたプログラミング学習の話。
25年くらい前に比べれば、PCは入手し易くなってるし、
情報を得るのもずっと簡単になっているし、
フリーソフトウェアなどを使えば、誰でも始められるのが
プログラミングだと思っているのですが、実際はそういう訳でも
無いというのが不思議といえば不思議。結局、興味を持っている
人は勝手にやるし、興味が無ければやらないだけなのかも。
そういや、
プログラミン
じゃなくて
Scratchなのかとは
ちょっとだけ思った。
遅めに帰着。
調べ事をして終了。
遅めに帰着。
エアコンが突然停止して、その後動かなくなったり。
今のアパートの設備なのですが、何故かエアコンだけ説明書が無い上、
状態を表示するパネル類の無い機種なもんですから、何が起こっている
のかさっぱり分からなかったり。で、Webで機種検索してどうにか
状態を把握する事ができたり。室内機もしくは室外機の通気が塞がれて
いるという事だったようですが特に何も無く。結局コンセントの
抜き差しで復帰。
遅めに帰着。
ちょろり調べ事をして終了。
遅めに帰着。
先週の金曜日に寝違えたせいか首に痛みがありました。土、日と
痛みはあるものの、特に酷くなる事は無かったのですが、
今日は徐々に痛みが増してきたり。机に向かって文書を読む為に
少し下向きになるとダメな感じ。シップを貼って安静にするしか
ないか?うーむ。
AM中に起床。
掃除したり、投票ついでに出かけたり。
Emacsでのround関数がrange errorになる件について、ソースコードに
網をかけてみたり。エラー検出は何種類かあるようですが、
以下の網に引っかかる模様。
328 static Lisp_Object 329 rounding_driver (Lisp_Object arg, Lisp_Object divisor, 330 double (*double_round) (double), 331 EMACS_INT (*int_round2) (EMACS_INT, EMACS_INT), 332 const char *name) 333 { 334 CHECK_NUMBER_OR_FLOAT (arg); : 377 if (FLOATP (arg)) 378 { 379 double d = (*double_round) (XFLOAT_DATA (arg)); 380 if (FIXNUM_OVERFLOW_P (d)) 381 { 382 printf("range_error4 %f, %f\n",d, XFLOAT_DATA (arg)) ; 383 xsignal2 (Qrange_error, build_string (name), arg); 384 } 385 arg = make_number (d); 386 }
Breakpoint 1, rounding_driver (arg=-2130027057, divisor=<optimized out>, double_round=<optimized out>, int_round2=0x50b760 <round2>, name=0x767f70 <callint_argfuns+1668> "round") at floatfns.c:382 382 printf("range_error4 %f, %f\n",d, XFLOAT_DATA (arg)) ; (gdb) where #0 rounding_driver (arg=-2130027057, divisor=<optimized out>, double_round=<optimized out>, int_round2=0x50b760 <round2>, name=0x767f70 <callint_argfuns+1668> "round") at floatfns.c:382 #1 0x005086e4 in Ffuncall (nargs=2, args=0x67f9d34) at eval.c:2815 #2 0x0053990b in exec_byte_code (bytestr=7, vector=8575002, maxdepth=20, args_template=8575002, nargs=nargs@entry=0, args=0x2) at bytecode.c:916 #3 0x005081a5 in funcall_lambda (fun=-2146112275, nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x67f9ea8) at eval.c:3045 #4 0x005084cb in Ffuncall (nargs=2, args=0x67f9ea4) at eval.c:2873 #5 0x0053990b in exec_byte_code (bytestr=7, vector=8575002, maxdepth=24, args_template=8575002, nargs=nargs@entry=0, args=0x2) at bytecode.c:916 #6 0x005081a5 in funcall_lambda (fun=6627165, nargs=nargs@entry=4, arg_vector=arg_vector@entry=0x67fa020) at eval.c:3045 #7 0x005084cb in Ffuncall (nargs=5, args=0x67fa01c) at eval.c:2873 #8 0x0053990b in exec_byte_code (bytestr=7, vector=8575002, maxdepth=28, args_template=8575002, nargs=nargs@entry=0, args=0x5) at bytecode.c:916 #9 0x005081a5 in funcall_lambda (fun=6627445, nargs=nargs@entry=3, arg_vector=arg_vector@entry=0x67fa188) at eval.c:3045 #10 0x005084cb in Ffuncall (nargs=4, args=0x67fa184) at eval.c:2873 #11 0x0053990b in exec_byte_code (bytestr=7, vector=8575002, maxdepth=20, args_template=8575002, nargs=nargs@entry=0, args=0x4) at bytecode.c:916 #12 0x005081a5 in funcall_lambda (fun=6628957, nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x67fa2fc) at eval.c:3045 #13 0x005084cb in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x67fa2f8) at eval.c:2873 #14 0x00508847 in call1 (fn=8608866, arg1=arg1@entry=-2134029331) at eval.c:2611 #15 0x004a3a61 in timer_check_2 (idle_timers=<optimized out>, timers=<optimized out>) at keyboard.c:4514 #16 timer_check () at keyboard.c:4581 : (gdb) p/x arg $1 = 0x810a5dcf
/* Lisp floating point type. */ struct Lisp_Float { union { double data; struct Lisp_Float *chain; } u; }; INLINE double XFLOAT_DATA (Lisp_Object f) { return XFLOAT (f)->u.data; }でdoubleの値を得ているようで、argはLisp_Floatのポインタで、 XFLOAT()っていう関数で加工している結果から察すると、
(gdb) p *(double*)(arg-7) $8 = -nan(0x8000000000000)
AM中に起床。休出。
MinGW gdc調査。そういや
こちらのバイナリで、
32bit版がダメなのは確認しているのですが、
64bit版(2.065ですが)を試していなかったなぁ?と思い試してみたり。
で、またややこしい話でstd.regexを使用した最小コードはコンパイルが
通るのですが、それを元にしたTupleを使った最小コードはコンパイル
エラーでコンパイルできなかったり。2.066や2.062のgdcだとコンパイルが
通るので油断していたのですがなんてこった。
で、コンパイルできるstd.regexを使ったコードをコンパイル&実行
してみると、特にエラーすることなし。
32bitと64bitの差に何か原因があるのか?
気持ち早めに帰着。
あまりの眠さに急速停止。
遅めに帰着。
ちょろり調べ事。
気持ち早めに帰着。
少し前にnyan-modeがemacs -nwにも
対応したのを知ったのですが、たまたま-nwで立ち上げたままほったらかし
にしてると、例のseconds-to-timeでArithmetic range errorが
起こっていたり。-nwではアニメーションはしないのであまり関係無い
と思っていたのですが、そういう訳ではないらしい。
実は、誰が seconds-to-timeに非数を食わしているのか
分かっていなかった為、エラーした時にバックトレースが表示
できないか調べてみたり。ひとまず debug-on-error という変数を
tに設定しておけば良いらしいという事でセットしてみたり。
あとは発生するのをひたすら待つ感じで。
ちょっとTV見てたらひっかかったり。
Debugger entered--Lisp error: (range-error "round" -0.0e+NaN) round(-0.0e+NaN) seconds-to-time(0.2) timer-relative-time((21640 22228 754752 0) 0.2 0 nil) timer-inc-time([t 21640 22228 754752 0.2 nyan-swich-anim-frame nil nil 0] 0.2 0) timer-event-handler([t 21640 22228 754752 0.2 nyan-swich-anim-frame nil nil 0])
(defun seconds-to-time (seconds) "Convert SECONDS (a floating point number) to a time value." (let* ((usec (* 1000000 (mod seconds 1))) (ps (round (* 1000000 (mod usec 1)))) (us (floor usec)) (lo (floor (mod seconds 65536))) (hi (floor seconds 65536))) (if (eq ps 1000000) (progn (setq ps 0) (setq us (1+ us)) (if (eq us 1000000) (progn (setq us 0) (setq lo (1+ lo)) (if (eq lo 65536) (progn (setq lo 0) (setq hi (1+ hi)))))))) (list hi lo us ps)))seconds-to-timeには0.2しか食わしていないのに、何故かroundに非数 が入ってて、はぁ?って感じ。因みに、scratchバッファで0.2を食わした 結果は以下。
(seconds-to-time 0.2) (0 0 200000 0)
回復せず一日休業。
ほぼ寝て過ごすも、頭が痛くて全然眠れない感じ。
午後もいい時間にやっと起きられるようになったり。
具合が悪くて早めに帰着。
飯食ったら即死。
AM中に起床。
掃除したり。
MinGW gdc調査。先日の再現コードを食わせてFedoraのgdcのGIMPLEダンプ
(今回はGENERIC)とMinGW gdcのそれとを比べてみたり。ファイルパス文字列や
自動生成ラベルの番号とかの違いはあるものの、基本的には同じという感じ。
一点違うのが、いくつかの箇所で戻り値の表現?が異なっていました。
一例ですが、左がFedora、右がMinGWのgdcで出力した.originalファイルで、
画像の4780,4782,4800行目が違っている所です。戻り値に関する
表現が若干異なっているのですが、直接代入か間接代入かの違い
でしかないのかな?と思ったりも。この.originalファイルが全く
同じであれば、その後のステップで変になっていると言えるの
ですが、微妙に違っているのが面倒臭い感じです。
.originalファイルを入力にできれば、Fedoraの方のそれっぽくちょこっと
書き換えて食わせてみるという手があるのですが、それはできなさそう
な予感。
ずっこけの直接の原因になっている箇所に相当するGENERICを見てみるも、
特に違いは無さげ。怪しいのはやっぱり 引数が無くなる瞬間なのですが、
GENERICの文法が良く分からないので、どのように表現しているのか
よく分からなかったり。
「新世紀エヴァンゲリオン(14)」。貞本エヴァもこれで終わり。
本誌連載終了してからコミックが出るまでに随分時間がかかりましたが、
新劇場版の最終話に合わせるつもりが結局合わなかったから?
さておき、基本的には旧劇場版のままという感じでした。
最後の書き下ろしが新劇場版とちょっと関係しているという所でしょうか。
AM中に起床。休出。
MinGW gdc調査。もう少し詰める事ができたり。
void main() { struct Foo{ string s ; } string dic[Tuple!(Foo)] ; Foo x = {s:"foo"} ; dic[tuple(x)] = "foo:0" ; }
void main() { struct Foo{ string s ; } string dic[Foo] ; Foo x = {s:"foo"} ; dic[x] = "foo:0" ; }
遅めに帰着。
MinGW gdc調査。どうにか再現できてみたり。
$ cat -n mingwgdcfailed_test2.d 1 import std.stdio; 2 import std.typecons; 3 import std.string; 4 5 void main() 6 { 7 struct Foo{ 8 string s ; 9 } 10 string dic[Tuple!(Foo,int)] ; 11 12 Foo x = {s:"foo"} ; 13 dic[tuple(x,0)] = "foo:0" ; 14 } $ gdc -g mingwgdcfailed_test2.d $ gdb -q ./a.exe Reading symbols from C:\cygwin\home\TANE\develop\dlang\test\dmd2065gcc490\a.exe...done. (gdb) run Starting program: C:\cygwin\home\TANE\develop\dlang\test\dmd2065gcc490\a.exe [New Thread 6412.0x55c] Program received signal SIGSEGV, Segmentation fault. 0x0040b213 in rt.typeinfo.ti_Ag.TypeInfo_Aa.getHash() (this=..., p=0x526a20) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/typeinfo/ti_Ag.d:128 128 foreach (char c; s) (gdb) where #0 0x0040b213 in rt.typeinfo.ti_Ag.TypeInfo_Aa.getHash() (this=..., p=0x526a20) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/typeinfo/ti_Ag.d:128 #1 0x004083f1 in object.TypeInfo_Const.getHash() (this=..., p=0x526a20) at ../../../../gcc-5-20140831/libphobos/libdruntime/object_.d:1211 #2 0x0040149a in mingwgdcfailed_test2.main() (p=...) at mingwgdcfailed_test2.d:7 #3 0x0040764e in object.TypeInfo_Struct.getHash() (this=..., p=0x526a20) at ../../../../gcc-5-20140831/libphobos/libdruntime/object_.d:981 #4 0x004c1c45 in std.typecons.__T5TupleTS20mingwgdcfailed_test24mainFZ3FooTiZ.Tuple.toHash() (this=...) at c:/mingw/gdc031_2066_50x/include/d/5.0.0/std/typecons.d:581 #5 0x0040764e in object.TypeInfo_Struct.getHash() (this=..., p=0x28fb3c) at ../../../../gcc-5-20140831/libphobos/libdruntime/object_.d:981 #6 0x0042469b in _aaGetX (aa=0x28fb28, keyti=..., valuesize=8, pkey=0x28fb3c) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/aaA.d:170 #7 0x004013e7 in D main () at mingwgdcfailed_test2.d:13 #8 0x00402f0e in __lambda1 (this=0x28fe98) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/dmain2.d:410 #9 0x00402df3 in rt.dmain2._d_run_main() (this=0x28fe98, dg=...) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/dmain2.d:385 #10 0x00402ea8 in runAll (this=0x28fe98) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/dmain2.d:410 #11 0x00402df3 in rt.dmain2._d_run_main() (this=0x28fe98, dg=...) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/dmain2.d:385 #12 0x00402d10 in _d_run_main (argc=1, argv=0xa94ea0, mainFunc=0x40134a <D main>) at ../../../../gcc-5-20140831/libphobos/libdruntime/rt/dmain2.d:418 #13 0x00401348 in main (argc=1, argv=0xa94ea0) at c:/mingw/gdc031_2066_50x/include/d/5.0.0/__entrypoint.di:59 (gdb)
遅めに帰着。
MinGW gdc調査。構造体と連想配列を組み合わせた時が怪しい気が
するのですが再現できず。
遅めに帰着。
emacs-git-gutter
というモードの存在を知ったり。Git管理下に置かれているファイルの
更新箇所をリアルタイムに表示するというもので、本格的に使っては
いませんがちょろっと試した感じとても良さげに思いました。
遅めに帰着。
MinGW gdc調査。連想配列を使った場合に再現しそうな感じですが、
regexのコードを元にちょっと試した所では再現できず。
遅めに帰着。
MinGW gdc調査。特に掴めるものは無し。