[llvm-uc] Re: [llvm-uc] 答复: [llvm-uc] Unicore32的重定位(relocation)设计

  • From: 刘智猷 <liuzhiyou.cs@xxxxxxxxx>
  • To: llvm-uc@xxxxxxxxxxxxx
  • Date: Tue, 18 Dec 2012 10:26:04 +0800

在 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是要翻译到汇编代码还是机器指令?如果是机器指令,恐怕也
> > 有这个问题。
> >
> > 祝好,
> > 刘智猷

Other related posts:

  • » [llvm-uc] Re: [llvm-uc] 答复: [llvm-uc] Unicore32的重定位(relocation)设计 - 刘智猷