You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cavium Octeon III处理器运行Valgrind触发Bus Error问题求助

Cavium Octeon III上Valgrind运行触发Bus Error调试求助

交叉编译配置

我尝试在Cavium Octeon III处理器上运行Valgrind,使用以下命令交叉编译Valgrind 3.19.0:

export CROSS_COMPILE=/opt/CAVIUMsdk312/OCTEON-SDK/tools/bin/mips64-octeon-linux-gnu-

./configure --target=mips64-octeon-linux-gnu \
          --host=mips64-octeon-linux-gnu \
          --prefix=/home/prateeka/packages/valgrind-3.19.0/install \
          CFLAGS=-static \
          CC=${CROSS_COMPILE}gcc \
          CPP=${CROSS_COMPILE}cpp \
          CXX=${CROSS_COMPILE}g++ \
          LD=${CROSS_COMPILE}ld \
          AR=${CROSS_COMPILE}ar

运行错误情况

我编写了一个带有故意内存泄漏的小型应用程序mem-leak测试Valgrind,但运行时触发Bus Error,命令行日志如下:

-bash-4.3# export VALGRIND_LIB=/etc/valgrind-bins/libexec/valgrind  
-bash-4.3# ./bin/valgrind ./mem-leak  
==20887== Memcheck, a memory error detector  
==20887== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.  
==20887== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info  
==20887== Command: ./mem-leak  
==20887==  
==20887== Invalid read of size 8  
==20887==    at 0x40BEEE4: __ctype_init (in /lib64/libc-2.16.so)  
==20887==    by 0x40AFC8C: _init (in /lib64/libc-2.16.so)  
==20887==    by 0x40129D8: call_init (in /lib64/ld-2.16.so)  
==20887==    by 0x4012BC8: _dl_init (in /lib64/ld-2.16.so)  
==20887==    by 0x400328C: _dl_start_user (in /lib64/ld-2.16.so)  
==20887==  Address 0xffffffffffff9000 is not stack'd, malloc'd or (recently) free'd  
==20887==  
==20887==  
==20887== Process terminating with default action of signal 10 (SIGBUS)  
==20887==    at 0x40BEEE4: __ctype_init (in /lib64/libc-2.16.so)  
==20887==    by 0x40AFC8C: _init (in /lib64/libc-2.16.so)  
==20887==    by 0x40129D8: call_init (in /lib64/ld-2.16.so)  
==20887==    by 0x4012BC8: _dl_init (in /lib64/ld-2.16.so)  
==20887==    by 0x400328C: _dl_start_user (in /lib64/ld-2.16.so)  
==20887==  
==20887== HEAP SUMMARY:  
==20887==     in use at exit: 0 bytes in 0 blocks  
==20887==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated  
==20887==  
==20887== All heap blocks were freed -- no leaks are possible  
==20887==  
==20887== For lists of detected and suppressed errors, rerun with: -s  
==20887== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)  
Bus error  

我检查了dmesg内核消息缓冲区,未发现非法虚拟地址访问相关错误,恳请提供调试建议。


调试建议

  • 验证Valgrind平台支持:Valgrind 3.19对Octeon III的特殊指令集扩展(如多媒体/加密指令)支持可能存在缺陷,尝试升级到Valgrind最新稳定版本,或确认官方文档中MIPS64 Octeon平台的支持状态。
  • 调整编译策略:移除CFLAGS=-static选项,改用动态编译Valgrind。静态编译会强制绑定特定版本libc,可能与Valgrind的内存沙箱机制冲突,导致__ctype_init这类初始化函数的内存访问被误判。
  • 核对工具链兼容性:确认Cavium SDK提供的mips64-octeon-linux-gnu-*工具链版本与Valgrind 3.19的要求匹配,避免因工具链版本差异导致二进制兼容性问题。
  • 启用详细调试日志:运行Valgrind时添加参数-v --trace-syscalls=yes,获取初始化阶段的系统调用、内存映射等详细日志,分析__ctype_init访问0xffffffffffff9000地址的具体原因。
  • 简化测试程序:编写仅包含malloc不释放的最小测试程序,排除原测试程序的其他逻辑干扰,确认问题是否源于Valgrind本身。
  • 自定义抑制规则:尝试添加Valgrind抑制规则屏蔽__ctype_init的错误,或查看Valgrind源码中MIPS平台的libc初始化处理逻辑,确认是否存在未适配Octeon平台的代码。

内容的提问来源于stack exchange,提问作者theshowstopper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:01:05