NÉV
kallsyms − minden kernel szimbólumot kiír hibakereséshez
ÁTTEKINTÉS
kallsyms [−Vh] kernel_fájlnév
LEÍRÁS
Kallsyms minden nem-verem szimbólumot kivesz a kernelből, és egy adat objektumot készít, amelyet ahhoz a kernelhez linkelve debuggolható lesz.
Egy normális kernel csak a modulok által használt szimbólumokat exportálja. Hibakereséshez szükség lehet minden nem-verem szimbólumora, nem csak az exportáltakra. kallsyms kivesz minden szekciót és szimbólumot a kernelből, a szekciókról, szimbólumokról és a címeikről egy listát készít, és egy relokálható objektumfájlt készít, ami csak egy __kallsyms szekciót tartalmaz. Miután a __kallsyms szekciót a kernelhez linkeltük, és a kernel bebootolt, bármely debugger használhatja a __kallsyms szekció adatait a jobb szimbólumfeloldás érdekében.
Például, egy debugger használhatja a __kallsyms adatokat, hogy feloldja a következő kernel címeket :-
* |
A tulajdonos kernel vagy modul. |
|||
* |
A szekció a tulajdonos kódon belül. |
|||
* |
A legközelebbi szimbólum. |
OPCIÓK
−V |
A modutils verzióját írja ki. |
|||
−h |
Kiírja a súgót. |
LINKER MENETEK
Ahhoz hogy egy pontos __kallsyms szekciót tartalmazó kernelt hozzunk létre, négy linker menetre van szükség a szokásos egy helyett. A kallsyms és a linker gyors, a három extra lépés csak néhány másodpercig tart egy P200-on.
1 |
Első kernel fordítás, __kallsyms adatok nélkül. Futtassuk a kallsyms-t ennek eredményén, létrehozva egy relokálható objektumot, amely tartalmazza a kernel minden szekcióját és szimbólumát. | ||
2 |
Linkeljük újra a kernelt, ekkor már a kallsyms kimenetet is hozzátéve az (1) lépésből. A __kallsyms szekciót hozzátéve megváltozik a szekciók száma és sok kernel szimbólum címe, így futtassuk le újra a kallsyms-t, most a második kernelen, újra elmentve a relokálható kimenetet. | ||
3 |
Linkeljük újra a kernelt, most a (2) lépésből származó kallsyms kimenettel. Futtassuk le megint a kallsyms-t az utolsó kernelen. A __kallsyms szekció mérete és pozíciója ebből a futtatásből már stabil, semelyik kernel szekció vagy szimbólum sem változik ezután. A kallsyms kimenete a kernel szimbólumok végső értékeit tartalmazza. | ||
4 |
Linkeljük össze a végső kernelt, a (3) lépésből származó kallsyms kimenettel. |
ADATFORMÁTUM
A __kallsyms szekció egy kicsit szokatlan. Szándékosan nem tartalmaz relokálható adatokat, minden "pointere" a szekción belüli bájt offszet vagy abszolút szám. Ez azt jelenti, hogy bárhová elhelyezhető relokációs problémák nélkül. Különösképp tárolható egy kernel image-en belül, tárolható a kerneltől külön, hozzáfűzhető egy modulhoz betöltés előtt, tárolható egy külön területen, stb.
A /usr/include/sys/kallsyms.h tartalmazza a __kallsyms adatok térképét.
Fejléc
* |
A fejléc mérete. | ||
* |
A __kalsyms adatok teljes mérete, beleértve a stringeket is. | ||
* |
Szekciók száma. Ez csak a memóriába betöltött szekciókat tartalmazza. | ||
* |
Az első szekció bejegyzés offszetje a __kallsyms fejléc kezdetétől. | ||
* |
A szekció bejegyzések mérete a név string nélkül. | ||
* |
A szimbólumok száma. | ||
* |
Az első szimbólum bejegyzés offszetje a __kallsyms fejléc kezdetétől. | ||
* |
A szimbólum bejegyzések mérete a név string nélkül. | ||
* |
Az első string bejegyzés offszetje a __kallsyms fejléc kezdetétől. | ||
* |
Az első szekció[1] kezdőcíme. | ||
* |
Az utolsó szekció[1] végcíme. |
Szekció
bejegyzés
Egy bejegyzés betöltött
szekciónként. Mivel a __kallsyms egy
betöltött szekció, ha az input fájl
tartalmazza a __kallsyms szekciót, akkor az is
szerepel a listában.
* |
A szekció kezdete a kernelen[1] belül. | ||
* |
A szekció mérete. | ||
* |
A szekció nevének offszetje a __kallsyms stringek kezdetétől. | ||
* |
A szekció jelzőbitjei az eredeti Elf szekcióból |
Szimbólum
bejegyzés
Egy bejegyzés szimbólumonként az input
fájlban. Csak a betöltött szekciókba
eső szimbólumok vannak tárolva.
* |
Offszet a __kallsyms szekció bejegyzésre, amelybe ez a szimbólum tartozik. Az offszet a __kallsyms szekció bejegyzések kezdetétől értendő. | ||
* |
A szimbólum címe a kernelen[1] belül. A szimbólumok ezen mező szerint növekvő sorrendbe vannak rendezve. | ||
* |
Offszet a szimbólum nevére, __kallsyms stringek kezdetétől számítva. |
Stringek
Null-végződésű stringek halmaza.
Minden névre van egy a __kallsyms stringterület
kezdetétől számított offszet
hivatkozás.
Megjegyzés
[1]
Ezek a mezők kivételek a "minden pointer
offszet" szabály alól. Ezek egy kernelen
belül abszolút címet tartalmaznak.
LÁSD MÉG
TÖRTÉNELEM
Eredeti verzió: Keith Owens <kaos [AT] ocs.au>, 2000 április
MAGYAR FORDÍTÁS
Böszörményi Zoltán <zboszor [AT] mail.hu>