linker-scripts相关内容
我正在开发一个ARM裸机应用程序,我已经用NOLOAD标记了一些部分。根据Understanding链接器脚本未加载部分》中的解释 ,我原以为生成的ELF文件不是具有这些节的可加载段(程序头),但它确实有。 这样对吗?为什么在ELF文件中将这些节标记为可加载? 由于链接器仍将数据放在.bss中,加载器如何知道不应加载节?还是因为NOLOAD只对初始化的符号(通常放在.data中)有意义,所
..
..
我已经广泛搜索了如何做到这一点,但未能找到答案. 我的内存布局如下: 假地址 |部分0 |文本7 |搬迁15 |bss23 |堆 在堆栈的末尾,我放置了堆.它长大了,堆栈是我正在使用的 ARM 芯片的完整降序堆栈. 现在,我要做的是在我的 RAM 内存中放置一个单独的部分,我们称之为 .persist.我希望它位于 RAM 的最末端,并且我想将它编程到我的链接器脚本中.但是,这个
..
我正在尝试更深入地了解链接过程和链接器脚本...查看 binutils 文档,我发现了一个简单的链接器脚本实现,我通过添加一些命令对其进行了改进: OUTPUT_FORMAT("elf32-i386", "elf32-i386",“elf32-i386")OUTPUT_ARCH(i386)条目(我的主)部分{.= 0x10000;.text : { *(.text) }.= 0x8000000;
..
我有一个应用程序,当我尝试运行它时出错: /lib/libc.so.6:未找到版本“GLIBC_2.7" 但它需要的 glibc 2.7 中唯一的符号是 __isoc99_sscanf@@GLIBC_2.7 我想用这个符号作为 __sscanf() 的别名写一个小的单一函数“库" 如何使用 gcc/ld 做到这一点? 我的变体不被接受,因为“@@"符号 int __isoc
..
我正在从事一个大学项目,我正在从头开始为 Atmel SAM7S256 微控制器编写软件.这比我以前使用过的其他 MCU 更深入,因为这次需要了解链接器脚本和汇编语言. 我一直在仔细研究 SAM7S 芯片的示例项目,以便完全了解如何从头开始启动 SAM7/ARM 项目.一个值得注意的例子是 Miro Samek 的“使用 GNU 构建裸机 ARM 系统"教程 here (这个问题中的代码来自
..
GNU ld(链接器脚本)手册部分 3.5.5 源代码参考 提供了一些关于如何访问链接描述文件“变量"的非常重要的信息.(实际上只是整数地址)在 C 源代码中.我用了这个信息.广泛使用链接器脚本变量,我在这里写了这个答案:如何从 C 中获取 ld 链接描述文件中定义的变量的值. 但是,很容易做错并尝试访问链接描述文件变量的值(错误地)而不是其地址,因为这有点深奥.手册(上面的链接)说:
..
LD 手册没有解释什么KEEP 命令确实如此.下面是来自第三方链接器脚本的片段,其中包含 KEEP.ld中的KEEP命令有什么作用? 部分{.文本 :{.=对齐(4);_text = .;提供(stext = .);保持(*(.isr_vector))保持(*(.init))*(.text .text.*)*(.rodata .rodata.*)*(.gnu.linkonce.t.*)*(.gl
..
我在 锆石内核启动.S str x0, [tmp, #:lo12:zbi_paddr] 用于 ARM64.我还发现 zbi_paddr 是在 C++ 中定义的: extern paddr_t zbi_paddr; 所以我开始研究 #:lo12: 是什么意思. 我发现 https://stackoverflow.com/a/38608738/6655884 看起来不错,但是它没有解释最
..
我在 锆石内核启动.S str x0, [tmp, #:lo12:zbi_paddr] 用于 ARM64.我还发现 zbi_paddr 是在 C++ 中定义的: extern paddr_t zbi_paddr; 所以我开始研究 #:lo12: 是什么意思. 我发现 https://stackoverflow.com/a/38608738/6655884 看起来不错,但是它没有解释最
..
这是我的问题.我有一个链接标准 arm7nommu-uClinux 内核的链接器脚本: OUTPUT_ARCH(arm)条目(文本)部分{.= 0x0;.vectors:{*(.resetvector)}.= 0x8000;.init : {/* 初始化代码和数据 */_stext = .;__init_begin = .;*(.text.init)__proc_info_begin = .;*
..
我正在使用 mbxxx 目标开发 Contiki 2.7.在构建我的代码时,链接器抱怨 .ARM.exidx 和 .data 部分的重叠.在对链接器脚本 contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld 进行了一些修补后,我通过替换解决了这个问题: __exidx_start = .;__exidx_end = .; 与: .ARM.exidx : {__
..
我正在从事一个大学项目,我正在从头开始为 Atmel SAM7S256 微控制器编写软件.这比我之前使用过的其他 MCU 更深入,因为这次需要了解链接器脚本和汇编语言. 我一直在仔细研究 SAM7S 芯片的示例项目,以便完全了解如何从头开始 SAM7/ARM 项目.一个值得注意的例子是 Miro Samek 的“使用 GNU 构建裸机 ARM 系统"教程发现 here(这个问题中的代码来自哪
..
我试图通过使用LD脚本中的 STARTUP 指令将程序与我自己的启动文件链接: ...ENTRY(_start)启动(my_crt1.o)... GCC驱动程序用于链接程序(不打扰libgcc等库路径): gcc -T my_script.ld ... 不幸的是,它仅适用于为powerpc目标编译的GCC,而arm或i686目标则不行,并且仍然在collect2中包含crt0.o.
..
x86_64 Linux上多次见过的基本Hello World: 全局my_start_symbol.text部分my_start_symbol:mov rax,1mov rdi, 1mov rsi,味精mov rdx,msg_len系统调用mov rax,60岁Xor RDI,RDI系统调用.rodata部分:讯息:db"Hello,world!",第10页msg_len:equ $-msg
..
我已经找到了有关创建操作系统的教程,并且正在尝试将make文件中的链接部分转换为链接脚本. 这里是教程: https://github.com/ghaiklor/ghaiklor-os-gcc 以下是制作文件: SOURCES = $(shell查找cpu驱动程序包括内核libc -name'* .c')HEADERS = $(shell查找cpu驱动程序包括内核libc -nam
..
我正在尝试解决以下问题: 假设我有一个库libxyz.a,创建自: /* main.c */int main(无效){诠释} 使用以下文件进行编译和存档: gcc -c main.c -o abc.o&&ar cr libxyz.a abc.o 我必须如何编写链接程序脚本才能将abc.o准确放置在预期位置? 我试图以这种方式处理它: /* script.ld */SEA
..
实际上有两个问题与--add-section的使用有关.最简单的是标题.根据我的阅读,我一直无法弄清楚如何执行--add-section. 要使用add-section,我必须传递一个部分名称.如果我使用现有的节名称,程序将响应“无法添加节'.data':文件格式错误".也许我只需要传递另一个参数.如果我希望使用新的节名称,则会警告“分配的节'.blob'不在段中." 现在,除了“不在
..
我在锆石内核启动.S str x0,[tmp,#:lo12:zbi_paddr] 对于ARM64.我还发现 zbi_paddr 是用C ++定义的: extern paddr_t zbi_paddr; 所以我开始研究#:lo12:的含义. 我发现 https://stackoverflow.com/a/38608738/6655884 看起来很不错,但它没有解释最基本的内容:
..
我在哪里可以找到gcc使用的实际链接描述文件和设置? 我尝试过的事情: 为具体起见,让我们考虑一个小程序: empty.c int main(void) { return 0; } 以静态方式构建它,然后查看结果: $ gcc -static -o empty empty.c $ readelf -W -l empty Elf file type is
..