问题标签 [linker-scripts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1595 浏览

c - 链接描述文件,初始化 C 变量

我尝试找到答案很长时间。对不起,我真的找不到。

我使用 gcc、ld、gcc(用于汇编程序编译)。

我写了 ld 脚本:

我尝试使用汇编程序中的 LS_size:

它工作正常,但在 C 代码上我无法将值设置为变量:

如果我 extern LS_size,我得到:

如何从 ld 脚本中生成的变量中为我的常量 C 变量设置默认值?

0 投票
0 回答
2036 浏览

c - 链接描述文件未定义对 PUTS 的引用

我正在尝试学习链接器脚本这是我的文件

调用者.c

helloasm.c

链接.lds

编译.sh

当我使用

我得到输出 HELLO

但是当调用 sh 文件时出现错误 **

** 有人可以解释为什么 puts 函数是未定义的

0 投票
1 回答
575 浏览

gcc - ARM GNU GCC 链接器

这与 GNU 链接器有关。如果我有一个不是 .text 、 .data 或 .bss 的部分,我如何告诉链接器不要将该部分包含在任何这些段中。

前任:

实际上,在我的情况下,sec_var 有一些全局变量,我不希望它成为数据段的一部分,但默认情况下,链接器具有孤立部分的概念,因此它会尝试将该部分放入 .data 中。因此,最终的二进制大小增长相同。

我在 GCC 链接器中读到:

有人使用过它或有任何其他方法,因此 sec_var 没有放在 .data 部分下?

0 投票
3 回答
8929 浏览

gcc - GCC:如何告诉 GCC 将“main”函数放在 .text 部分的开头?

我刚刚开始学习一些 ARM 编程,但遇到了一个有点烦人的问题。我用来编译源代码的工具链是 Sourcery CodeBench Lite 2013.05-23(可以在这里找到:https ://sourcery.mentor.com/GNUToolchain/release2449 )

我需要告诉 GCC 或 LD 或 OBJCOPY 将“main”函数的编译字节码放在 .text 部分的开头。

有什么办法可以做到这一点?(也许通过链接器脚本?)

谢谢

0 投票
2 回答
6720 浏览

c++ - 危险的重定位错误是什么意思?

我收到一个链接错误:

危险搬迁:l32r:使用后放置文字:

我仍在尝试调试;但是,我想更好地理解这个错误。我明白什么是搬迁;但是,我不确定它有多危险,并且正在寻找一些澄清。此外,一个可能产生此类错误的小代码片段也会有所帮助。

简而言之,什么是“危险搬迁”?

0 投票
1 回答
73 浏览

c - 指定驻留在特定地址的类型

我使用 Bash 来获取 ac 程序变量的地址。如何知道地址是否与整数、浮点数或双精度变量有关?

0 投票
1 回答
231 浏览

linker-scripts - 如何从链接器命令文件中定义的符号中获取 18 位代码地址

在 Code Composer 中,您可以简单地在链接器命令文件中定义新符号:

在内存映射和部分分配之前。这是在 TI 的引导加载程序示例中完成的。

然后,您可以在 c 代码中引用地址(作为整数),如下所示

问题在于,如果您使用“小”内存模型,后一个符号(位于 0x45C00)会发出链接器警告,因为它会尝试将其转换为 16 位指针。

我尝试使用显式far指针,但代码编写器不理解关键字far. 我试图使虚拟符号成为函数指针,以欺骗编译器认为取消引用它会......指针指向代码空间,代码空间模型是“大”,而数据空间模型是“小” .

0 投票
2 回答
2215 浏览

linux - 如何使用自定义链接器脚本编译 ld?

我正在尝试构建 linux 内核 3.8 的自定义版本,我希望我的链接器表现得有点不同,所以我改变了它的 ldscripts。具体来说,我配置 binutils -> make -> change ldscripts -> make install。但是,当我尝试使用链接器编译 libc 时,我看到的唯一内容是:

ETC

问题是我已经更改了我的 ldscripts 并在每个脚本的开头添加了一个标签以识别它们,但我的编译器似乎并不关心。但是,我的系统中没有任何其他精灵脚本,因此搜索错误库路径的选项实际上不是一个选项。

我在这里缺少什么吗?

请注意,我正在为 sparc 进行交叉编译

0 投票
1 回答
358 浏览

linker - 链接描述文件混淆 - 为什么需要多个标签?

您好,我有一个 GNU 链接器的“链接器脚本” ld,我有两个与之相关的问题:

Q1:为什么我们要为同一个地址定义多个标签,比如__exidx_start和?__gnu_textstart后者是使用定义的PROVIDE

Q2:最后链接器脚本计算图像大小如下:

如果我们这样计算,我们会得到相同的结果:

0 投票
2 回答
4201 浏览

linker - 链接器脚本:调试策略?

在编写内核时,我正在尝试调试我遇到的链接器问题。

问题是我有一个SCAN_CODE_MAPPING无法使用的变量——它似乎是空的或什么的。我可以通过更改链接程序的方式来解决此问题,但我不知道为什么。

当我使用 来查看生成的二进制文件objdump时,变量的数据肯定在那里,所以只是对它的引用有问题。

这是链接器脚本和两个文件之间不同的符号表部分的要点。

让我感到困惑的是,两个符号表都具有相同的符号,它们的长度都相同,而且它们似乎包含正确的数据。我能看到的唯一区别是它们的顺序不同。

到目前为止我已经尝试过

  • 检查SCAN_CODE_MAPPING内存位置以确保它具有我期望的数据并且没有被归零
  • 检查所有符号是否相同
  • 检查所有符号内容的长度是否相同
  • 查看.data.rel.ro.local以确保它具有数据的地址

一个可能的线索是这个警告:

warning: uninitialized space declared in non-BSS section `.text': zeroing

我在损坏的情况下和正确的情况下都得到了。

接下来我应该尝试什么?