【问题标题】:How can I make an empty section with GNU ld?如何使用 GNU ld 创建一个空白部分?
【发布时间】:2012-02-10 20:03:23
【问题描述】:

我正在开发一个 cortex-m3 芯片。堆栈空间在源代码中保留,在 bss 部分有一个未初始化的数组。我使用的链接器脚本如下:

MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256k
    SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64k
}

SECTIONS {
    .text : {
        KEEP(*(.isr_vector))
        *(.text*)
        *(.rodata*)
        __text_end = .;
    } >FLASH

    .data : {
        __data_start = .;
        *(.data*)
        __data_end = .;
    } >SRAM AT>FLASH

    .bss : {
        __bss_start = .;
        *(.bss*)
        __bss_end = .;
    } >SRAM
}

我正在尝试在 SRAM 区域的开头为堆栈分配一个部分,以便我可以检测到堆栈溢出和使用错误。

我添加了一个名为 .stack 的部分:

SECTIONS {
    .text : {
        :
    } >FLASH

    .stack : {
        __stack_size = 4k;
        __stack_start = .;
        . = . + __stack_size;
        . = ALIGN(8);         /* cortex-m3 uses full-descending stack aligned with 8 bytes */
        __stack_end = .;
    } >SRAM

    .data : {
        :
    } >SRAM AT>FLASH

    .bss : {
        :
    } >SRAM
}

链接完成没有任何错误或警告,但问题是 __stack_end 不在 SRAM 区域,而是在 FLASH 区域。

我知道我可以使用 __attribute__((section("name"))) 给出的单独部分,但我认为如果我可以在链接器脚本中处理它会更好。

如何在 SRAM 区域上创建一个空白部分?

【问题讨论】:

    标签: ld cortex-m3 linker-scripts


    【解决方案1】:

    只需将 RAM 区域一分为二:

    MEMORY
    {
        FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256k
        SRAM_STACK (rwx) : ORIGIN = 0x20000000, LENGTH = 4k
        SRAM (rwx) : ORIGIN = 0x20001000, LENGTH = 60k
    }
    SECTIONS {
    .text : {
        KEEP(*(.isr_vector))
        *(.text*)
        *(.rodata*)
        __text_end = .;
    } >FLASH
    
    .data : {
         __data_start = .;
        *(.data*)
        __data_end = .;
    } >SRAM AT>FLASH
    
    .bss : {
        __bss_start = .;
        *(.bss*)
        __bss_end = .;
    } >SRAM
    
    .stack : {
        __stack_size = 4k;
        __stack_start = .;
        . = . + __stack_size;
        . = ALIGN(8);         /* cortex-m3 uses full-descending stack aligned with 8 bytes */
        __stack_end = .;
    } >SRAM_STACK
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多