1 OverView

  • ld combines a number of object and archive files, relocates their data and ties up symbol references.
  • This version of ld uses the general purpose BFD libraries to operate on object files. This allows ld to read, combine, and write object files in many different formats.
  • the gnu linker is more helpful in providing diagnostic information. ld continues executing, allowing you to identify other errors.

2 Linker Command

3 Linker Scripts

3.1  Basic Linker Script Concepts

  • object file: The linker combines input files into a single output file. The output file and each input file are in a special data format known as an object file format.
  • input section : a section in an input file as an input section.
  • output section : a section in the output file is an output section.
  • contents : Most sections have an associated block of data, known as the section contents.
  • loadable : mean that the contents should be loaded into memory when the output file is run.
  • allocatable : A section with no contents may be allocatable, which means that an area in memory should be set aside, but nothing in particular should be loaded there.
  • neither loadable nor allocatable section: contains some sort of debugging information.
  • VMA: Every loadable or allocatable output section has two addresses. The first is the VMA, or virtual memory address. This is the address the section will have when the output file is run.
  • LMA: The second is the LMA, or load memory address. This is the address at which the section will be loaded.

3.2 Linker Scripts Formate

Linker scripts are text files. You write a linker script as a series of commands. Each command is either a keyword, possibly followed by arguments, or an assignment to a symbol.

3.3 Simple Linker Script Example

3.3.1 SECTIONS command

describe the memory layout of the output file. Example as below:

SECTIONS

{

. = 0x10000;

.text : { *(.text) }

. = 0x8000000;

.data : { *(.data) }

.bss : { *(.bss) }

}

  • The first line sets the value of the special symbol ‘.’, which is the location counter. If you do not specify the address of an output section in some other way, the address is set from the current value of the location counter. The location counter is then incremented by the size of the output section. At the start of the ‘SECTIONS’ command, the location counter has the value ‘0’.
  • The second line defines an output section, ‘.text’. Within the curly braces after the output section name, you list the names of the input sections which should be placed into this output section.
  • The ‘*’ is a wildcard which matches any file name. The expression ‘*(.text)’ means all ‘.text’ input sections in all input files.

3.4 Simple Linker Script Commands

3.4.1 Setting the Entry Point

The first instruction to execute in a program is called the entry point.

ENTRY(symbol)

There are several ways to set the entry point.

_ the ‘-e’ entry command-line option;

_ the ENTRY(symbol) command in a linker script;

_ the value of the symbol start, if defined;

_ the address of the first byte of the ‘.text’ section, if present;

_ The address 0.

3.4.2 Commands Dealing with Files

INCLUDE filename - Include the linker script filename at this point.

INPUT(file, file, ...) - directs the linker to include the named files in the link, as though they were named on the command line.

GROUP(file, file, ...) - like INPUT, except that the named files should all be archives, and they are searched repeatedly until no new undefined references are created.

3.4.3 Assign alias names to memory regions

REGION_ALIAS(alias, region)

The REGION_ALIAS function creates an alias name alias for the memory region region.

3.5 Assigning Values to Symbols

About Gnu Linker1的更多相关文章

  1. 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE

    C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...

  2. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  3. 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目

    在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...

  4. GNU Readline 库及编程简介

    用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...

  5. GNU Radio Radar Toolbox

    GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...

  6. gnu coreutils-8.25 for win32 static - Beta

    gnu.win32-coreutils-8.25.7z 2.7 Mb bc-1.06.tar.gz coreutils-8.25.tar.xz diffutils-3.5.tar.xz gawk-4. ...

  7. window下搭建c开发环境(GNU环境的安装)

    一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...

  8. GNU make使用变量⑤变量的引用、定义等

    在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...

  9. (转)完全用GNU/Linux工作 by 王珢

    完全用GNU/Linux工作 王珢      (看完这篇博文,非常喜欢王珢的这篇博客,也我坚定了学gnu/linux的决心,并努力去按照国外的计算机思维模式去学习编程提高自己.看完这篇文章令我热血沸腾 ...

随机推荐

  1. HttpClient 通过代理访问验证服务器

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. 2018—自学Selenium+Python 笔记(一)

    在开始学习前,先唠几句: 身为一个开发人员,为何想要转测试..很多人不解. 但我觉得这并没有什么不可,测试人员是质量的把控者: 要出一个让客户满意的产品,单纯靠开发自测,是不够的..相信其中缘由大家都 ...

  3. web3js 进行转账

    1.准备阶段 部署以太坊geth 安装nodejs npm install web3 npm install npm install ethereumjs-tx 其中, web3是1.0.0.beta ...

  4. 如何删除新添加的项目Module

    今天 new 了一个Module ,使用的是library,发现不是我想要的,于是果断删除它 但是如何删除呢,却一直找不到这个删除的delete 后来发现在这里可以删除 打开 file  -> ...

  5. ES6模板字符串之标签模板

    首先,模板字符串和标签模板是两个东西. 标签模板不是模板,而是函数调用的一种特殊形式.“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数. 但是,如果模板字符串中有变量,就不再是简单的调用了,而 ...

  6. blueprint的使用

    第一步:导入蓝图模块: from flask import Blueprint 第二步:创建蓝图对象: #Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块 ...

  7. Unity判断用户联网状态,WiFi/移动网络/无网络

    Unity判断用户联网状态 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  8. CentOS官网下载系统镜像

    https://jingyan.baidu.com/article/1876c85279cedd890a13766c.html

  9. Alisha’s Party (HDU5437)优先队列+模拟

    Alisha 举办聚会,会在一定朋友到达时打开门,并允许相应数量的朋友进入,带的礼物价值大的先进,最后一个人到达之后放外面的所有人进来.用优先队列模拟即可.需要定义朋友结构体,存储每个人的到达顺序以及 ...

  10. Ubuntu使用总结二

    Ubuntu使用 - 1.ubuntu怎么切换到root用户,切换到root账号方法 ubuntu怎么切换到root用户,我们都知道使用su root命令,去切换到root权限,此时会提示输入密码, ...