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.