www print org latest know linux-kernel linux-device-driver embedded-linux kernel kernel-mode

linux-kernel - org - print kernel version linux



Llamador de funciĆ³n en el kernel de Linux (4)

Para obtener el nombre de la función de la persona que llama, se puede usar el siguiente comando printk.

printk ("La persona que llama es% pF / n", __builtin_return_address (0));

¿Hay alguna manera de obtener la función caller en el kernel de Linux? Sé que __ func __ devuelve el nombre de la función que se está ejecutando. Estoy buscando la función que se llama " __ func __ "


Si se necesitan o no punteros de cuadro depende del arco, IIRC. Para x86, ciertamente se desean explotar completamente estas características. También tenga en cuenta que la alineación puede sesgar la precisión de builtin_return_address por esta misma razón.

Si solo desea un volcado de pila para ver cómo se alcanzó un lugar, use mejor la función dump_stack() que tratando de jugar con la dirección incorporada_return.


También puede imprimir todo el contenido de la pila de llamadas llamando a dump_stack ().


Puede obtener a la persona que llama con __builtin_return_address(0) .

El llamador de la persona que llama es __builtin_return_address(1) y así sucesivamente.

Es una extensión de GCC, documentada en el manual de gcc: http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html

Edit: Probablemente debería señalar, que le da la dirección de la persona que llama. Si desea el nombre de la función, puede imprimirlo con %pS , por ejemplo:

printk("Caller is %pS/n", __builtin_return_address(0));

Si no desea imprimirlo, puede usar kallsyms_lookup() etc.