我正在尝试在链接时加载符号文件。我提供symbol.txt文件以及我链接的其他库。这是我尝试的两件事。
第一,我提供的符号文件与arm-none-eabi-nm的输出完全相同,但是在第1行本身返回时出现语法错误。
第二,我改变了格式。我在文件的开头添加了#< SYMDEFS >#
,并进行了更改以遵循ARM的symdef文件格式。这给了我错误
文件无法识别:无法识别文件格式 collect2.exe:错误:ld返回1退出状态
有没有人有任何将符号文件加载到链接器的经验(arm-none-eabi-ld)?如果是的话,请帮我弄清楚我上面缺少的东西。
我的符号文件的前几行如下:
&#34;#&LT; SYMDEFS&gt;#&#34; ;没有&#34;在这里,我用它来删除标记
0x00000000 A __ap_size
0x00000000 R __vect_table
0x00000000 R __vector_table
0x00000074 A ___data_size
我知道这种格式适用于armlink。
答案 0 :(得分:0)
如果您正在使用GNU链接器,只需创建一个类似于此的文件并将其包含在链接器命令行中:
__intstk_top__ = __syspage_base__ + 0x2000;
__abortstk_top__ = __syspage_base__ + 0x3000;
__undefinedstk_top__ = __syspage_base__ + 0x4000;
__svcstk_top__ = __syspage_base__ + 0x6000;
__sysstk_top__ = __syspage_base__ + 0x8000;
__boot_pgd__ = __syspage_base__ + 0x8000;
__boot_pgd_physical__ = __syspage_physical_base__ + 0x8000;
__boot_pte0__ = __syspage_base__ + 0xC000;
__boot_pte0_physical__ = __syspage_physical_base__ + 0xC000;
__boot_pte1__ = __syspage_base__ + 0xD000;
__boot_pte1_physical__ = __syspage_physical_base__ + 0xD000;
__syspage_physical_base__ = 0x48000000;
__syspage_base__ = 0x80000000;
__syspage_size__ = 0xE000;
__device_base__ = 0xC0000000;
__user_limit__ = 0x7FFFFFFF;
__virtual_offset__ = 0x80000000 - __syspage_physical_base__;
__dev_offset__ = 0xC0000000;
__mmu_enabled__ = 1;
__kernel_base__ = __syspage_base__;
如您所见,符号可以定义为常量,也可以使用可以在链接时解析的简单表达式。