Oracle® Solaris 11.2 Linkers and Libraries Guide

Exit Print View

Updated: July 2014
 
 

x64: Relocation Types

The relocations that are listed in the following table are defined for x64.

Table 12-19  x64: ELF Relocation Types
Name
Value
Field
Calculation
R_AMD64_NONE
0
None
None
R_AMD64_64
1
word64
S + A
R_AMD64_PC32
2
word32
S + A - P
R_AMD64_GOT32
3
word32
G + A
R_AMD64_PLT32
4
word32
L + A - P
R_AMD64_COPY
5
None
Refer to the explanation following this table.
R_AMD64_GLOB_DAT
6
word64
S
R_AMD64_JUMP_SLOT
7
word64
S
R_AMD64_RELATIVE
8
word64
B + A
R_AMD64_GOTPCREL
9
word32
G + GOT + A - P
R_AMD64_32
10
word32
S + A
R_AMD64_32S
11
word32
S + A
R_AMD64_16
12
word16
S + A
R_AMD64_PC16
13
word16
S + A - P
R_AMD64_8
14
word8
S + A
R_AMD64_PC8
15
word8
S + A - P
R_AMD64_PC64
24
word64
S + A - P
R_AMD64_GOTOFF64
25
word64
S + A - GOT
R_AMD64_GOTPC32
26
word32
GOT + A + P
R_AMD64_SIZE32
32
word32
Z + A
R_AMD64_SIZE64
33
word64
Z + A

Note -  Additional relocations are available for thread-local storage references. These relocations are covered in Chapter 14, Thread-Local Storage.

The special semantics for most of these relocation types are identical to those used for x86. Some relocation types have semantics beyond simple calculation.

R_AMD64_GOTPCREL

This relocations has different semantics from the R_AMD64_GOT32 or equivalent R_386_GOTPC relocation. The x64 architecture provides an addressing mode that is relative to the instruction pointer. Therefore, an address can be loaded from the GOT using a single instruction.

The calculation for the R_AMD64_GOTPCREL relocation provides the difference between the location in the GOT where the symbol's address is given, and the location where the relocation is applied.

R_AMD64_32

The computed value is truncated to 32–bits. The link-editor verifies that the generated value for the relocation zero-extends to the original 64–bit value.

R_AMD64_32S

The computed value is truncated to 32–bits. The link-editor verifies that the generated value for the relocation sign-extends to the original 64–bit value.

R_AMD64_8, R_AMD64_16, R_AMD64_PC16, and R_AMD64_PC8

These relocations are not conformant to the x64 ABI, but are added here for documentation purposes. The R_AMD64_8 relocation truncates the computed value to 8-bits. The R_AMD64_16 relocation truncates the computed value to 16-bits.