13/01/08 16:01:03.11
あっとタブが飛んだ 再投稿
うーんわからない。とあるUNIX(x86_64)のプログラムだけど、
(gdb) i r
rax 0x00
rdi 0x800f55390 34375816080
rip 0x800c7cff9 0x800c7cff9
(gdp) x/i 0x800c7cff9
0x800c7cff9 mov (%rdi),%rax
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98
(gdb) stepi
(gdb) i r
rax 0x800f5bfcc 34375843788
rdi 0x800f55390 34375816080
rip 0x800c7cffc 0x800c7cffc
なんでraxが0x800f5bf98にならずに0x800f5bfccになるの?
テストプログラムで
mov (%rdi),%rax
を実行させても正しく間接参照する。C2Dのバグ疑ってもいいかな。
58:デフォルトの名無しさん
13/01/08 16:11:02.74
>>57
なんで最後に
>(gdb) x/xg 0x800f55390
も一回やらんの?
59:デフォルトの名無しさん
13/01/08 16:17:03.34
変わってなかったのでコピペしませんでした。
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98
60:デフォルトの名無しさん
13/01/08 16:18:59.10
念のために逆アセのバグも疑ってみない?
61:デフォルトの名無しさん
13/01/08 16:28:15.43
それも疑ってみてました。正しいようです
(gdb) x/3xb 0x800c7cff9
0x800c7cff9 0x48 0x8b 0x07
テストプログラム
(gdb) x/4i aaa
0x4006f0 <aaa>: mov %rdi,-0x8(%rsp)
0x4006f5 <aaa+5>: mov -0x8(%rsp),%rdi
0x4006fa <aaa+10>: mov (%rdi),%rax
0x4006fd <aaa+13>: retq
(gdb) x/3xb 0x4006fa
0x4006fa <aaa+10>: 0x48 0x8b 0x07
違うコンパイラでコンパイルしてみたらコンパイルが終了しない...
62:デフォルトの名無しさん
13/01/08 16:44:41.08
>>61
>違うコンパイラでコンパイルしてみたらコンパイルが終了しない...
C2Dのバグかも?w
63:デフォルトの名無しさん
13/01/08 17:06:08.41
プログラムで合成されたCソースで、コンパイラへの負荷がかなり高い部分があって、
cc1がCPU利用率100%に張り付いて終了しない。
スラッシング起こすほどのメモリは使ってないようだけど。小一時間放置してみる
64:デフォルトの名無しさん
13/01/08 17:10:58.31
理解できない現象を何でも自分以外のせいにするのは素人。
65:デフォルトの名無しさん
13/01/08 17:22:11.70
コンパイルの山場は通過した模様。
たかだが50000行くらいのソースのコンパイルに20分くらいかかった。
66:デフォルトの名無しさん
13/01/08 17:25:44.71
>>61
>違うコンパイラでコンパイルしてみたら
C2Dのバグ疑うかってのに、同じCPU違うコンパイラで偶々動いたとしてそれでいい訳?
67:デフォルトの名無しさん
13/01/08 17:38:49.14
行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
原因にたどり着けないでしょ。
問題の個所は別の呼び出しでは問題なく通っているので、
原因がC2Dと仮定するとえれー複雑な条件が必須なはずでお手上げかもだけど。
実は「おめーがx64のアセンブラ知らねーのが原因、その命令は他のレジスタも
参照してる」とかいう罵声も期待してたけど、飛んでこないところをみるとそう
じゃなかったらしい。
ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)
68:デフォルトの名無しさん
13/01/08 17:43:19.05
>>67
>ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)
プロセッサのバグ疑うんならOSも疑うべきだろ
69:デフォルトの名無しさん
13/01/08 17:47:02.78
>>67
>行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
>原因にたどり着けないでしょ。
別のコンパイラ試すってのは条件絞ってることにはならんよ。
70:デフォルトの名無しさん
13/01/08 18:00:40.95
やり方によってはなるよ。
71:デフォルトの名無しさん
13/01/08 18:05:39.70
ならないよ
72:デフォルトの名無しさん
13/01/08 18:10:49.10
別のコンパイラを試した → 動いた → 前のコンパイラが原因
とはならない。可能性のひとつとして考えられるというだけ。
前のコンパイラが原因の可能性のひとつであるということは別のコンパイラを試す前と変わらない。
73:デフォルトの名無しさん
13/01/08 18:22:00.06
コンパイラ変えてコンパイルしなおすだけだったら、そうだろうね。
やってる本人が出来るといってる方法でやってるんだからいいじゃん。
74:デフォルトの名無しさん
13/01/08 18:48:48.76
やってる方法がトンチンカンだから書いてるプログラムがクソであることは容易に想像がつく
75:デフォルトの名無しさん
13/01/08 19:03:04.86
自分が想像できない事に言いがかり付けない方がいいよ。
ゴミクズみたいのが絡んできたし、これ以上有益な情報得られない
だろうから退散します。
結果わかったら報告しに戻ってくるかも。
76:デフォルトの名無しさん
13/01/08 19:07:41.55
最後までクズでした
77:デフォルトの名無しさん
13/01/08 19:10:51.57
説明の責任は質問する側にあることが解ってないお子様なんだろう