¿Es posible inyectar valores en el analizador de valores frama-c?
Frecuentes
Visto 285 veces
2
Estoy experimentando con el analizador de valores frama-c para evaluar C-Code, que en realidad está enhebrado. Quiero ignorar cualquier problema de subprocesamiento que pueda ocurrir y solo inspeccionar los valores posibles para un solo subproceso. Hasta ahora, esto funciona estableciendo el punto de entrada donde comienza el hilo.
Ahora a mi problema: dentro de un hilo, leo valores que están escritos por otro hilo, porque frama-c no considera (¿y no debería?) el rango es de hecho mucho más pequeño. ¿Es posible decirle al analizador de valores el rango de valores de esta variable?
Ejemplo:
volatile int x = 0;
void f() {
while(x==0)
sleep(100);
...
}
Aquí frama-c detecta que x es volátil y, por lo tanto, tiene un rango [--..--], pero sé lo que el otro subproceso escribirá en x, y quiero decirle al analizador que x solo puede ser 0 o 1. ¿Es esto posible con frama-c, especialmente en la interfaz gráfica de usuario?
gracias de antemano cristian
2 Respuestas
3
Actualmente, esto no es posible de forma automática. El análisis de valor considera que las variables volátiles siempre contienen el rango completo de valores incluidos en su tipo subyacente. Sin embargo, existe un complemento patentado que transforma los accesos a variables volátiles en llamadas a funciones proporcionadas por el usuario. En su caso, su código se transformaría esencialmente en esto:
int x = 0;
void f() {
while(1) {
x = f_volatile_x();
if (x == 0)
sleep(100);
...
}
Especificando f_volatile_x
correctamente, puede asegurarse de que solo devuelve valores entre 0 y 1.
Respondido el 13 de junio de 12 a las 14:06
2
Si la variable 'x' no se modifica en el hilo que está estudiando, también puede inicializarla al comienzo de la función 'principal' con:
x = Frama_C_interval (0, 1);
Esta es una función definida por Frama-C en ...../share/frama-c/builtin.c
por lo que debe agregar este archivo a sus entradas cuando lo use.
Respondido el 15 de junio de 12 a las 11:06
Gracias por tu sugerencia, probaré esta función. Incluso es útil en algunos otros casos. - Eltges
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas static-analysis frama-c or haz tu propia pregunta.
Gracias por la información. ¿Puede decirme el nombre del complemento y si/dónde está disponible? - Eltges
Actualmente, el complemento simplemente se llama "Volátil". Es accesible a través de las licencias comerciales de Frama-C, detalladas en frama-c.com/support.html. - byako