在 2012年12月17日下午6:18,Guan Xuetao <gxt@xxxxxxxxxxxxxxx>写道: > > > > > -----邮件原件----- > > 发件人: llvm-uc-bounce@xxxxxxxxxxxxx [mailto:llvm-uc-bounce@xxxxxxxxxxxxx] > > 代表 刘智猷 > > 发送时间: Sunday, December 16, 2012 11:34 > > 收件人: llvm-uc@xxxxxxxxxxxxx > > 主题: [llvm-uc] Unicore32的重定位(relocation)设计 > > > > Hi, all > > > > 我在移植binutils时遇到了一点关于重定位的问题。上次我提到bfd支持elf > > 的工作中,最主要的事情是对重定位的处理。在我又看了一些资料和代码 > > 后,我发现具体的情况是这样的: > > > > ELF格式本身只定义了重定位这个概念本身,而没有定义具体的重定位类型 > > 和每个类型对应的操作,这些东西应该由每个希望使用ELF的架构根据自 > > 身的指令系统来设计。例如,x86的ELF定义了下面这些重定位类型: > > > > /* i386/elf relocations */ > > BFD_RELOC_386_GOT32, > > BFD_RELOC_386_PLT32, > > BFD_RELOC_386_COPY, > > BFD_RELOC_386_GLOB_DAT, > > BFD_RELOC_386_JUMP_SLOT, > > BFD_RELOC_386_RELATIVE, > > BFD_RELOC_386_GOTOFF, > > BFD_RELOC_386_GOTPC, > > 我目前的理解是:这里面的大部分应该都需要支持 > PLT和GOT都是为了支持so设计的。我可能先实现一个只支持.o和.a的版本。 > > > > 总的原则是,重定位的设计应该让linker/loader能够支持.o, > > .a和.so需要的各种语义。而且,在loader重定位阶段,不能修改.text段, > > 只能修改.data段(至少x86上是这样的)。 > > The same. (修改text段则意味着支持self modified code,需要刷新cache,所以通常都不支持) > > > > > 所以,现在我们需要为Unicore32设计一套重定位方案。我的问题是:有什 > > 么设计文档可供参考吗? > > 我可以在云笔记上,把工具链现有的手册共享给大家 > > > > > 另外,llvm是要翻译到汇编代码还是机器指令?如果是机器指令,恐怕也 > > 有这个问题。 > > > > 祝好, > > 刘智猷