GNU链接器(LD):REGION_ALIAS函数(为存储区域取别名)用法及实例解析
0 参考资料
GNU-LD-v2.30-中文手册.pdf
GNU linker.pdf
1 前言
一个完整的编译工具链应该包含以下4个部分:
(1)编译器
(2)汇编器
(3)链接器
(4)lib库
在GNU工具链中,对应的是:
(1)编译器:GCC(GNU Compiler Collection,GNU编译器套件)
(2)汇编器:GAS(GNU Assembler,GNU汇编器)
(3)链接器:LD(GNU Linker,GNU链接器)
(4)lib库:glibc(GNU C Library,GNU C 库)
本文介绍GNU链接器(LD)链接器脚本中REGION_ALIAS函数(为存储区域取别名)用法及实例解析。
2 GNU链接器(LD):REGION_ALIAS函数(为存储区域取别名)用法及实例解析
2.1 REGION_ALIAS函数用法
我们可以为使用MEMORY命令创建的存储区域添加一个别名,且每个别名对应一个存储区域。语法如下:
REGION_ALIAS(alias, region)
说明:
alias:别名
region:存储区域名称
2.2 REGION_ALIAS函数实例解析
REGION_ALIAS("RAM", SYSRAM_BASE);
为SYSRAM_BASE存储区域取别名为RAM。后续使用该存储区域可直接使用别名替代存储区域名称,如下:
.ARM.extab :{. = ALIGN(4);*(.ARM.extab* .gnu.linkonce.armextab.*). = ALIGN(4);} >RAM
使用别名还可让存储区域的分配看起来更加清晰,如下是一个实例,将.text段、.data段、.bss段放在了同一个存储区域,但看起来结构更加清晰:
MEMORY
{RAM : ORIGIN = 0, LENGTH = 4M
}
REGION_ALIAS("REGION_TEXT", RAM);
REGION_ALIAS("REGION_RODATA", RAM);
REGION_ALIAS("REGION_DATA", RAM);
REGION_ALIAS("REGION_BSS", RAM);