/src/binutils-gdb/include/elf/x86-64.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* x86_64 ELF support for BFD. |
2 | | Copyright (C) 2000-2025 Free Software Foundation, Inc. |
3 | | Contributed by Jan Hubicka <jh@suse.cz> |
4 | | |
5 | | This file is part of BFD, the Binary File Descriptor library. |
6 | | |
7 | | This program is free software; you can redistribute it and/or modify |
8 | | it under the terms of the GNU General Public License as published by |
9 | | the Free Software Foundation; either version 3 of the License, or |
10 | | (at your option) any later version. |
11 | | |
12 | | This program is distributed in the hope that it will be useful, |
13 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | | GNU General Public License for more details. |
16 | | |
17 | | You should have received a copy of the GNU General Public License |
18 | | along with this program; if not, write to the Free Software Foundation, |
19 | | Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
20 | | |
21 | | #ifndef _ELF_X86_64_H |
22 | | #define _ELF_X86_64_H |
23 | | |
24 | | #include "elf/reloc-macros.h" |
25 | | |
26 | 136k | START_RELOC_NUMBERS (elf_x86_64_reloc_type) |
27 | 136k | RELOC_NUMBER (R_X86_64_NONE, 0) /* No reloc */ |
28 | 2.97k | RELOC_NUMBER (R_X86_64_64, 1) /* Direct 64 bit */ |
29 | 3.42k | RELOC_NUMBER (R_X86_64_PC32, 2) /* PC relative 32 bit signed */ |
30 | 818 | RELOC_NUMBER (R_X86_64_GOT32, 3) /* 32 bit GOT entry */ |
31 | 1.90k | RELOC_NUMBER (R_X86_64_PLT32, 4) /* 32 bit PLT address */ |
32 | 1.17k | RELOC_NUMBER (R_X86_64_COPY, 5) /* Copy symbol at runtime */ |
33 | 399 | RELOC_NUMBER (R_X86_64_GLOB_DAT, 6) /* Create GOT entry */ |
34 | 600 | RELOC_NUMBER (R_X86_64_JUMP_SLOT,7) /* Create PLT entry */ |
35 | 1.03k | RELOC_NUMBER (R_X86_64_RELATIVE, 8) /* Adjust by program base */ |
36 | 1.48k | RELOC_NUMBER (R_X86_64_GOTPCREL, 9) /* 32 bit signed pc relative |
37 | 0 | offset to GOT entry */ |
38 | 754 | RELOC_NUMBER (R_X86_64_32, 10) /* Direct 32 bit zero extended */ |
39 | 513 | RELOC_NUMBER (R_X86_64_32S, 11) /* Direct 32 bit sign extended */ |
40 | 318 | RELOC_NUMBER (R_X86_64_16, 12) /* Direct 16 bit zero extended */ |
41 | 636 | RELOC_NUMBER (R_X86_64_PC16, 13) /* 16 bit sign extended pc relative*/ |
42 | 358 | RELOC_NUMBER (R_X86_64_8, 14) /* Direct 8 bit sign extended */ |
43 | 446 | RELOC_NUMBER (R_X86_64_PC8, 15) /* 8 bit sign extended pc relative*/ |
44 | 664 | RELOC_NUMBER (R_X86_64_DTPMOD64, 16) /* ID of module containing symbol */ |
45 | 947 | RELOC_NUMBER (R_X86_64_DTPOFF64, 17) /* Offset in TLS block */ |
46 | 320 | RELOC_NUMBER (R_X86_64_TPOFF64, 18) /* Offset in initial TLS block */ |
47 | 435 | RELOC_NUMBER (R_X86_64_TLSGD, 19) /* PC relative offset to GD GOT block */ |
48 | 267 | RELOC_NUMBER (R_X86_64_TLSLD, 20) /* PC relative offset to LD GOT block */ |
49 | 275 | RELOC_NUMBER (R_X86_64_DTPOFF32, 21) /* Offset in TLS block */ |
50 | 372 | RELOC_NUMBER (R_X86_64_GOTTPOFF, 22) /* PC relative offset to IE GOT entry */ |
51 | 348 | RELOC_NUMBER (R_X86_64_TPOFF32, 23) /* Offset in initial TLS block */ |
52 | 524 | RELOC_NUMBER (R_X86_64_PC64, 24) /* PC relative 64 bit */ |
53 | 391 | RELOC_NUMBER (R_X86_64_GOTOFF64, 25) /* 64 bit offset to GOT */ |
54 | 401 | RELOC_NUMBER (R_X86_64_GOTPC32, 26) /* 32 bit signed pc relative |
55 | 0 | offset to GOT */ |
56 | 558 | RELOC_NUMBER (R_X86_64_GOT64, 27) /* 64 bit GOT entry offset */ |
57 | 309 | RELOC_NUMBER (R_X86_64_GOTPCREL64, 28) /* 64 bit signed pc relative |
58 | 0 | offset to GOT entry */ |
59 | 317 | RELOC_NUMBER (R_X86_64_GOTPC64, 29) /* 64 bit signed pc relative |
60 | 0 | offset to GOT */ |
61 | 411 | RELOC_NUMBER (R_X86_64_GOTPLT64, 30) /* Obsolete. The same as GOT64. */ |
62 | 250 | RELOC_NUMBER (R_X86_64_PLTOFF64, 31) /* 64 bit GOT relative offset |
63 | 0 | to PLT entry */ |
64 | 994 | RELOC_NUMBER (R_X86_64_SIZE32, 32) /* 32-bit symbol size */ |
65 | 434 | RELOC_NUMBER (R_X86_64_SIZE64, 33) /* 64-bit symbol size */ |
66 | 400 | RELOC_NUMBER (R_X86_64_GOTPC32_TLSDESC, 34) |
67 | | /* 32 bit signed pc relative |
68 | | offset to TLS descriptor |
69 | | in the GOT. */ |
70 | 447 | RELOC_NUMBER (R_X86_64_TLSDESC_CALL, 35) /* Relaxable call through TLS |
71 | 0 | descriptor. */ |
72 | 355 | RELOC_NUMBER (R_X86_64_TLSDESC, 36) /* 2x64-bit TLS descriptor. */ |
73 | 266 | RELOC_NUMBER (R_X86_64_IRELATIVE, 37) /* Adjust indirectly by program base */ |
74 | 378 | RELOC_NUMBER (R_X86_64_RELATIVE64, 38) /* 64bit adjust by program base */ |
75 | 375 | RELOC_NUMBER (R_X86_64_PC32_BND, 39) /* PC relative 32 bit |
76 | 0 | signed with BND prefix */ |
77 | 455 | RELOC_NUMBER (R_X86_64_PLT32_BND, 40) /* 32 bit PLT address with |
78 | 0 | BND prefix */ |
79 | 0 | /* Load from 32 bit signed pc relative offset to GOT entry without |
80 | 0 | REX nor REX2 prefixes, relaxable. */ |
81 | 268 | RELOC_NUMBER (R_X86_64_GOTPCRELX, 41) |
82 | | /* Load from 32 bit signed pc relative offset to GOT entry with |
83 | | REX prefix, relaxable. */ |
84 | 296 | RELOC_NUMBER (R_X86_64_REX_GOTPCRELX, 42) |
85 | | /* Load from 32 bit signed pc relative offset to GOT entry if the |
86 | | instruction starts at 4 bytes before the relocation offset, |
87 | | relaxable. */ |
88 | 404 | RELOC_NUMBER (R_X86_64_CODE_4_GOTPCRELX, 43) |
89 | | /* PC relative offset to IE GOT entry if the instruction starts at |
90 | | 4 bytes before the relocation offset. */ |
91 | 290 | RELOC_NUMBER (R_X86_64_CODE_4_GOTTPOFF, 44) |
92 | | /* 32 bit signed pc relative offset to TLS descriptor in the GOT if |
93 | | instruction starts at 4 bytes before the relocation offset. */ |
94 | 529 | RELOC_NUMBER (R_X86_64_CODE_4_GOTPC32_TLSDESC, 45) |
95 | | /* Load from 32 bit signed pc relative offset to GOT entry if the |
96 | | instruction starts at 5 bytes before the relocation offset, |
97 | | relaxable. */ |
98 | 463 | RELOC_NUMBER (R_X86_64_CODE_5_GOTPCRELX, 46) |
99 | | /* PC relative offset to IE GOT entry if the instruction starts at |
100 | | 5 bytes before the relocation offset. */ |
101 | 357 | RELOC_NUMBER (R_X86_64_CODE_5_GOTTPOFF, 47) |
102 | | /* 32 bit signed pc relative offset to TLS descriptor in the GOT if |
103 | | instruction starts at 5 bytes before the relocation offset. */ |
104 | 410 | RELOC_NUMBER (R_X86_64_CODE_5_GOTPC32_TLSDESC, 48) |
105 | | /* Load from 32 bit signed pc relative offset to GOT entry if the |
106 | | instruction starts at 6 bytes before the relocation offset, |
107 | | relaxable. */ |
108 | 332 | RELOC_NUMBER (R_X86_64_CODE_6_GOTPCRELX, 49) |
109 | | /* PC relative offset to IE GOT entry if the instruction starts at |
110 | | 6 bytes before the relocation offset. */ |
111 | 279 | RELOC_NUMBER (R_X86_64_CODE_6_GOTTPOFF, 50) |
112 | | /* 32 bit signed pc relative offset to TLS descriptor in the GOT if |
113 | | instruction starts at 6 bytes before the relocation offset. */ |
114 | 261 | RELOC_NUMBER (R_X86_64_CODE_6_GOTPC32_TLSDESC, 51) |
115 | 326 | RELOC_NUMBER (R_X86_64_GNU_VTINHERIT, 250) /* GNU C++ hack */ |
116 | 454 | RELOC_NUMBER (R_X86_64_GNU_VTENTRY, 251) /* GNU C++ hack */ |
117 | 69.0k | END_RELOC_NUMBERS (R_X86_64_max) |
118 | | |
119 | | /* Processor specific section types. */ |
120 | | |
121 | 144k | #define SHT_X86_64_UNWIND (SHT_LOPROC + 1) /* Unwind information. */ |
122 | | |
123 | | /* Like SHN_COMMON but the symbol will be allocated in the .lbss |
124 | | section. */ |
125 | 50.1k | #define SHN_X86_64_LCOMMON (SHN_LORESERVE + 2) |
126 | | |
127 | 1.05M | #define SHF_X86_64_LARGE 0x10000000 |
128 | | |
129 | 38 | #define DT_X86_64_PLT (DT_LOPROC + 0) |
130 | 26 | #define DT_X86_64_PLTSZ (DT_LOPROC + 1) |
131 | 1 | #define DT_X86_64_PLTENT (DT_LOPROC + 3) |
132 | | |
133 | | #endif |