DLD 链接命令语言
Create by zaken 2007-4-11
file:///E:/Tornado2.2/docs/diab5.0ppc/c-linkea.htm
链接命令语言的作用:
1 指定输入文件和选项
2 指定如何把输入的段区联合成输出的段区
3 指定内存如何配置并且分配输出段区到内存区间
4 为符号分配地址或者其他值
语法表示法:
以下符号是命令的一部分
{ } ( ) , ; > *
{} 包含在括号内的段 比如 Mem{ram1: org=0x0000,len=0x10000}
() 相当于函数调用 比如 ADDR(rom)
, 分隔符
; 命令结束符
> 相当于向后赋值
* 相当于地址符号
符号表示法:
符号一旦被定义,可以在任意地方使用。符号在 OBJ 文件内或者被分配命令定义。分配命
令定义的符号遵循 C 语言语法,使用 $和 .来 比如 $data 或则 .data;
一个符号或者文件名包含 $和.的,必须用双引号包括,比如 “a.o”或者 “$da.da”
表达式:
一个链接表达式可以在任意地方使用,遵循以下 C 语言格式
数字
符号
一元操作表达式
二进制操作表达式
expression ? expression : expression
( expression )
一元操作表达式可以使用以下 C 语言操作符
! ~
二进制操作表达式可以使用以下 C 语言操作符
* / % + - >> << == != <> <= => & | && ||
操作符的优先权符合 C 语言,使用括号可以改变优先权
当符号在表达式中使用时, 符号的地址被使用, 符号 ”.”表示当前位置计数 (只允许在 section
的命令中使用)
以下的假函数在在表达式中是有效的
SIZEOF(section-name) 段区的大小
注意:在段区内使用 SIZEOF 不是一种可靠的计算下一个段的起始地址的办法,因为对齐
会导致 ADDR(.text)+SIZEOF(.text) 不是下一个段的起始地址,解决的办法如下
.text(TEXT):
{ *(.text)