Linker (vxworks)在使用此链接器脚本生成的二进制文件中,为什么';t遇到的第一个地址起始于文本段起始地址?
我有一个在vxWorks中工作的项目,构建一个用于测试的vxsim二进制文件。链接过程分为三个阶段;makefile的相关部分大致如下所示:Linker (vxworks)在使用此链接器脚本生成的二进制文件中,为什么';t遇到的第一个地址起始于文本段起始地址?,linker,static-linking,vxworks,linker-scripts,Linker,Static Linking,Vxworks,Linker Scripts,我有一个在vxWorks中工作的项目,构建一个用于测试的vxsim二进制文件。链接过程分为三个阶段;makefile的相关部分大致如下所示: partialImage.o: ${SYSTEM_OBJS} ${OBJS} version.o ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@} # Don't ask me why they did it this way; it seems redundant to re-use # a
partialImage.o: ${SYSTEM_OBJS} ${OBJS} version.o
ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@}
# Don't ask me why they did it this way; it seems redundant to re-use
# all the other objects as well as partialImage.o, but I'm also not extremely
# versed in what's necessary for munch.tcl to do its thing.
ctdt.o: partialImage.o ${SYSTEM_OBJS} ${OBJS} version.o
${VXSIMNM} ${^} | tclsh ${path to munch.tcl} > ${@:%.o=%.c}
ccsparc ${appropriate CFLAGS go here} ${@:%.o=%.c} -o ${@}
${FINAL_IMAGE}: ${a list of dependencies here}
ldsparc -N -e _sysInit -Ttext 60010000 \
${appropriately ordered list of objects} \
-defsym _VX_DATA_ALIGN=16 \
-T link.RAM \
-o ${@}
如果需要更多信息(标志等),请告诉我。我现在不在那台电脑前,但大约一个小时后,如果到时候没有答案,我会用更多的细节更新这个问题
下面是链接器脚本的大致草图。如果您可以访问vxWorks 6.x,它只是默认的“link.RAM”脚本:
START(_sysInit)
SECTIONS {
.text {
wrs_kernel_text_start = .;
/* A few other variable declarations and inclusions from various other segments */
. = ALIGN(16);
}
. = ALIGN(16);
/* The rest of the linker script */
}
请注意,wrs\u kernel\u text\u start
出现在包含任何内容之前和任何ALIGN语句之前的文本段开头
在我完成的其他vxWorks项目中,
wrs_kernel_text_start=0x60010000
;但是,在这个特定的项目上,它的其他地址与代码> 0x6025XXX大致相同。你没看错,地址比我期望的地址高一个数量级——也就是说,它不是0x60025XXX
<代码>\u sysInit如我所料,从0x60010000
开始。我本来打算删除这个问题,但我想可能有人会从答案中得到一些价值。生成文件实际上如下所示:
outfile: ${SYSTEM_OBJS} ${OBJS} version.o link.RAM
ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@}
(...)
请注意,链接器脚本位于依赖项列表中,我将它与
${^}
一起作为输入文件之一。当我从依赖项列表中删除链接器脚本时,一切看起来都正常了。我本来打算删除这个问题,但我想可能有人会从答案中获得一些价值。生成文件实际上如下所示:
outfile: ${SYSTEM_OBJS} ${OBJS} version.o link.RAM
ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@}
(...)
请注意,链接器脚本位于依赖项列表中,我将它与${^}
一起作为输入文件之一。当我从依赖项列表中删除链接器脚本时,现在一切看起来都正常了