Tengo función: foo()
tema # define si su llamada desde dentro de un if() bloquear
Quiero escribir un #define
para poner 'frente' de foo()
(una cuña supongo) para agregar depuración en la parte delantera de foo()
. Así que la #define
debe mirar esta esto:
#define foo(dev) { \
printk("%s: get %lx\n", (dev)->name); \
foo_orig(dev); \
}
Y luego cambiar el nombre foo()
-foo_orig()
.
Esto funciona bien si foo()
función se llama en 'aislamiento' de esta manera:
foo(dev);
PERO, si su llamada dentro de un if()
entonces es un problema de compilación ...
if (something() && foo(dev)) {
..
¿He explicado el problema? y ¿hay una solución para esto?
El problema es que realmente necesito el shim como definir porque necesito el código para vivir en la función de llamada en lugar de foo()
. [La razón de esto es porque necesito volcar la EIP la función de la llamada por razones de depuración (es decir, lo que necesito saber quién está llamando foo()
]
Por qué no hacer una función en lugar de una macro que llama printk y luego devuelve el valor de foo_orig? – PherricOxide
No estoy seguro de qué compilador usa, pero debería poder expandir las directivas de preprocesador y observar el código que el compilador ve (y no le gusta) después de la expansión –