[prev in list] [next in list] [prev in thread] [next in thread] 

List:       binutils
Subject:    Re: mips multi-got error
From:       Thiemo Seufer <ths () networkno ! de>
Date:       2006-06-30 13:30:09
Message-ID: 20060630133009.GA21946 () networkno ! de
[Download RAW message or body]

David Daney wrote:
> Thiemo Seufer wrote:
> >David Daney wrote:
> >[snip]
> >
> >>That is not supposed to work.  Multi-got linking only works if there are 
> >>fewer than 8192 symbols per compilation unit (input .o to the linker). 
> >>See the multi-got-1 testcase in ld/testsuite/ld-mips-elf.
> >>
> >>If you need more than 8192 symbols per compilation unit you must use 
> >>-xgot for the assembler.  Recent GCC versions have a -mxgot option that 
> >>does the same thing for GCC.
> >
> >
> >Actually, it is supposed to work. :-)  It is also a known deficiency
> >in the current assembler/linker implementation.
> 
> How?
> 
> The gp is set in the function prolog.  If a single function references 
> more got/plt entries than can be indexed with a 16 bit offset, wouldn't 
> you need to either load the gp before each got access(very inefficient I 
> would think) or use a 32 bit offset (somewhat inefficient)?

It doesn't need a gp load before each access, one per 16-bit addressable
GOT block would be enough. (This implies a Multi-GOT extension for
relocatable object files, probably with gp0..gpN / _gp_disp0.._gp_dispN
as per-GOT symbols.)


Thiemo

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic