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

ARM64 GNU汇编如何将变量放置到自定义指定段中?

错误原因

GNU ARM64汇编器要求切换自定义段必须使用.section伪操作显式声明,你直接写.__mydebug不属于汇编器识别的合法伪操作,因此触发编译报错。

修复方案
  • 第一步:修改汇编代码中的段切换语句,将原代码中的.__mydebug替换为合法的段声明语法,可额外指定段属性适配调试数据的读写需求:
    正确语法为 .section .__mydebug, "aw",其中"aw"表示该段为可分配(Allocatable)、可写(Writable),符合调试数据段的使用场景。
  • 第二步:补全全局符号声明的缺失参数,你原代码中的.global后未指定要声明的全局符号,需改为.global myval避免后续链接阶段找不到符号。
  • 第三步:可选优化,在自定义段内添加.align 8对齐声明,和链接脚本中的ALIGN(8)规则保持一致,避免地址对齐问题。

修复后的汇编代码片段示例:

.global myval
... skip ...
mov x6, #0x70
ldr x7, =myval
str x6, [x7]
... skip ...
.section .__mydebug, "aw"
.align 8
myval: .long 0x11111111

原链接脚本的段定义逻辑无需修改,KEEP(*(.__mydebug))规则可以正确匹配汇编中声明的.__mydebug输入段,最终将段内数据链接到SDRAM对应的.sdram地址空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:54:02