Amd64 relocation R_X86_64_32S in a static lib

Richard Biener rguenther at
Thu Nov 7 10:43:55 CET 2013

On Wed, 6 Nov 2013, Torbjorn Granlund wrote:

>   "Exact decision for the change"?  I'm not sure what you mean by 'decision' 
>   there.  If you're wondering about the _reason_ for the change (why we did 
>   it), the answer is so that ASLR is applied not just to the code in shared 
>   libraries but also the code in executables.  If you're wondering what was 
>   done to implement the change, the part that seems to be annoying you is 
>   that in 5.3 the default for gcc is to pass -fpie to the C compiler and 
>   -pie to the linker.
> I am not annoyed.  I am trying to understand the ABI change.  Once I
> have done that, I will carefully adhere to it.
> The change makes be quite worried, since it *seems* to be done without
> proper understanding of the issues involved.  Furthermore, the ABI
> change has not been properly announced, and the new ABI seems to be
> undocumented.
> That in turn makes me expect further ABI changes in future OpenBSD
> releases, which will likely break our code again.
> When GMP works incorrectly, then people tend to care very little whether
> it is due to a GMP bug, or due to platform problems.
>   Yes, you can.  If you look at libc.a, for example, you'll see it contains 
>   R_X86_64_GOTPCREL and R_X86_64_PLT32 relocations.  Those work both when 
>   building a PIE executable and when building a fully static non-PIE 
>   executable.  In the latter case they are resolved by the linker when 
>   generating the executable.
> Are you telling me that the most future-proof code would be all-PIC in
> the *static* GMP build?  Should we perhaps stay away from R_X86_64_64
> (also in a static lib)?

Yes, static libs should be PIC (or a pic variant made available).
Consider somebody wanting to link gmp statically into a shared library
for example - or as in this case, linking gmp statically into a PIE

> In the absense of documentation, could you tell which of the relocs on
> page 71 of the official AMD64 ELF ABI are to be supported on OpenBSD
> from now and on?

It's very likely exactly the same as those that are allowed for PIE
executables on all AMD64 ELF systems.  I understand that on
OpenBSD -fpie is now simply the default (for SUSE we build
"selected security relevant apps" with -fpie, not all apps due
to the fear of runtime overhead).


Richard Biener <rguenther at>
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend

More information about the gmp-devel mailing list