Re: Prelink for mips (Re: MIPS broken in 2.3)
From: H . J . Lu <hidden>
Date: 2002-01-07 22:16:14
On Mon, Dec 17, 2001 at 06:52:15PM +0100, Jakub Jelinek wrote:
On Mon, Dec 17, 2001 at 09:10:32AM -0800, H . J . Lu wrote:quoted
On Mon, Dec 17, 2001 at 12:36:31PM +0100, Jakub Jelinek wrote:quoted
instead (well, best would be if somebody ported prelink to mips; I'll try to answer any questions and help).Do you have some documentations how prelink works?So far not too much. Some info is in prelink(8) man page, some info was posted to binutils mailing list.
I have prelink-20011010.tar.bz2. Is that current?
quoted
quoted
I skipped mips because it is way too different from how any other ELF architecture works (e.g. using a single dynamic reloc type for everything with various meanings, etc.) and I have no access to it.That is what I am afraid of. The MIPS ABI supports "quickstart".I know, but from what I understood, quickstart e.g. just assumes there won't be conflicts and if there are, their handling is very costly (their conflicts are just symbol indices which need to be checked out). prelink conflicts are ElfW(Rela) relocs against r_symndx 0. To port prelink to a new architecture, you need basically: 1) determine what you need to do with relocations and special CPU sections when relocating a shared library from one address to another one (e.g. you can link a shared libs once at VMA 0, once at VMA 0xdeadb000 and see what changed) - these are *_adjust_* functions 2) write routines which apply relocs (*_prelink_rel*) 3) write routines which create conflict relocs 4) as MIPS is rel, it needs to be figured out when it is needed to convert from Rel to Rela (in i386/arm case in most cases it can be avoided, the only relocs which require it are (on i386): R_386_32 with nonzero addend (otherwise R_386_GLOB_DAT does exactly the same thing) and R_386_PC32). This is needed, because otherwise the information about the original addend is lost when the final relocated value is stored at r_offset address. Original addend is needed, if prelink cannot be used, during dynamic linking. If MIPS has some place where it stashes this for Quickstart, then it could be reused, otherwise I'm afraid REL->RELA will happen more often on MIPS than on IA-32/ARM. 5) write routines which apply relocs to a buffer or apply a conflict to a buffer (these are used when doing comparisons on relocated content)
As I unsterstand, MIPS only has R_MIPS_REL32 for GOT in DSO and EXE. Do you have any suggestions? H.J.