使用LLVM+SLH编译Asahi Fedora内核时遇Clang退出码139错误
解决M1 Mac Mini上Fedora Asahi内核启用SLH编译时Clang崩溃问题
问题概述
克隆适配Apple Silicon的Fedora Asahi内核仓库后,在M1 Mac Mini(AArch64架构)环境下尝试启用SLH(Speculative Load Hardening)保护编译内核,执行命令:
make LLVM=1 CFLAGS_KERNEL="-mspeculative-load-hardening -Wno-slh-asm-goto" Image
Clang前端崩溃并返回退出码139,后续编译错误定位到init/main.c的start_kernel函数。使用gcc编译,或不添加-mspeculative-load-hardening参数用LLVM编译时,均可正常完成。
环境信息
- 硬件:M1 Mac Mini(AArch64)
- 内核源码:Fedora Asahi适配内核
- 编译工具:LLVM/Clang(存在SLH编译崩溃问题)
已验证的有效操作
- 使用gcc编译内核:无异常,编译完成
- 移除
-mspeculative-load-hardening参数后用LLVM编译:无异常,编译完成
可行解决方案
1. 升级LLVM/Clang版本
退出码139对应段错误,大概率是当前Clang版本对AArch64架构的SLH优化存在未修复的bug。建议升级到LLVM 17及以上的稳定版本,新版本通常会修复架构相关的编译逻辑漏洞。
2. 调整SLH编译参数
- 尝试移除
-Wno-slh-asm-goto参数,该警告抑制选项可能与SLH的代码生成逻辑冲突; - 若Clang支持,添加
-mllvm -slh-disable-asm-goto参数,直接跳过asm-goto语句的SLH处理,避免触发崩溃逻辑。
3. 排查内核配置冲突
使用Fedora Asahi内核的默认配置进行编译测试,排除自定义配置中与SLH优化冲突的选项。如果默认配置下编译正常,再逐步添加自定义配置项,定位冲突点。
4. 提交bug报告
若上述方法均无效,说明问题可能是Clang的AArch64 SLH支持缺陷,或Fedora Asahi内核与SLH的适配问题。可向对应项目提交包含预处理文件、运行脚本的bug报告,协助开发者定位修复。
内容的提问来源于stack exchange,提问作者rcplusplus
相关产品推荐
相关产品推荐

