2009-12-07

コンパイラ(VS2005のx64)マジ死んでくれ

手元でビルドした、Thunderbird 3.0 x64が終了時に自分自身を起動してくれるという倒れそうなバグがなんかあって、調べてみたところ、

0:000> u 00000001`3f508afd
thunderbird!XRE_main+0x190d [c:\workspace\mozilla-hg\comm-1.9.1\mozilla\toolkit\xre\nsapprunner.cpp @ 3369]:
00000001`3f508afd ff5028          call    qword ptr [rax+28h]
00000001`3f508b00 39ac2498000000  cmp     dword ptr [rsp+98h],ebp ; [rsp + 0x98] -> needRestart, @ebp -> 1
00000001`3f508b07 0f8491010000    je      thunderbird!XRE_main+0x1aae (00000001`3f508c9e)
00000001`3f508b0d 85f6            test    esi,esi
00000001`3f508b0f 7414            je      thunderbird!XRE_main+0x1935 (00000001`3f508b25)
00000001`3f508b11 488b0dd0b51301  mov     rcx,qword ptr [thunderbird!gSavedVars+0x8 (00000001`406440e8)]
00000001`3f508b18 4885c9          test    rcx,rcx
00000001`3f508b1b 743b            je      thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b1d ff15e553cc00    call    qword ptr [thunderbird!_imp_PR_SetEnv (00000001`401cdf08)]
00000001`3f508b23 eb33            jmp     thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b25 488d0d14a1cc00  lea     rcx,[thunderbird!kProfileManagerURL+0xd40 (00000001`401d2c40)]
00000001`3f508b2c ff15ce53cc00    call    qword ptr [thunderbird!_imp_PR_GetEnv (00000001`401cdf00)]
00000001`3f508b32 4885c0          test    rax,rax
00000001`3f508b35 7414            je      thunderbird!XRE_main+0x195b (00000001`3f508b4b)
00000001`3f508b37 403828          cmp     byte ptr [rax],bpl
00000001`3f508b3a 740f            je      thunderbird!XRE_main+0x195b (00000001`3f508b4b)

0:000> r @ebp
ebp=1

0:000> x
00000000`002ffc40 argc = 0
00000000`002ffc48 argv = 0x00000000`00000001
00000000`002ffc50 aAppData = 0x00000000`01f232b0
00000000`002ff8e0 localIniFile = class nsCOMPtr
00000000`002ff9a0 appData = class ScopedAppData
00000000`002ff8d0 rv = 0
00000000`002ff8d8 iniFile = class nsCOMPtr
00000000`002ff968 parser = class nsINIParser_internal
00000000`002ff8f8 overrideLF = class nsCOMPtr
00000000`002ff910 greDir = class nsCOMPtr
00000000`002ff8f8 lf = class nsCOMPtr
00000000`002ff950 osABI = class nsDependentCString
00000000`002ff938 needsRestart = 0
 :
 :

というか、@ebpが0のつもりで生成してる気がするんだけど、1だし。

Visual Studio 2005のx64コンパイラってOxとか02とかの最適化オプション使うと不思議なコードをたくさん生成してくれるんだけど、2005のx64コンパイラ使う気失せた。2008も0xだと変なコード吐くんだよな。。。

1 件のコメント:

masa さんのコメント...

マイクロソフトが公式にバグの存在を認めたようです。

http://support.microsoft.com/default.aspx?scid=kb;ja;976617&sd=rss&spid=3041