无法为 ARM 交叉编译 Valgrind
Unable to cross-compile Valgrind for ARM
google 上有很多与我类似的问题,我都试过了,但 none 个都有效,所以我不得不 post 这个问题。
我正在尝试使用 Valgrind 检测某些二进制文件的内存泄漏,这些文件是为我的设备编译的(使用处理器:ARM926EJ-S rev 5 (v5l))。
因此,我尝试使用适用于我的设备的特定工具链交叉编译 Valgrind。
这是我的过程:
我正在使用 Valgrind 3.13.0 和 Ubuntu 16
1/cd Valgrind-3.13.0
2/ sed "s/armv7/arm/g" configure
(这样它就不会抱怨不受支持的架构师)。
3/ ./configure --host=arm-none-linux-gnueabi
(使用我特定的交叉编译器而不是 Linux 的默认)
4/make
弹出如下错误:
error: bad value (cortex-a8) for -mcpu= switch
=> 由于我的设备使用 ARM926EJ-S 处理器,我将 Valgrin-3.13.0 文件夹中所有文件的 cortex-a8
替换为 arm926ej-s
。
运行 再次执行上述步骤并弹出另一个错误:
m_dispatch/dispatch-arm-linux.S: Assembler messages:
m_dispatch/dispatch-arm-linux.S:104: Error: selected processor does not support `movw r1,#47'
m_dispatch/dispatch-arm-linux.S:105: Error: selected processor does not support `movw r2,#0'
m_dispatch/dispatch-arm-linux.S:157: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:158: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:165: Error: selected processor does not support `movw r1,#(((1<<15))-1)'
m_dispatch/dispatch-arm-linux.S:166: Error: selected processor does not support `movw r4,#:lower16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:169: Error: selected processor does not support `movt r4,#:upper16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:182: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindir_misses_32'
m_dispatch/dispatch-arm-linux.S:183: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindir_misses_32'
Makefile:3224: recipe for target 'm_dispatch/libcoregrind_arm_linux_a-dispatch-arm-linux.o' failed
我做错了什么?
ARM9 使用旧的 ARMv5 指令集。从错误消息来看,Valgrind 的汇编代码似乎需要比您的处理器拥有的指令集更新的 ARM (ARMv7) 指令集。
因此,您可能不走运,需要将上述汇编程序移植到 ARMv4 才能让 valgrind 工作。
google 上有很多与我类似的问题,我都试过了,但 none 个都有效,所以我不得不 post 这个问题。
我正在尝试使用 Valgrind 检测某些二进制文件的内存泄漏,这些文件是为我的设备编译的(使用处理器:ARM926EJ-S rev 5 (v5l))。
因此,我尝试使用适用于我的设备的特定工具链交叉编译 Valgrind。
这是我的过程: 我正在使用 Valgrind 3.13.0 和 Ubuntu 16
1/cd Valgrind-3.13.0
2/ sed "s/armv7/arm/g" configure
(这样它就不会抱怨不受支持的架构师)。
3/ ./configure --host=arm-none-linux-gnueabi
(使用我特定的交叉编译器而不是 Linux 的默认)
4/make
弹出如下错误:
error: bad value (cortex-a8) for -mcpu= switch
=> 由于我的设备使用 ARM926EJ-S 处理器,我将 Valgrin-3.13.0 文件夹中所有文件的 cortex-a8
替换为 arm926ej-s
。
运行 再次执行上述步骤并弹出另一个错误:
m_dispatch/dispatch-arm-linux.S: Assembler messages:
m_dispatch/dispatch-arm-linux.S:104: Error: selected processor does not support `movw r1,#47'
m_dispatch/dispatch-arm-linux.S:105: Error: selected processor does not support `movw r2,#0'
m_dispatch/dispatch-arm-linux.S:157: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:158: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:165: Error: selected processor does not support `movw r1,#(((1<<15))-1)'
m_dispatch/dispatch-arm-linux.S:166: Error: selected processor does not support `movw r4,#:lower16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:169: Error: selected processor does not support `movt r4,#:upper16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:182: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindir_misses_32'
m_dispatch/dispatch-arm-linux.S:183: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindir_misses_32'
Makefile:3224: recipe for target 'm_dispatch/libcoregrind_arm_linux_a-dispatch-arm-linux.o' failed
我做错了什么?
ARM9 使用旧的 ARMv5 指令集。从错误消息来看,Valgrind 的汇编代码似乎需要比您的处理器拥有的指令集更新的 ARM (ARMv7) 指令集。
因此,您可能不走运,需要将上述汇编程序移植到 ARMv4 才能让 valgrind 工作。