gpt4 book ai didi

gcc - 创建 aarch64 裸机程序时如何防止 "main.o:(.eh_frame+0x1c): relocation truncated to fit: R_AARCH64_PREL32 against ` .text'"?

转载 作者:行者123 更新时间:2023-12-04 15:32:58 26 4
gpt4 key购买 nike

在尝试创建裸机可执行文件时,我遇到了这个错误:

main.o:(.eh_frame+0x1c): relocation truncated to fit: R_AARCH64_PREL32 against `.text'
collect2: error: ld returned 1 exit status

然后我设法创建了一个最小的复制示例:

主.c

void _start(void) {}

notmain.S

.skip 32

链接.ld

ENTRY(_start)
SECTIONS
{
.text : {
*/bootloader.o(.text)
*(.text)
*(.rodata)
*(.data)
*(COMMON)
}
.bss : { *(.bss) }
heap_low = .;
. = . + 0x1000000;
heap_top = .;
. = . + 0x1000000;
stack_top = .;
}

编译命令:

aarch64-linux-gnu-gcc \
-save-temps \
-T link.ld \
-Wall \
-Werror \
-Wextra \
-Wl,--section-start=.text=0x80000000 \
-Xassembler -march=all \
-fno-pie \
-ggdb3 \
-no-pie \
-nostartfiles \
-nostdlib \
-static \
-o 'main.out' \
-pedantic \
notmain.S \
'main.c'

其中 aarch64-linux-gnu-gcc 是 Ubuntu 19.10 的 gcc-9-aarch64-linux-gnu 包中的 GCC 9.2.1 版。

我后来也在 Ubuntu 18.04 GCC 7.5.0 上试过,它在那里工作,所以了解两者之间发生了什么变化会很好。

.skip 16 有效,但 .skip 32 无效。

我知道对裸机的东西使用非裸机交叉编译器并不理想,但是任何人都可以指出是否有一些命令行选项或代码修改我可以使链接工作?

如果使用该工具链无法做到这一点,有人可以解释为什么吗?哪个 GCC 构建配置选项特别使这成为不可能?

我实际上有一个 aarch64 crosstool-NG 工具链位于 described here 附近它适用于那个,所以它实际上可能是工具链的问题。

我知道 R_AARCH64_PREL32 记录在:https://static.docs.arm.com/ihi0044/g/aaelf32.pdf我对搬迁有一个大致的了解:What does this GCC error "... relocation truncated to fit..." mean?但这比我现在想深入研究的要多一些。

此外,如果我将入口点移动到更现实的设置中的装配:

notmain.S

.global _start
_start:
bl entry

主.c

void entry(void) {}

问题没有发生。

最佳答案

作为一种允许它在我不完全了解情况的情况下进行编译的解决方法,您可以添加:

-fno-unwind-tables -fno-asynchronous-unwind-tables

它删除了失败重定位来自的 .eh_frame 帧:Why GCC compiled C program needs .eh_frame section?

然后我注意到二进制文件不起作用,因为 _start 有 C 函数序言并首先接触堆栈,我找不到一个令人惊叹的解决方案:Creating a C function without compiler generated prologue/epilogue & RET instruction? (-O3?:-)我们需要发明一个-fno-stack 选项。

关于gcc - 创建 aarch64 裸机程序时如何防止 "main.o:(.eh_frame+0x1c): relocation truncated to fit: R_AARCH64_PREL32 against ` .text'"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60817268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com