error::pass4 - chyby procesní fáze 4
Během procesní fáze 4 (compilation) dochází
obvykle jen k několika málo druhům chyb:
- změny verze jádra
- Vložený C kód, který systemtap
generuje, nebo obsahuje v rámci tapset skriptů by měl
být portabilní napříč širokou
škálou verzí linuxového jádra.
Nicméně, mohou se vyskytnout výjimky, jako
například změna typu parametrů jaderné
funkce a podobně. Pokud k tomu dojde, může být
řešením použít upstream verzi
systemtapu (git://sourceware.org/git/systemtap.git), která je na
takové změny obvykle rychle adaptována. Jinými
slovy: Pro použití s velmi mladými
jádry sestavte systemtap ze zdrojových
kódů v gitu. Pokud ani upstream verze systemtapu
neobsahuje opravu, prosím, nahlašte chybu
vývojářům systemtapu.
- chybný vložený (embedded) C
kód
- Vložený C kód ve Vašem guru
(-g) skriptu systemtap nekontroluje. Předává jej
kompilátoru zcela bez úprav. Chyby tohoto typu odhalí
kompilátor právě v procesní fázi 4
během sestavování jaderného modulu systemtapu.
- nekompratibilní vložený C
kód
- Rozhraní mezi C kódem, který systemtap
generuje a vloženým C kódem se někdy
mění. Například před verzí
systemtap-1.8 se parametry předávaly pomocí maker
THIS->foo and THIS->__retvalue ale od verze 1.8
již pomocí maker STAP_ARG_foo and
STAP_RETVALUE. Upravte svůj vložený C
kód tak, aby vyhovoval aktuální syntaxi, nebo
použijte režim zpětné kompatibility stap
--compatible=VERSION .
- chyby a záhadné chování
kompilátoru
- "Internal compiler error" značí
chyby kompilátoru. Takové chyby by měly být
nahlášeny vývojářům
kompilátoru. K chybovému hlášení
připojte předzpracovaný .i soubor spolu s
kopií dané příkazové
řádky kompilátoru. Pro sesbírání
relevantních informací, spusťte
stap -k --vp 0003 -p4 ....
Systemtap takto uchová dočasný adresář i
příkazovou řádku kompilátoru. V tomto
adresáři se nachází hlavní
vygenerovaný soubor
stap_NNNNN_src.c. Použijte
následující postup pro získání
předzpracovaného výstupu:
make -C /lib/modules/`uname -r`/build M=`pwd` stap_NNNNN_src.i
(všimněte si přípony
.i ).
Příkazová řádka kompilátoru by
měla být uchována v souboru
.stap_NNNNN_src.i.cmd.
stap(1),
error::reporting(7stap)