weicz 发表于 2011-3-25 16:05:35

请教一个关于arm-linux-ld连接器用entry指定程序入口的问题

我在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的时候,怎么指定入口地址,万分感谢!!!

飞凌-alexlee 发表于 2011-3-25 17:07:43

AREA Start,CODE,READONLY ; 声明代码段Start
ENTRY    ; 标识程序入口
页: [1]
查看完整版本: 请教一个关于arm-linux-ld连接器用entry指定程序入口的问题