Provided by: systemtap-doc_5.1-4_amd64 bug

JMÉNO

       error::sdt - chyby značek <sys/sdt.h>

POPIS

       Značky <sys/sdt.h>

       používané   v   systemtapu  jsou  navrženy  podle  dtrace  USDT  API,  ale  mají  odlišnou
       implementaci. Přidávají do "text" segmentu uživatelského programu NOP instrukci a  do  ELF
       poznámky  související  metadata,  která  popisují  vlastnosti  značky,  jako  její jméno a
       parametry. Tyto značky jsou rozpoznatelné různými nástroji.  Dokáže  je  konzumovat  nejen
       systemtap,  ale  např.  i   GDB. Značky nesou informace o typech svých parametrů, a lze do
       nich vložit spolehlivé sondážní body nezávislé na ladicích informacích DWARF.

       Dohledávání parametrů je komplikované: Protože jsou použity gcc inline-assembly directivy,
       ukládají  značky  STAP_PROBE  /  DTRACE_PROBE  pro každý operand asm výraz. Kompilátoru se
       předá volné asm omezení "nor", které obvykle funguje dobře.  Toto  řešení  obvykle  nenutí
       kompilátor  pracovat  s  registry, což by instrumentovaný program zpomalilo. Ovšem ne vždy
       toto řešení funguje zcela bez chyb.

       chyba vyhodnocení za běhu
              GCC  může  emitovat  řetězce  které  assembler  korektně   zpracuje   (v   kontextu
              kompilovaného  programu),  ale ladicí nástroj může mít s jejich interpretací potíž.
              Například se operand může odkazovat k lokálnímu symbolu, který se do finálního  ELF
              souboru  nedostane. Takový operand je pak nedostupný. Pokus o přístup k příslušnému
              parametru pak obvykle skončí chybou "SDT asm not understood".

       příliš komplikovaný výraz
              GCC může generovat validní, ale příliš složitou adresaci založenou  na  komplexních
              datových  typech a složité pointerové aritmetice. Systemtap a/nebo GDB nemusejí být
              schopny takové výrazy správně analyzovat a v případě systemtapu bude pak  výsledkem
              chyba "SDT asm not understood".

       příliš restriktivní omezení
              GCC  nemusí být schopné program s "nor" omezením přeložit kvůli nedostatku registrů
              nebo z jiného důvodu. V takovém případě může nastat chyba jako např.  "asm  operand
              has impossible constraints".

       Tyto problémy je v zásadě možno obejít dvěma cestami.

       změnit omezení
              Při  kompilaci instrumentovaného programu nastavte makro STAP_SDT_ARG_CONSTRAINT na
              jiné omezení. Různé možnosti uvádí GCC manuál. Například  na  mnoha  architekturách
              "r"  způsobí  předávání  operandů přes registry a "g" ponechá operandy v zásadě bez
              omezení.

       použijte debuginfo
              Pokud se instrumentovaný program  zkompiluje,  může  být  řešením  ponechat  v  něm
              <sys/sdt.h>  značky,  ale vyhnout se extrakci parametrů z nich. V nejhorším připadě
              odstraňte <sys/sdt.h> makra zcela. Pokud byly ladicí informace vygenerovány a  jsou
              k  dispozici,  systemtap  se  může  odkazovat  ke  kontextovým  proměnným namísto k
              parametrům značek STAP_PROBE.

VIZ TÉŽ

       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)