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.

Alternativni moznost je, ze kod, ktery zhavaroval, uz davno neni prelozenym kodem, neb ho program pri svem behu poskodil a prepsal.

Mel jsem ale dojem, ze uz pomerne dlouho je na FreeBSD spustitelny kod chranen proti zapisu a spadlo by to uz pri pokusu o zapis do tehle pameti. Ale mozna to lze ovlivnit nejakymi parametry linkovani, takze uplne vyradit tuhle moznost si netroufam.

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.

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 ...


Dan



--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem