[RFC v3 PATCH 6/4] Use LOAD_REG_IMMEDIATE macros

Paul Mackerras paulus at samba.org
Tue Jul 22 16:37:59 EST 2008


Mohan Kumar M writes:

> All of the variables references through @got translated into relocation 
> type R_PPC64_GOT16_DS entries. All these entries correspond to one of 
> the above entries in the .got section. But none of the entries in .got 
> section are relocated.

If that last statement is really true, then that would be an absolute
show-stopper, since you're not going to stop the compiler generating
loads from the TOC to get addresses of things.

However, I don't think it's true.  I compiled up a kernel using
--emit-relocs on the final link, and with readelf -e I can see a
.rela.got section containing a bunch of R_PPC64_ADDR64 relocs for
entries in the .got section.

So the problem appears to be either just that you are ignoring
R_PPC64_ADDR64 relocs, or else that your relocs.c program has a bug
and isn't seeing the .rela.got section.

> Now I have two options left:
> 1. Check for R_PPC64_GOT16_DS entries and check whether the contents 
> addressed by r2+offset is relocated or not and apply relocation if its not.
> 2. Change all LOAD_REG_ADDR macros to LOAD_REG_IMMEDIATE. This I have 
> already done.

I was trying to point out that this can't possibly be a viable
solution to the problem, because most of the TOC loads in the binary
are generated by the C compiler, and only a few of them come from use
of the LOAD_REG_ADDR macro in assembly code.

Paul.



More information about the Linuxppc-dev mailing list