【发布时间】:2016-01-21 12:39:49
【问题描述】:
我正在用“-nostdlib”编译下面的代码。我的理解是 arm-none-eabi-gcc 不会使用“crt0.o”中的_start,但会使用用户定义的_start。为此,我希望创建一个 start.S 文件并放置 _start 符号。
但是,如果我编译下面显示的代码而没有从我这边定义 _start 符号,我不会收到任何警告。我期待“警告:找不到条目符号_start;”
问题:
1) 为什么我没有收到警告? GCC 是从哪里得到 _start 符号的?
2) 如果 gcc 从某个地方的文件中获取了 _start 符号,您能告诉我如何让 GCC 使用我的 start.S 文件中的 _start 吗?
$ cat test.c
int main()
{
volatile int i=0;
i = i+1;
return 0;
}
$ cat linker.ld
MEMORY
{
ram : ORIGIN = 0x8000, LENGTH = 20K
}
SECTIONS
{
.text : { *(.text*) } > ram
.bss : { *(.bss*) } > ram
}
$ arm-none-eabi-gcc -Wall -Werror -O2 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostdlib -T linker.ld 测试。 c -o test.o
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc(用于 ARM 嵌入式处理器的 GNU 工具)4.9.3 20150529 >(发布)[ARM/embedded-4_9-branch 修订版 224288]
【问题讨论】: