【问题标题】:Adding section to GNU linker script将节添加到 GNU 链接器脚本
【发布时间】:2013-10-16 03:48:03
【问题描述】:

您好,我正在尝试通过以下方式在我的链接描述文件中定义一个自定义部分:

  .version_section(__custom_data__) :
  {
        KEEP (*version_info.o (.rodata* .data* .sdata*))
  }

我正在编译一个包含结构的 C 文件,并且我希望该结构始终存储在此 version_section 中。

version_info ver_info __attribute__ ((section(".version_section"))) = {7, 10, 2013, 17, 17, "some_type", "some_sw_version", "some_version"} ;

现在,直到这个阶段一切正常。但是这样生成的部分有标志“AW”但是我需要标志是“A”。

所以我使用了一个汇编文件,该文件将这个部分定义为具有这样的“A”标志:

.section .version_section,"a", @progbits
.align 8
.globl __custom_data__
.type  __custom_data__, @function

__custom_data__:
    .word 0
    .size __custom_data__, .-__custom_data__
    .space (0x1024-0x4), 0

但我仍然看到 version_section 的默认标志,即。 AW in readelf

[11] .version_section  PROGBITS        00011088 004088 001044 00  WA  0   0  8

我在这里做错了什么?

【问题讨论】:

  • 在这种情况下,W 是否意味着“可写”?如果是这样,您可以通过在结构定义中添加 const 使其成为“A”。
  • 谢谢老兄。那行得通。您应该将此添加为答案。
  • 好的。我将其添加为答案。

标签: c linker linker-scripts


【解决方案1】:

正如我所怀疑的,“W”似乎在readelf 输出中表示可写。将const 限定符添加到ver_info 的定义中会将其移动到内存中的所需段。

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多