在 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 这样的名称也是很常见的。