ERROR::SDT(7stap) ERROR::SDT(7stap) JMENO error::sdt - chyby znacek POPIS Znacky pouzivane v systemtapu jsou navrzeny podle dtrace USDT API, ale maji odlisnou implementaci. Pridavaji do "text" segmentu uzivatelskeho programu NOP instrukci a do ELF poznamky souvisejici metadata, ktera popisuji vlastnosti znacky, jako jeji jmeno a parametry. Tyto znacky jsou rozpoznatelne ruznymi nastroji. Dokaze je konzumovat nejen systemtap, ale napr. i GDB. Znacky nesou informace o typech svych parametru, a lze do nich vlozit spolehlive sondazni body nezavisle na ladicich informacich DWARF. Dohledavani parametru je komplikovane: Protoze jsou pouzity gcc inline- assembly directivy, ukladaji znacky STAP_PROBE / DTRACE_PROBE pro kazdy operand asm vyraz. Kompilatoru se preda volne asm omezeni "nor", ktere obvykle funguje dobre. Toto reseni obvykle nenuti kompilator pracovat s registry, coz by instrumentovany program zpomalilo. Ovsem ne vzdy toto reseni funguje zcela bez chyb. chyba vyhodnoceni za behu GCC muze emitovat retezce ktere assembler korektne zpracuje (v kontextu kompilovaneho programu), ale ladici nastroj muze mit s jejich interpretaci potiz. Napriklad se operand muze odkazovat k lokalnimu symbolu, ktery se do finalniho ELF souboru nedostane. Takovy operand je pak nedostupny. Pokus o pristup k prislusnemu parametru pak obvykle skonci chybou "SDT asm not understood". prilis komplikovany vyraz GCC muze generovat validni, ale prilis slozitou adresaci zalozenou na komplexnich datovych typech a slozite pointerove aritmetice. Systemtap a/nebo GDB nemuseji byt schopny takove vyrazy spravne analyzovat a v pripade systemtapu bude pak vysledkem chyba "SDT asm not understood". prilis restriktivni omezeni GCC nemusi byt schopne program s "nor" omezenim prelozit kvuli nedostatku registru nebo z jineho duvodu. V takovem pripade muze nastat chyba jako napr. "asm operand has impossible constraints". Tyto problemy je v zasade mozno obejit dvema cestami. zmenit omezeni Pri kompilaci instrumentovaneho programu nastavte makro STAP_SDT_ARG_CONSTRAINT na jine omezeni. Ruzne moznosti uvadi GCC manual. Napriklad na mnoha architekturach "r" zpusobi predavani operandu pres registry a "g" ponecha operandy v zasade bez omezeni. pouzijte debuginfo Pokud se instrumentovany program zkompiluje, muze byt resenim ponechat v nem znacky, ale vyhnout se extrakci parametru z nich. V nejhorsim pripade odstrante makra zcela. Pokud byly ladici informace vygenerovany a jsou k dispozici, systemtap se muze odkazovat ke kontextovym promennym namisto k parametrum znacek STAP_PROBE. VIZ TEZ stap(1), stapprobes(3stap), error::dwarf(7stap), http://gcc.gnu.org/onlinedocs/gcc/Constraints.html, http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation, error::reporting(7stap) ERROR::SDT(7stap)