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

ARM64汇编声明变量并加载地址时编译报错的问题排查

ARM64 Linux内核head.S汇编编译错误排查

操作场景

在ARM64架构Linux内核的arch/arm64/kernel/head.S汇编文件中,执行了以下操作:

  • 在__INITDATA段声明变量:
__INITDATA
mydata1 : .long 0x22222222
  • 在__INIT段(.init.text)的__primary_switch函数内,编写写入该变量的代码:
mov x27, #0x1406
adrp x25, mydata1
add x25, x25, :lo12:mydata1
str x27, [x25]
dc cvac, x25

编译错误信息

编译过程中触发如下错误:

/tmp/ccy8ayvt.s: Error: .size expression for __primary_switch does not evaluate to a constant

错误原因与解决方式

错误的核心原因是将mydata1的变量声明代码放置在了__primary_switch函数定义的内部(SYM_FUNC_END(__primary_switch)语句之前)。

__primary_switch函数的范围由SYM_FUNC_START(__primary_switch)和SYM_FUNC_END(__primary_switch)界定,这段区域属于.init.text代码段,不允许插入数据段的变量声明。只需将__INITDATA及mydata1的声明代码移到SYM_FUNC_END(__primary_switch)之后,保证数据段与代码段的划分符合汇编器规则,即可解决该编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:57:27