llvm-dev Digest, Vol 148, Issue 131

From: Joerg Sonnenberger via llvm-dev <llvm-dev@lists.llvm.org>
To: llvm-dev@lists.llvm.org
Subject: Re: [llvm-dev] PIC and mcmodel=large on x86 doesn't use any

> 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
> 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"?


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)


and our short section with static data/FDs is at


How does the code find the GOT/PLT with only 32-bit %rip addressing?