From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Message-ID: <18565.32839.382335.638503@cargo.ozlabs.ibm.com> Date: Tue, 22 Jul 2008 16:37:59 +1000 From: Paul Mackerras To: Mohan Kumar M Subject: Re: [RFC v3 PATCH 6/4] Use LOAD_REG_IMMEDIATE macros In-Reply-To: <48856403.5050207@in.ibm.com> References: <20080717183339.GA25070@in.ibm.com> <20080717184055.GB25070@in.ibm.com> <1216325187.7740.353.camel@pasglop> <48802AE0.30105@in.ibm.com> <4884E2E9.6050108@in.ibm.com> <18565.16369.993585.334427@cargo.ozlabs.ibm.com> <48856403.5050207@in.ibm.com> Cc: naren@linux.vnet.ibm.com, Milton Miller , ppcdev List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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.