我在linux下,编译了一个简单的arm程序写makefile时调用连接文件led.lds,内容如下
OUTPUT_ARCH(arm)
ENTRY(mystart)
SECTIONS
{
. = 0x32000000;
.text : { *(.text) }
.data : { *(.data) }
.bss : {*(.bss) }
}
mystart是我在init.s汇编文件中定义的标号,也是程序的入口,想把程序入口设置为0x32000000,如上述文件所示
可是编译连接出来的2进制文件,经过反汇编,看到0x32000000地址处是LedMain函数,LedMain是我在main.c中编写的主函数,而init.s中的标号mystart被连接在了后面的0x32000118处.
如果我将上述lds文件修改为(去掉了OUTPUT_ARCH和ENTRY)
SECTIONS
{
. = 0x32000000;
.text : { init.o main.o }
.data : { *(.data) }
.bss : {*(.bss) }
}
连接的地址就正确了.如果将.text : { init.o main.o }改为.text : { main.o init.o}仍然有上边的问题,所以我怀疑这ENTRY命令根本没有起作用,而是根据在.text里定义目标文件的顺序来的.
所以想请教大侠这个ENTRY到底怎么起作用,如果我一文件中有多个函数或section的时候,怎么指定入口地址,万分感谢!!! |