2012-03-30 8 views
9

Estoy buscando en la generación de un gráfico de llamadas para el kernel de Linux, que incluiría los punteros de función (véase mi pregunta anterior Static call graph generation for the Linux kernel para más información). Me han dicho que LLVM debería ser adecuado para este propósito, sin embargo, no pude encontrar la información relevante en llvm.org¿Cómo usar LLVM para generar un gráfico de llamadas?

Cualquier ayuda, incluidos los indicadores de la documentación pertinente, sería de agradecer.

Respuesta

12

primer lugar, usted tiene que compilar el núcleo en LLVM IR (en lugar de archivos de objetos nativos). Luego, usando llvm-ld, combine todos los archivos de objetos IR en un solo módulo grande. Podría ser algo bastante complicado de hacer, tendrás que modificar mucho los archivos MAKE, pero creo que es factible.

Ahora usted puede hacer su análisis. Se puede generar un simple gráfico de llamadas usando la herramienta opt con el pase -dot-callgraph. Es poco probable que maneje los punteros a las funciones, por lo que es posible que desee modificarlo.

El seguimiento de todas las rutas de flujo de datos posibles que llevarían los punteros a su función es todo un reto, y en general es imposible de hacer (si hay punteros a conversiones de enteros, si los punteros se almacenan en estructuras de datos complicadas, etc.). Para la mayoría de los casos específicos, puede intentar implementar una interpretación abstracta global para aproximar todas las posibles rutas de flujo de datos para sus punteros. No sería preciso, por supuesto, pero obtendrás al menos una aproximación conservadora.

+2

Realmente no desea producir un callgraph de puntos para 8 millones de líneas de código. Cubriría un cour de tenis, si el punto pudiera dibujarlo, que no puede. Aparte de eso, este es un gran eco de la respuesta a la otra nota de pregunta por parte de OP: -} con especial énfasis en lo que son los punteros a la función divertida. –

+0

@IraBaxter, ciertamente no desea * mostrar * un callgraph de puntos para algo más grande que "¡Hola, mundo!". Pero es posible que desee utilizar ese archivo .dot para su posterior análisis. Normalmente analizo archivos .dot y los almacena en una base de datos. –

+0

Gracias por señalar la herramienta 'opt'. Sí, Ira, no estoy buscando generar una representación gráfica del gráfico de llamadas. Tenerlo en cualquier formato analizable está bien, y el formato de puntos califica. En cuanto a los indicadores de función, me han dicho que LLVM debería poder hacer algunos de esos puntos: análisis para punteros de función. No estoy buscando implementar esto yo mismo, claramente. – addalbx

Cuestiones relacionadas