ARM编程工具篇——链接器脚本

来源:互联网 发布:php urlencode gbk 编辑:程序博客网 时间:2024/06/06 00:14

一、概述

每一个链接过程都由链接脚本(linker script,一般以lds作为文件的后缀名)控制。链接器脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各部分在程序地址空间内的布局。

二、脚本构成

这里写图片描述


2.1基本构成:段
一个可执行程序通常是由:代码段(text),数据段(data),bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。
代码段:存放程序中的代码。
数据段:存放全局变量。
bss段:存放未初始化的全局变量。

2.2设置起始链接地址
代码存放的位置,那这个地址有什么影响呢?(这个先保留等以后在补上)
2.3对齐设置
arm处理在访问时采用4字节对齐的方式,所以我们在存放数据的时候也应该采用4字节对齐,这样可以大大提高访问效率。
2.4使用变量
添加变量为了方便使用。
2.5设置代码段的首文件
通常一个程序有好几个代码文件组成,哪个文件应该是第一个要链接的文件呢?这时候就需要我们设置代码段的首文件啦。


下面就看一个简单的链接器脚本代码

SECTIONS{    .=0x00;    . = ALIGN(4);    .text :    {    start.o(.text)    *(.text)    }    . = ALIGN(4);    .data :    {    *(.data)    }    . = ALIGN(4);    bss_start = .;    .bss :    {    *(.bss)    }    bss_end = .;}

对上面的代码一一解释
“. = 0x00”表示设置链接起始地址,那这个地址有什么影响呢?(这个先保留等以后在补上)
“. = ALIGN(4)”表示采用4字节的对齐方式
“.text : {*(.text)}”表示将所有输入文件的.text section合并成一个.text setction。
“*”表示所有输入文件。
“.”表示当前地址。
“bss_start = .; bss_end = .;”表示把当前地址赋值给变量bss_start和bss_end,如果我们想要知道bss段的大小,我们只需用bss_end-bss_start就可以知道啦。
“start.o(.text)”表示代码段的首文件

0 1
原创粉丝点击