You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TI ARM Clang链接器自定义段分配顺序不符预期的问题排查与解决请求

TI ARM Clang链接器自定义段分配顺序不符预期的问题排查与解决请求

问题背景

我在使用TI ARM Clang链接器配置自定义内存段时,遇到了段分配顺序完全不符合预期的问题。我原本期望.MY_SECTION_1能从0x41C00000地址开始分配,紧接着再分配.MY_SECTION_2,但实际生成的map文件显示两者的分配顺序完全相反。

我的链接器初始配置

我最初编写的链接脚本片段如下:

MEMORY {
    TEST_SECTION ( RWIX ) : ORIGIN = 0x41C00000 , LENGTH = 0x00007800
}

--retain="*(.MY_SECTION_1)"
--retain="*(.MY_SECTION_2)"

.MY_SECTION_1 : {} palign(16) > TEST_SECTION
.MY_SECTION_2 : {} palign(16) > TEST_SECTION

实际生成的Map文件关键内容

从map文件的段分配映射可以明确看到,.MY_SECTION_2被优先分配到了起始地址,之后才是.MY_SECTION_1:

SEGMENT ALLOCATION MAP

run origin  load origin  length    init length attrs members
----------  -----------  --------  ----------- ----- -------
41c00000    41c00000     000006b0  00000000    rw-
  41c00000  41c00000     00000380  00000000    rw- .MY_SECTION_2
  41c00380  41c00380     00000330  00000000    rw- .MY_SECTION_1

.MY_SECTION_2
*          0 41c00000     00000380  UNINITIALIZED
  41c00000  0000037e     host.lib : testfile_Cfg.obj (.MY_SECTION_2)
  41c0037e  00000002     --HOLE--

.MY_SECTION_1
*          0 41c00380     00000330  UNINITIALIZED
  41c00380  00000328     host.lib : test1.obj (.MY_SECTION_1)
  41c006a8  00000008     --HOLE--

...

LINKER GENERATED COPY TABLES
__TI_cinit_table @ a513d14c records: 4, size/record: 8, table size: 32
  .data: load addr=a513d110, load size=00000015 bytes, run addr=a513d180, run size=00001080 bytes, compression=lzss
  .MY_SECTION_1: load addr=a513d134, load size=00000008 bytes, run addr=41c00380, run size=00000330 bytes, compression=zero_init
  .bss: load addr=a513d13c, load size=00000008 bytes, run addr=a513e200, run size=00000392 bytes, compression=zero_init
  .MY_SECTION_2: load addr=a513d144, load size=00000008 bytes, run addr=41c00000, run size=00000380 bytes, compression=zero_init

我尝试过的解决方法及遇到的错误

为了强制指定.MY_SECTION_1的起始地址,我修改了链接脚本,尝试使用load命令固定地址:

.MY_SECTION_1 : {} palign(16) load = 0x41c00000 > TEST_SECTION
.MY_SECTION_2 : {} palign(16) > TEST_SECTION

但这样操作后,链接器直接抛出了警告和错误:

warning: specific address 0x1 overrides alignment of 16 for ".MY_SECTION_1"
error: errors encountered during linking;

我的疑问

  • 为什么默认情况下,段的分配顺序和我在链接脚本中定义的顺序完全相反?
  • 我尝试的load命令用法哪里出现了错误?
  • 正确的配置方法应该是什么,能让.MY_SECTION_1从0x41C00000开始分配,后续紧接着分配.MY_SECTION_2?

麻烦各位帮忙分析问题原因,提供可行的解决办法,非常感谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:53:06