linker-scripts相关内容

GCC LD NoLoad链接器段生成可加载段

我正在开发一个ARM裸机应用程序,我已经用NOLOAD标记了一些部分。根据Understanding链接器脚本未加载部分》中的解释 ,我原以为生成的ELF文件不是具有这些节的可加载段(程序头),但它确实有。 这样对吗?为什么在ELF文件中将这些节标记为可加载? 由于链接器仍将数据放在.bss中,加载器如何知道不应加载节?还是因为NOLOAD只对初始化的符号(通常放在.data中)有意义,所 ..
发布时间:2022-08-23 10:29:02 其他开发

链接器脚本 - 在内存区域的末尾放置一个节

我已经广泛搜索了如何做到这一点,但未能找到答案. 我的内存布局如下: 假地址 |部分0 |文本7 |搬迁15 |bss23 |堆 在堆栈的末尾,我放置了堆.它长大了,堆栈是我正在使用的 ARM 芯片的完整降序堆栈. 现在,我要做的是在我的 RAM 内存中放置一个单独的部分,我们称之为 .persist.我希望它位于 RAM 的最末端,并且我想将它编程到我的链接器脚本中.但是,这个 ..
发布时间:2022-01-11 15:48:00 C/C++开发

gcc/ld - 使用来自 glibc.2.6 的 __isoc99_sscanf@@GLIBC_2.7 符号创建一个新的 libc.so

我有一个应用程序,当我尝试运行它时出错: /lib/libc.so.6:未找到版本“GLIBC_2.7" 但它需要的 glibc 2.7 中唯一的符号是 __isoc99_sscanf@@GLIBC_2.7 我想用这个符号作为 __sscanf() 的别名写一个小的单一函数“库" 如何使用 gcc/ld 做到这一点? 我的变体不被接受,因为“@@"符号 int __isoc ..
发布时间:2022-01-11 15:33:12 其他开发

了解 GNU 链接描述文件的位置计数器

我正在从事一个大学项目,我正在从头开始为 Atmel SAM7S256 微控制器编写软件.这比我以前使用过的其他 MCU 更深入,因为这次需要了解链接器脚本和汇编语言. 我一直在仔细研究 SAM7S 芯片的示例项目,以便完全了解如何从头开始启动 SAM7/ARM 项目.一个值得注意的例子是 Miro Samek 的“使用 GNU 构建裸机 ARM 系统"教程 here (这个问题中的代码来自 ..
发布时间:2022-01-11 15:16:35 其他开发

正在访问“值";C 中的链接描述文件变量未定义行为?

GNU ld(链接器脚本)手册部分 3.5.5 源代码参考 提供了一些关于如何访问链接描述文件“变量"的非常重要的信息.(实际上只是整数地址)在 C 源代码中.我用了这个信息.广泛使用链接器脚本变量,我在这里写了这个答案:如何从 C 中获取 ld 链接描述文件中定义的变量的值. 但是,很容易做错并尝试访问链接描述文件变量的值(错误地)而不是其地址,因为这有点深奥.手册(上面的链接)说: ..
发布时间:2022-01-11 15:07:48 其他开发

链接描述文件中的 KEEP 是什么意思?

LD 手册没有解释什么KEEP 命令确实如此.下面是来自第三方链接器脚本的片段,其中包含 KEEP.ld中的KEEP命令有什么作用? 部分{.文本 :{.=对齐(4);_text = .;提供(stext = .);保持(*(.isr_vector))保持(*(.init))*(.text .text.*)*(.rodata .rodata.*)*(.gnu.linkonce.t.*)*(.gl ..
发布时间:2022-01-11 15:06:14 其他开发

什么时候使用 .ARM.exidx

我正在使用 mbxxx 目标开发 Contiki 2.7.在构建我的代码时,链接器抱怨 .ARM.exidx 和 .data 部分的重叠.在对链接器脚本 contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld 进行了一些修补后,我通过替换解决了这个问题: __exidx_start = .;__exidx_end = .; 与: .ARM.exidx : {__ ..
发布时间:2021-11-17 21:44:36 其他开发

了解 GNU 链接脚本的位置计数器

我正在从事一个大学项目,我正在从头开始为 Atmel SAM7S256 微控制器编写软件.这比我之前使用过的其他 MCU 更深入,因为这次需要了解链接器脚本和汇编语言. 我一直在仔细研究 SAM7S 芯片的示例项目,以便完全了解如何从头开始 SAM7/ARM 项目.一个值得注意的例子是 Miro Samek 的“使用 GNU 构建裸机 ARM 系统"教程发现 here(这个问题中的代码来自哪 ..
发布时间:2021-11-17 21:42:32 其他开发

链接到另一个启动文件

我试图通过使用LD脚本中的 STARTUP 指令将程序与我自己的启动文件链接: ...ENTRY(_start)启动(my_crt1.o)... GCC驱动程序用于链接程序(不打扰libgcc等库路径): gcc -T my_script.ld ... 不幸的是,它仅适用于为powerpc目标编译的GCC,而arm或i686目标则不行,并且仍然在collect2中包含crt0.o. ..
发布时间:2021-05-29 21:24:52 其他开发

如何将ld -Ttext选项转换为链接脚本?

我已经找到了有关创建操作系统的教程,并且正在尝试将make文件中的链接部分转换为链接脚本. 这里是教程: https://github.com/ghaiklor/ghaiklor-os-gcc 以下是制作文件: SOURCES = $(shell查找cpu驱动程序包括内核libc -name'* .c')HEADERS = $(shell查找cpu驱动程序包括内核libc -nam ..
发布时间:2021-05-29 20:04:40 其他开发

在链接描述文件中提取存档文件

我正在尝试解决以下问题: 假设我有一个库libxyz.a,创建自: /* main.c */int main(无效){诠释} 使用以下文件进行编译和存档: gcc -c main.c -o abc.o&&ar cr libxyz.a abc.o 我必须如何编写链接程序脚本才能将abc.o准确放置在预期位置? 我试图以这种方式处理它: /* script.ld */SEA ..
发布时间:2021-05-29 20:04:36 其他开发

如何使用OBJCOPY的--add-section开关?

实际上有两个问题与--add-section的使用有关.最简单的是标题.根据我的阅读,我一直无法弄清楚如何执行--add-section. 要使用add-section,我必须传递一个部分名称.如果我使用现有的节名称,程序将响应“无法添加节'.data':文件格式错误".也许我只需要传递另一个参数.如果我希望使用新的节名称,则会警告“分配的节'.blob'不在段中." 现在,除了“不在 ..
发布时间:2021-05-04 19:02:17 其他开发