dns-terror (fastresolve-2.10_5) core dump na FreeBSD 10.x

Miroslav Lachman 000.fbsd at quip.cz
Thu Feb 25 18:33:34 CET 2016


Dan Lukes wrote on 02/25/2016 17:59:
> Miroslav Lachman wrote:
>> Konecne jsem se dostal k tomu, abych si to zkompiloval v poudriere s
>> WITH_DEBUG=yes. Nainstaloval na zkusebni stroj a ted jsem z core dostal
>> tohle
>
>> (gdb) bt
>> #0  0x0000000000405c26 in BoolString::operator= (this=0x802816130,
>> other=@0x7fffffffdc40)
>>      at BoolString.h:58
>> #1  0x000000000040291a in submit_query (ads=0x802817400,
>> reslist=@0x7fffffffe1a0,
>>      lp=0x8028bc080) at dns-terror.cc:347
>> #2  0x0000000000404870 in main (argc=6, argv=0x7fffffffe690) at
>> dns-terror.cc:763
>>
>>
>> Ale tohle uz je pro me spanelska vesnice a nic mi to nerika.
>
> Takze nejdriv "kde":
>
> K chybe doslo v kodu co byl vygenerovan z radku 58 v BoolString.h,
> kteryzto kod byl zavolan z funkce submit_query, radku 347 v
> dns-terror.cc, ktery byl volan z funkce main, radek 763 tehoz zdrojoveho
> souboru.
>
> A ted co:
>
>> Program terminated with signal 4, Illegal instruction.
>
> V prelozenem kodu je instrukce, ktere konkretni procesor nerozumi.
>
> Takze zrejme jde o chybu pri prekladu - kod je prelozen pro jiny
> procesor nez na jakem nasledne bezi.

Je to kompilovano na amd64 a spousteno taky na amd64. Fyzicky se jedna o 
kompilaci na Xeon E3-1240v2 a spousteni na nejakem starsim dual core 
Opteronu (Sun Fire X2100 M2). Nicmene dns-terror pada i kdyz ho spoustim 
primo na Xeon E3-1240v2

[...]

> Zustanem u te prvni moznosti.
>
> Ten kod v BoolString.h je celkem trivialni prirazeni. Takze bude treba dat:
> "set disassembly-flavor intel" (ledaze preferujes defaultni att) a
> disassembly 0x405c26
>
> Ono to vypise vysledek prekladu od zacatku te funkce. U me ale na adrese
> 405c26 instrukce nezacina, takze je zrejmy, ze ja mam prelozeno jinak
> (jina verze OS, jina verze prekladace, jine nastaveni systemu, jina
> uroce optimalizace pri prekladu, ...).
>
> To by mohlo podezreni potvrdit nebo vyvratit.

Tady jsem dostal tohle

(gdb) set disassembly-flavor intel
(gdb) disassembly 0x405c26
Undefined command: "disassembly".  Try "help".

(gdb) disassemble 0x405c26
Dump of assembler code for function _ZN10BoolStringaSERKS_:
0x0000000000405c00 <_ZN10BoolStringaSERKS_+0>:  push   rbp
0x0000000000405c01 <_ZN10BoolStringaSERKS_+1>:  mov    rbp,rsp
0x0000000000405c04 <_ZN10BoolStringaSERKS_+4>:  mov    QWORD PTR 
[rbp-0x10],rdi
0x0000000000405c08 <_ZN10BoolStringaSERKS_+8>:  mov    QWORD PTR 
[rbp-0x18],rsi
0x0000000000405c0c <_ZN10BoolStringaSERKS_+12>: mov    rsi,QWORD PTR 
[rbp-0x10]
0x0000000000405c10 <_ZN10BoolStringaSERKS_+16>: mov    rdi,QWORD PTR 
[rbp-0x18]
0x0000000000405c14 <_ZN10BoolStringaSERKS_+20>: mov    rdi,QWORD PTR [rdi]
0x0000000000405c17 <_ZN10BoolStringaSERKS_+23>: mov    QWORD PTR [rsi],rdi
0x0000000000405c1a <_ZN10BoolStringaSERKS_+26>: mov    rdi,QWORD PTR 
[rbp-0x18]
0x0000000000405c1e <_ZN10BoolStringaSERKS_+30>: mov    al,BYTE PTR [rdi+0x8]
0x0000000000405c21 <_ZN10BoolStringaSERKS_+33>: and    al,0x1
0x0000000000405c23 <_ZN10BoolStringaSERKS_+35>: mov    BYTE PTR [rsi+0x8],al
0x0000000000405c26 <_ZN10BoolStringaSERKS_+38>: ud2a
End of assembler dump.

> Mimochodem, dotceneho mista se tyka warning uz pri prekladu:
>
>> ./BoolString.h:59:3: warning: control reaches end of non-void function
>> [-Wreturn-type]
>>   }
>>   ^
>
> To by pad zpusobit nemelo, ale faktem je, ze funkce ma vracet hodnotu a
> pritom se navratova hodnota nenastavuje. Je pravda, ze v pripade
> optimalizaci by to mohlo zpusobit, ze oprimalizator nejaky potrebny kod
> vyradi, protoze ho bude pokladat za zbytecny. To ale tezko rict ...

Da se z toho vyzdimat jeste nejaka uzitecna informace? Pripadne da se 
"neco" zkusit upravit pri te kompilaci, aby to fungovalo? Nebo tohle uz 
musim jedine poslat autorovi fastresolve, at si s tim zkusi poradit?

Kazdopadne diky za cenne rady a instrukce!

Mirek



More information about the Users-l mailing list