Articles of llvm

¿Qué usar en lugar de mudflap con gcc / llvm (para detectar errores de acceso a la memoria)?

Parece que la característica -fmudflap se eliminó de GCC. Por lo tanto, mi pregunta: ¿qué usar en lugar de él para analizar dinámicamente los progtwigs para lecturas / escrituras fuera de límites, lecturas sin inicializar y tales problemas? (y quizás como una pregunta complementaria: ¿por qué se eliminó?) El enfoque de mudflap (instrumentalizar el código […]

¿Hay alguna forma de obtener el tipo en bruto del valor del indicador de deferencia llvm (es decir, el tipo de indicador)?

Tal vez el título sea algo confuso. Pero déjame mostrarte un ejemplo. void foo(int val) { // do something } int i = 27; int* pi = &i; foo(*pi); Aquí, si lo comstackmos usando clang, el tipo de * pi será i32, pero sabemos que pi es de tipo puntero. mi pregunta es que usamos […]

Use un registro particular para una variable en LLVM

Estoy escribiendo un paso de LLVM que modifica el código de bits de LLVM. Para una variable, quiero que use un registro, digamos R15 en x86. ¿Cómo puedo indicarle a LLVM que use este registro cuando genere un código de máquina? ¿Se puede instruir esto a nivel de código de bits?

Número de recuento de matrices

¿Cómo puede contarse el número total de arreglos en un progtwig en C? Las declaraciones de matriz en LLVM IR corresponden al tipo de operación de alloca . Asi que int a[10]; corresponde a %a = alloca [10 x i32], align 4 en LLVM IR. Pero también me di cuenta de que int j = […]

Cómo obtener el objeto de la clase Stmt del objeto Expr en Clang

Estoy escribiendo un complemento de clang para insertar aserciones en un código C. He implementado una clase para visitar a cada operador unario y verifico si es una falta de referencia de puntero. Si es así, me gustaría insertar una comprobación de aserción de puntero NULL para ello. Pero estoy atascado ya que no puedo […]

LLVM y GCC, diferente salida del mismo código.

Este es un código de muestra solo para mostrar una salida diferente del comstackdor LLVM y el GCC. ¿Me pregunto porque? La respuesta debería ser muy simple, pero no puedo verla. (Xcode 4.6.1) El código: #include #define MAX(a,b) ( (a) > (b) ? (a) : (b) ) int increment() { static int i = 42; […]

No se puede vincular con la biblioteca estática al comstackr objetos desde el código de bits LLVM.

Estoy desarrollando un pase de comstackdor LLVM. Ejecuto un pase de la siguiente manera: Comstackr a código de bits LLVM clang foo.c -emit-llvm -c -o foo.bc Ejecute foo.bc mediante opt (el error aún ocurre sin este paso) Comstackr de nuevo a un archivo de objeto clang -c -o foo.o foo.bc Ahora foo.o podría ser parte […]

Obtener el nombre del operando de un LLVM getelementptr en

Estoy intentando obtener el nombre de una matriz a la que hace referencia una instrucción getelementptr. Esto parece funcionar cuando la matriz se indexa en el uso de una variable intermedia en el código c real, por lo que int a = 0; i[a] = 3; En este caso, obtengo el siguiente bitcode. %arrayidx = […]

¿Cómo creo metadatos con nombre a través de la api llvm-c?

Quiero agregar metadatos de depuración a mi IR llvm generado, que se crea a través de la API de C. Sin embargo, no puedo averiguar cómo crear nodos de metadatos con nombre (como! Llvm.dbg.cu), ni siquiera cómo crear nodos de metadatos con números únicos (es decir,! 0,! 1, etc.). Agregar operandos de metadatos a las […]

C ABI con LLVM

Tengo un comstackdor escrito con LLVM y estoy buscando mejorar mi cumplimiento de ABI. Por ejemplo, me ha resultado difícil encontrar documentos de especificación para C ABI en Windows x86 o Linux. Y los que he encontrado lo explican en términos de RAX / EAX / etc, en lugar de los términos de IR que […]