clang-9前端命令因信号失败(排除内存不足)求助
解决clang-9加载自定义Pass时的段错误问题
结合你的环境信息(内存充足、clang-9版本、加载了自定义GPUBeaconPass),这个段错误几乎可以确定是自定义Pass与clang-9的兼容性问题或Pass本身的代码bug,以下是具体排查和解决步骤:
验证自定义Pass的版本一致性
确保编译libGPUBeaconPass.so时使用的LLVM头文件、库文件版本与clang-9(LLVM 9.0.0)完全一致。LLVM的API在不同版本间变化较大,混用版本编译的Pass会导致未定义行为,直接触发段错误。隔离Pass的影响
去掉编译命令中的-load /home/yunchae/.../libGPUBeaconPass.so参数,重新执行编译。如果编译成功,说明问题完全来自该自定义Pass;若仍然崩溃,再排查其他环境问题(但根据你的描述,这种概率极低)。用GDB定位崩溃点
通过调试工具精准定位段错误的触发位置:gdb --args /usr/local/bin/clang-9 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name backprop_cuda.ii -mrelocation-model static -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-pointer -coverage-notes-file /home/yunchae/personal_research/case/GPU-Sched/GPU-Sched-master/Benchmarks/rodinia_cuda_3.1/cuda/backprop/backprop_cuda.gcno -resource-dir /usr/local/lib/clang/9.0.0 -O1 -fdeprecated-macro -fdebug-compilation-dir /home/yunchae/personal_research/case/GPU-Sched/GPU-Sched-master/Benchmarks/rodinia_cuda_3.1/cuda/backprop -ferror-limit 19 -fmessage-length 0 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -load /home/yunchae/personal_research/case/GPU-Sched/GPU-Sched-master/build/passes/analysis/libGPUBeaconPass.so -faddrsig -o backprop_cuda.o -x c++-cpp-output /tmp/backprop_cuda.ii启动GDB后输入
run,崩溃后输入bt查看完整调用栈,就能知道是Pass加载时初始化出错,还是处理特定IR代码时触发的问题。排查Pass代码中的常见bug
针对自定义Pass,重点检查:- 是否存在未初始化的指针、数组越界访问等内存非法操作;
- 是否使用了LLVM 9.0.0中已废弃或变更的API(比如Pass注册方式、IR遍历接口);
- 处理CUDA相关IR时,是否错误假设了IR的结构(CUDA代码的IR包含设备端、主机端特殊节点)。
简化测试场景
用一个极简的C++测试文件(比如hello world)加载该Pass,看是否会崩溃。如果极简代码也崩溃,说明Pass本身存在基础bug;只有处理backprop_cuda.ii时崩溃,说明Pass对特定IR结构的处理逻辑有问题。
内容的提问来源于stack exchange,提问作者최윤채
相关产品推荐
相关产品推荐

