提问人:Pierwiastek 提问时间:5/24/2022 更新时间:5/24/2022 访问量:363
GCC 链接器意外地向后移动位置计数器
GCC Linker unexpectedly moves location counter backwards
问:
我正在开发新的 RTEMS BSP,并且正在修改链接器脚本
我修改了这个链接器脚本文件
.rwbarrier : ALIGN_WITH_INPUT {
. = ALIGN (bsp_section_rwbarrier_align);
} > REGION_DATA AT > REGION_DATA
.vector : ALIGN_WITH_INPUT {
bsp_section_vector_begin = .;
. = . + DEFINED (bsp_vector_table_in_start_section) ? 0 : bsp_vector_table_size;
bsp_section_vector_end = .;
} > REGION_VECTOR AT > REGION_VECTOR
假设我们需要将 .vector 部分放在某个内存区域的中间,因此我们需要将符号与 128 对齐,所以我添加了这一行:bsp_section_vector_begin
.vector : ALIGN_WITH_INPUT {
. = ALIGN(128);
bsp_section_vector_begin = .;
现在我收到这个错误:
[build] linkcmds.base:xxx cannot move location counter backwards (from 0000000060022380 to 0000000060022370)
它直接指向这条线
. = . + DEFINED (bsp_vector_table_in_start_section) ? 0 : bsp_vector_table_size;
但是当将这一行更改为:
. = . + bsp_vector_table_size;
没有错误,链接器已满足,并且系统异常正在工作。
我的问题是:这样的表达方式怎么可能:
. = . + DEFINED (bsp_vector_table_in_start_section) ? 0 : bsp_vector_table_size;
以这种方式评估它试图向后移动位置计数器?我确信是正数,我的实验证实了这一点。 也有效。这种压抑有什么问题?bsp_vector_table_size
. = . + 0
答: 暂无答案
评论