我正在链接用于 MPC5554 的 FreeScale Code Warrior 5.9,它是具有 e500mc 内核的 PPC 芯片。我正在使用为 powerpc-none-eabi 编译的 GCC 4.6.4 进行编译。
我正在main
使用 GCC 交叉编译器为我的项目编译一些 C 代码,包括带有 的文件。不过,我需要使用 Code Warrior 进行链接。__eabi
GCC在 main 的开头添加了一个对函数的调用,该函数应该初始化几个寄存器。它不能被删除,并且对于我正在做的事情是不必要的。GCC 期望它由 crt 提供。
这些是我的 GCC 编译标志:
-O2 -std=c99 -w -mno-eabi -mregnames -mcpu=e500mc -misel=yes -mfloat-gprs=single -mno-string -msdata=none
GCC PowerPC 的文档说有一个-no-eabi
参数,应该删除它,但是如果你深入研究它,就会有许多错误报告指出文档是错误的,并且标志实际上并没有删除对__eabi
.
我尝试简单地__eabi
从 CodeWarrior 向 crt 添加一个函数。在 __ppc_eabi_init.c 我添加了函数:
asm extern void __eabi(void)
{
addis r13,r0,_SDA_BASE_@h
ori r13,r13,_SDA_BASE_@l
addis r2,r0,_SDA2_BASE_@h
ori r2,r2,_SDA2_BASE_@l
blr
}
但是,当我尝试链接时,我仍然收到__eabi
main.o 中的 main 未定义的错误。Code Warrior 链接器似乎找不到我的函数。我验证了 __ppc_eabi_init.c 在链接顺序中排在第一位。
我怎样才能得到这个链接?有没有办法删除对 的调用__eabi
?为什么Code Warrior在我提供的时候找不到这个功能?