2010-04-23 16 views
9

Estoy tratando de hacer que LLVM en línea funcione desde una biblioteca.Hacer LLVM en línea una función desde una biblioteca

tengo archivos de código binario (LLVM generados manualmente) que unidos entre sí con llvm-link, y también tengo una biblioteca (escrito en C) compilado en código binario por clang y archivados con llvm-ar. Logré vincular todo junto y ejecutar, pero no logro obtener LLVM para alinear una función de la biblioteca. ¿Alguna pista sobre cómo debe hacerse esto?

Respuesta

8

Después de vincular los archivos de código de bit junto con la biblioteca, ¿ejecuta un pase Internalize en el código de bit vinculado? La pasada de internalización hace que todas las funciones (además de main()) estén estáticas y le dice al optimizador/generador de código que las funciones pueden incluirse de manera segura sin mantener una copia disponible para alguna referencia externa (inexistente).

Vincular manualmente mis archivos de código de bits y las bibliotecas de códigos de bits utilizando código prestado de llvm-ld y hago el pase de internalización, pero no estoy seguro de si llvm-link lo hace o no.

+0

Funcionó como un amuleto – capitrane

+0

¿Cómo puedo iniciar un pase de internalización? – osgx

+0

@osgx: mira 'createInternalizePass' (' lib/Transforms/IPO/Internalize.cpp'). –

Cuestiones relacionadas