【问题标题】:What is the use of defining symbols in linker script?在链接描述文件中定义符号有什么用?
【发布时间】:2012-04-06 18:38:44
【问题描述】:

我想知道在链接描述文件中定义符号有什么用。使用链接描述文件来安排不同的部分是可以理解的,但在脚本中定义新符号对我来说并不清楚。我正在阅读一篇文章,该文章使用定义两个新符号的链接器脚本,但在链接器脚本或文章中的其他任何地方都没有引用这些符号。一个例子是在 bss 部分中使用 sbss 和 ebss 符号,如下所示:

ENTRY (loader)
SECTIONS
{    . = 0x00100000;
    .text ALIGN (0x1000) :
    {
        *(.text)
    }
    .rodata ALIGN (0x1000) :
    {
        *(.rodata*)
    }
    .data ALIGN (0x1000) :
    {
        *(.data)
    }

    .bss :
    {
        sbss = .;
        *(COMMON)
        *(.bss)
        ebss = .;
    }
}

还有其他经常使用的符号,例如 etext , dataEnd 等。请说明在脚本中没有引用它们时定义这些符号的用途。

【问题讨论】:

    标签: linker linker-scripts


    【解决方案1】:

    在编写 x86 引导加载程序时,我希望图像是 512 字节的倍数,方法是:

    。 =对齐(512);

    在链接描述文件中。

    但是我需要一些方法来知道确切的大小,并将其传递给我的引导代码的al,该代码将传递给将数据从硬盘加载到内存的 int 13h BIOS 调用。所以我写了类似的东西:

    __stage2_size = .;
    BYTE((ALIGN(.) / 512) - 1);
    . = ALIGN(512);
    

    并在启动脚本中使用了__stage2_size

    【讨论】:

      【解决方案2】:

      vjain27,

      我不知道为什么要像您的示例链接描述文件定义的那样定义符号。这主要是为了让可执行文件知道一个部分的开始和结束。如果需要复制数据或在内存中进行其他操作,这将非常有用。

      【讨论】:

        猜你喜欢
        • 2022-06-25
        • 2012-01-13
        • 2015-12-23
        • 2012-02-28
        • 2017-06-15
        • 1970-01-01
        • 2013-06-03
        • 2016-09-29
        • 2015-05-05
        相关资源
        最近更新 更多