Subject: Re: -current MIPS ld.elf_so fix/workaround
To: Christopher SEKIYA <wileyc@rezrov.net>
From: Rafal Boni <rafal@attbi.com>
List: port-mips
Date: 04/13/2003 12:41:59
In message <20030413092157.GA29678@rezrov.net>, you write: 

-> On Sat, Apr 12, 2003 at 06:10:55PM -0400, Rafal Boni wrote:
-> 
-> > the following small patch makes my ld.elf_so behave correctly
-> 
-> I confirm that this patch makes bash/perl do the right thing.

Yeah, I tested this with a perl (which didn't even build with the in-tree
ld.elf_so) and tcsh before I sent that email but it is good to have that
seconded 8-)

-> A couple of comments (aside from the SUPPORT_BROKEN_LD define, which 
-> provides support that might not be necessary anymore):

Well, this isn't really true... There's still the "local, section relative"
stuff which gets fixed up by the SUPPORT_BROKEN_LD, and AFAICT, this was
the worse of the two things (in fact, for the case I eliminated, I'm not
sure which binutils versions generate the correct output according to the
comment and which ones don't -- other than the fact that it appears that
the current in-tree one does not).

-> >  		if (ELF_ST_TYPE(sym->st_info) == STT_FUNC &&
-> > -		    sym->st_value != 0) {
-> > +		    *got != sym->st_value) {
-> 
-> This bit I understand ...
-> 
-> > +			 * 
-> > +			 * XXXrkb: this can't be right?!?
-> >  			 */
-> > -			*got = sym->st_value + (Elf_Addr)obj->relocbase;
-> > +			*got += (Elf_Addr)obj->relocbase;
-> 
-> ... this is sort of confusing.  Why does this work, oh holy MIPS gurus?

I just tried to restore things to how they worked before Charles' changes.
I think the key here is "if we don't need to do anything else, at least
we have to adjust the address by the relocbase".  I'm not quite sure which
cases fall into this code, though...

--rafal

----
Rafal Boni                                                     rafal@attbi.com
  We are all worms.  But I do believe I am a glowworm.  -- Winston Churchill