这个选项使得包含有RO 输出段的加载域和运行域是位置无关的。如果该选 项没有使用,则相应的域被标记为绝对的。通常每一个只读属性的输入段必须是 只读位置无关的。如果使用了这个选项,armlink 将会进行以下操作: 检查各段之间的重定址是否有效; 确保任何由armlink 自身生成的代码是只读位置无关的。 这里希望读者注意的是,ARM 工具直到armlink 完成了对输入段的处理后, 才能够决定最终的生成映像是否为只读位置无关的。这就意味着 ,即使为编译 器和汇编器指定了ROPI 选项,armlink 也可能会产生ROPI 错误信息。 -rw-base address 这个选项设置包含RW(Read/Write 属性)输出段的域的运行时地址,该地址 必须是字对齐的。 如果这个选项和-split 选项一起使用,将设置包含RW 输出段的域的加载和运行 时地址都设置在address 处。 -rwpi 这个选项使得包含有RW 和ZI(Zero Initialization,初始化为0)属性的输出段 的加载和运行时域为位置无关的。如果该选项没有使用,相应域标记为绝对的。 这个选项要求-rw-base 选项后有值,如果-rw-base 没有指定的话,默认其值为0, 即相当于-rw-base 0。通常每一个可写的输入段必须是可读/ 可写的位置无关的。 如果使用了该选项,armlink 会进行以下的操作: 检查可读/可写属性的运行域的输入段是否设置了位置无关属性; 检查在各段之间的重定址是否有效; 生成基于静态寄存器sb 的条目,这些在RO 和RW 域被拷贝和初始化的时 候会用到。 编译器并不会强制可写的数据一定要为位置无关的,这就是说,即使在为编 译器和汇编器指定了RWPI 选项,armlink 也可能生成数据不是RWPI 的信息。 -split 这个选项将包含RO 和RW 属性的输出段的加载域,分割成2 个加载域。一 个是包含RO 输出段的加载域,默认的加载地址为0x8000,但是可以用-ro-base 选项设置其他的地址值,另一个加载域包含RO 属性的输出段,由-rw-base 选项 指定加载地址,如果没有使用-rw-base 选项的话,默认使用的是-rw-base 0。 -scatter file 这个选项使用在file 中包含的分组和定位信息来创建映像内存映射。 注意, 如果使用了该选项的话, 必须要重新实现堆栈初始化函数 __user_initial_stackheap()。 -debug 这个选项使输出文件包含调试信息,调试信息包括,调试输入段,符号和字 符串表。这是默认的选项。 -nodebug 这个选项使得在输出文件中不包含调试信息。生成的映像文件短小,但是不 能进行源码级的调试。armlink 对在输入的目标文件和库函数中发现的任何调试 输入段都不予处理,当加载映像文件到调试器中的时候,也不包含符号和字符串 信息表。这个选项仅仅是对装载到调试器的映像文件的大小有影响,但是对要下 载到目标板上的二进制代码的大小没有任何影响。 如果用armlink 进行部分链接生成目标文件而不是映像文件,则虽然在生成 的目标文件中不含有调试输入段,但是会包含符号和字符串信息表。 这里特别请读者注意的是: 如果要在链接完成后使用fromELF 工具的话,不可使用-nodebug 选项,这是 因为如果生成的映像文件中不包含调试信息的话,则有下面的影响: fromELF 不能将映像文件转换成其他格式的文件; fromELF 不能生成有意义的反汇编列表。 -remove (RO/RW/ZI/DBG) 使用这个选项会将在输入段未使用的段从映像文件中删除。如果输入段中含 有映像文件入口点或者该输入段被一个使用的段所引用,则这样的输入段会当作 已使用的段。 在使用这个选项时候要注意,不要删除异常处理函数。使用-keep 选项来标识异 常处理函数,或用ENTRY 伪指令标明是入口点。 为了更精确的控制删除未使用的段,可以使用段属性限制符。可以使用以下 的段属性限制符: RO 删除所有未使用的RO 属性的段; RW 删除所有未使用的RW 属性的段; ZI 删除所有未使用的ZI 属性的段; DBG 删除所有未使用的DEBUG 属性的段。 这些限制符出现的顺序是任意的,但是它们必须要有”( )”括住,多个限制符 之间要用符号”/”进行间隔。ADS 软件中默认选项是-remove (RO/RW/ZI/DBG)。 如果没有指定段属性限制符,则所有未使用的段都会被删除。因为-remove 就等价于-remove(RO/RW/ZI/DBG)选项。 -noremove 这个选项保留映像文件中所有未被使用的段。 -entry location 这个选项指定映像文件中唯一的初始化入口点。一个映像文件可以包含多个 入口点,使用这个命令定义的初始化入口点是存放在可执行文件的头部,以供加 载程序加载时使用。当一个映像文件被装载时,ARM 调试器使用这个入口点地 址来初始化PC 指针。初始化入口点必须满足下面的条件: 映像文件的入口点必须位于运行域内; 运行域必须是非覆盖的,并且必须是固定域(就是说,加载域和运行域的地 址相同)。
|