Sto scrivendo un piccolo modulo kernel caricabile linux per la versione 2.6.32 in esecuzione su SM86 x86-64.Indirizzo della variabile per-cpu
La mia domanda è: c'è un modo per ottenere l'offset dell'indirizzo di una variabile per-cpu dichiarata nel kernel. Per offset intendo l'offset dell'indirizzo dalla base percpu, che si trova nel registro gs. Specificamente sto provando a trovare l'offset della variabile current_task, che è un puntatore alla task-struct del task corrente, credo.
Sto guardando arch/x86/include/asm/current.h, che ha la funzione get_current(). Questa funzione legge la variabile per_campo current_task usando la macro percpu_read_stable. Per quanto posso capire percpu_read_stable espande fondamentalmente in una routine ASM simili:
asm("movq %%gs:%P1, %0"
: "=r" (ret__)
: "m" (per_cpu__current_task))
Ciò è in arch/x86/include/asm/percpu.h. Voglio leggere l'offset dopo gs dal mio modulo. Se provo a fare una semplice stampa con la variabile per_cpu_current_task, il modulo viene ucciso.
Grazie per l'attenzione!