2010-11-19 19 views
8

me encontré con configurar la opción siguiente:Valgrind compilación cruzada para ARMv5tel

./configure --target=armv5tel CC=arm-linux-gnueabi-gcc --host=i686-linux 

luego corrió hacer

me encontré con el siguiente error:

m_cpuid.S: Assembler messages: 
m_cpuid.S:40: Error: bad instruction `pushl %ebp' 
m_cpuid.S:41: Error: bad instruction `movl %esp,%ebp' 
m_cpuid.S:42: Error: bad instruction `pushl %ecx' 
m_cpuid.S:43: Error: bad instruction `pushfl' 
m_cpuid.S:44: Error: bad instruction `pushfl' 
m_cpuid.S:45: Error: bad instruction `popl %eax' 
m_cpuid.S:46: Error: bad instruction `movl %eax,%ecx' 
m_cpuid.S:47: Error: bad instruction `xorl $0x200000,%eax' 
m_cpuid.S:48: Error: bad instruction `pushl %eax' 
m_cpuid.S:49: Error: bad instruction `popfl' 
m_cpuid.S:50: Error: bad instruction `pushfl' 
m_cpuid.S:51: Error: bad instruction `popl %eax' 
m_cpuid.S:52: Error: bad instruction `popfl' 
m_cpuid.S:53: Error: bad instruction `xorl %ecx,%eax' 
m_cpuid.S:54: Error: bad instruction `andl $0x200000,%eax' 
m_cpuid.S:55: Error: bad instruction `shrl $21,%eax' 
m_cpuid.S:56: Error: bad instruction `popl %ecx' 
m_cpuid.S:57: Error: bad instruction `movl %ebp,%esp' 
m_cpuid.S:58: Error: bad instruction `popl %ebp' 
m_cpuid.S:59: Error: bad instruction `ret' 
m_cpuid.S:76: Error: bad instruction `pushl %ebp' 
m_cpuid.S:77: Error: bad instruction `movl %esp,%ebp' 
m_cpuid.S:78: Error: bad instruction `pushl %eax' 
m_cpuid.S:79: Error: bad instruction `pushl %ebx' 
m_cpuid.S:80: Error: bad instruction `pushl %ecx' 
m_cpuid.S:81: Error: bad instruction `pushl %edx' 
m_cpuid.S:82: Error: bad instruction `pushl %esi' 
m_cpuid.S:83: Error: bad instruction `movl 8(%ebp),%eax' 
m_cpuid.S:84: Error: bad instruction `cpuid' 
m_cpuid.S:85: Error: bad instruction `movl 12(%ebp),%esi' 
m_cpuid.S:86: Error: bad instruction `testl %esi,%esi' 
m_cpuid.S:87: Error: bad instruction `jz 1f' 
m_cpuid.S:88: Error: bad instruction `movl %eax,(%esi)' 
m_cpuid.S:90: Error: bad instruction `movl 16(%ebp),%esi' 
m_cpuid.S:91: Error: bad instruction `testl %esi,%esi' 
m_cpuid.S:92: Error: bad instruction `jz 2f' 
m_cpuid.S:93: Error: bad instruction `movl %ebx,(%esi)' 
m_cpuid.S:95: Error: bad instruction `movl 20(%ebp),%esi' 
m_cpuid.S:96: Error: bad instruction `testl %esi,%esi' 
m_cpuid.S:97: Error: bad instruction `jz 3f' 
m_cpuid.S:98: Error: bad instruction `movl %ecx,(%esi)' 
m_cpuid.S:100: Error: bad instruction `movl 24(%ebp),%esi' 
m_cpuid.S:101: Error: bad instruction `testl %esi,%esi' 
m_cpuid.S:102: Error: bad instruction `jz 4f' 
m_cpuid.S:103: Error: bad instruction `movl %edx,(%esi)' 
m_cpuid.S:105: Error: bad instruction `popl %esi' 
m_cpuid.S:106: Error: bad instruction `popl %edx' 
m_cpuid.S:107: Error: bad instruction `popl %ecx' 
m_cpuid.S:108: Error: bad instruction `popl %ebx' 
m_cpuid.S:109: Error: bad instruction `popl %eax' 
m_cpuid.S:110: Error: bad instruction `movl %ebp,%esp' 
m_cpuid.S:111: Error: bad instruction `popl %ebp' 
m_cpuid.S:112: Error: bad instruction `ret' 
m_cpuid.S:154: Error: junk at end of line, first unrecognized character is `,' 
make[3]: *** [libcoregrind_x86_linux_a-m_cpuid.o] Error 1 
make[3]: Leaving directory `/home/swathi/Desktop/valgrind-3.6.0/coregrind' 
make[2]: *** [all] Error 2 
make[2]: Leaving directory `/home/swathi/Desktop/valgrind-3.6.0/coregrind' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/home/swathi/Desktop/valgrind-3.6.0' 
make: *** [all] Error 2 

Me estoy perdiendo algo?

swathi

+0

¿Puede x compilar valgrind? –

Respuesta

18

Sus argumentos configure no son adecuados para la compilación cruzada. Para realizar una compilación cruzada con el autoconf reciente, simplemente especifique el host y deje que resuelva el resto. Por lo que sería de la misma familia:

./configure --host = arm-linux-gnueabi

También tuve que modificar el script de configuración mediante la sustitución de "ARMv7 *" con "brazo *". Verás dónde.

Sin embargo, hay otro problema. El soporte ARM en valgrind cubre todas las instrucciones ARMv5 y un subconjunto selecto de las instrucciones v6 y v7. PERO, y es un gran pero, para ejecutar realmente valgrind debe usar una CPU capaz de ejecutar código ARMv7. Eso significa Cortex-A o mejor.

Si tiene la intención de ejecutar valgrind en un procesador de clase ARMv5 (como XScale) no funcionará y el programa de destino presentará un código de operación ilegal.

Triste pero cierto. No valgrind para mí.

HTH.

+3

Hay otro elemento en esto: en el nivel superior Makefile * .am's, hay adiciones específicas de '-mcpu = cortex8', las reemplacé por '-march = armv5te -mtune = arm926ej-s -mno-thumb-interwork - mno-thumb -g '(para mi CPU Marvell MV7600, YMMV) - y eso me llevó al punto donde coregrind/m_dispatch/dispatch-arm-linux.S es ahora la barricada ya que tiene instrucciones específicas de cortex (movw, movt) que no funcionan con mi CPU. Solo para verlos los comenté y el binario se ejecuta sin la falla de excepción pero, obviamente, no se ejecuta correctamente ... Un poco más cerca. – synthesizerpatel

+0

Gracias por compartir estos datos. Cuando compilé y ejecuté valgrind 3.12.0 para un iMX25 (ARM926EJ-S con instrucciones ARMv5TEJ), la única línea de salida que vi fue: "Instrucción no válida". ¿Hay un equivalente valgrind con el que pueda trabajar? –

3
  1. que la limpieza sea
  2. ./configure CC = "gcc su camino de" --target = arm-ninguno-linux-gnueabi --host = ARMv7-ninguno-linux-gnueabi
  3. hacer
  4. sudo make install
Cuestiones relacionadas