在 gnu 汇编语言(对于 arm64)中,如何指定要放置在特定部分的变量?
In gnu assembly langage (for arm64), how can I specify a variable to be placed in a specific section?
在汇编代码中,这段代码
.data
myval : .long 0x11111111
将变量 myval
放在 .data
部分。所以我想在SDRAM中的特定地址定义自己的段,并在汇编代码中使用它来写入一些数据以进行调试。我像这样在链接描述文件中添加了我的部分(这是输出到 .sdram 的第一部分,所以我知道起始地址)。
.mydebug : {
. = ALIGN(8);
KEEP(*(.__mydebug));
} >.sdram
并像这样在汇编代码中使用它。
.global
... skip ...
mov x6, #0x70
ldr x7, =myval
str x6, [x7]
... skip ...
.__mydebug
myval: .long 0x11111111
但是编译报错
Error: unknown pseudo-op: `.__mydebug'
我该怎么做?
使用 .section
指令。
.section .__mydebug
myval: .long 0x11111111
需要知道的一件事:自定义部分的名称不应以句点开头。这些名称是为 ABI 定义的部分保留的。因此,也许将该部分称为 mydebug
。虽然违反了 ELF 规范,但对于类似于 .data
但需要与正常数据隔离的部分,使用 .data.mydebug
这样的名称也是很常见的。
在汇编代码中,这段代码
.data
myval : .long 0x11111111
将变量 myval
放在 .data
部分。所以我想在SDRAM中的特定地址定义自己的段,并在汇编代码中使用它来写入一些数据以进行调试。我像这样在链接描述文件中添加了我的部分(这是输出到 .sdram 的第一部分,所以我知道起始地址)。
.mydebug : {
. = ALIGN(8);
KEEP(*(.__mydebug));
} >.sdram
并像这样在汇编代码中使用它。
.global
... skip ...
mov x6, #0x70
ldr x7, =myval
str x6, [x7]
... skip ...
.__mydebug
myval: .long 0x11111111
但是编译报错
Error: unknown pseudo-op: `.__mydebug'
我该怎么做?
使用 .section
指令。
.section .__mydebug
myval: .long 0x11111111
需要知道的一件事:自定义部分的名称不应以句点开头。这些名称是为 ABI 定义的部分保留的。因此,也许将该部分称为 mydebug
。虽然违反了 ELF 规范,但对于类似于 .data
但需要与正常数据隔离的部分,使用 .data.mydebug
这样的名称也是很常见的。