John Reagan via llvm-dev
2016-Nov-01 14:06 UTC
[llvm-dev] PIC and mcmodel=large on x86 doesn't use any relocations
> From: Joerg Sonnenberger via llvm-dev <llvm-dev at lists.llvm.org> > To: llvm-dev at lists.llvm.org > Subject: Re: [llvm-dev] PIC and mcmodel=large on x86 doesn't use any > relocations> > On Mon, Oct 31, 2016 at 02:30:43PM -0400, John Reagan via llvm-dev > wrote: > > The idea to make this all work on x86-64 is to use the address of a > > routine's PLT as its "address" in all cases. By putting the PLT in > > 32-bit address space, some ancient BASIC or Fortran program can > > continue to use an INTEGER*4 to hold a routine's "address" and pass > it > > around. Of course, our PLTs won't be actual dynamic loading code > > but just trampolines to the 64-bit code. The PLTs provide a > > consistent "address of routine" for pointer comparisons, etc just > > like the "primary function descriptor" on Itanium. > > That's effectively how the main binary works for dynamically linked > non-PIE x86_64 code in the default code model. It creates some > problems for protected symbols and involves the nasty copy > relocations, but nothing so far seems to require the large code model, > at least in the sense of "GOT and PLT are not addressable with 32bit signed offset"? > > Joerg >Looking at what I have today on OpenVMS Itanium, I can have code at address (I'll add a 'dot' in the middle for readability) 0x00000001.00000000 and our short section with static data/FDs is at 0x00000000.00020000 How does the code find the GOT/PLT with only 32-bit %rip addressing?