1 // s390.h -- ELF definitions specific to EM_S390 -*- C++ -*-
3 // Copyright (C) 2015-2022 Free Software Foundation, Inc.
4 // Written by Marcin KoĆcielnicki <koriakin@0x04.net>.
6 // This file is part of elfcpp.
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public License
10 // as published by the Free Software Foundation; either version 2, or
11 // (at your option) any later version.
13 // In addition to the permissions in the GNU Library General Public
14 // License, the Free Software Foundation gives you unlimited
15 // permission to link the compiled version of this file into
16 // combinations with other programs, and to distribute those
17 // combinations without any restriction coming from the use of this
18 // file. (The Library Public License restrictions do apply in other
19 // respects; for example, they cover modification of the file, and
20 /// distribution when not linked into a combined executable.)
22 // This program is distributed in the hope that it will be useful, but
23 // WITHOUT ANY WARRANTY; without even the implied warranty of
24 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 // Library General Public License for more details.
27 // You should have received a copy of the GNU Library General Public
28 // License along with this program; if not, write to the Free Software
29 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
40 // Original 31-bit ABI.
41 R_390_NONE
= 0, // No reloc.
42 R_390_8
= 1, // Direct 8 bit.
43 R_390_12
= 2, // Direct 12 bit.
44 R_390_16
= 3, // Direct 16 bit.
45 R_390_32
= 4, // Direct 32 bit.
46 R_390_PC32
= 5, // PC relative 32 bit.
47 R_390_GOT12
= 6, // 12 bit GOT offset.
48 R_390_GOT32
= 7, // 32 bit GOT offset.
49 R_390_PLT32
= 8, // 32 bit PC relative PLT address.
50 R_390_COPY
= 9, // Copy symbol at runtime.
51 R_390_GLOB_DAT
= 10, // Create GOT entry.
52 R_390_JMP_SLOT
= 11, // Create PLT entry.
53 R_390_RELATIVE
= 12, // Adjust by program base.
54 R_390_GOTOFF32
= 13, // 32 bit offset to GOT.
55 R_390_GOTPC
= 14, // 32 bit PC relative offset to GOT.
56 R_390_GOT16
= 15, // 16 bit GOT offset.
57 R_390_PC16
= 16, // PC relative 16 bit.
58 R_390_PC16DBL
= 17, // PC relative 16 bit shifted by 1.
59 R_390_PLT16DBL
= 18, // 16 bit PC rel. PLT shifted by 1.
61 R_390_PC32DBL
= 19, // PC relative 32 bit shifted by 1.
62 R_390_PLT32DBL
= 20, // 32 bit PC rel. PLT shifted by 1.
63 R_390_GOTPCDBL
= 21, // 32 bit PC rel. GOT shifted by 1.
64 R_390_64
= 22, // Direct 64 bit.
65 R_390_PC64
= 23, // PC relative 64 bit.
66 R_390_GOT64
= 24, // 64 bit GOT offset.
67 R_390_PLT64
= 25, // 64 bit PC relative PLT address.
68 R_390_GOTENT
= 26, // 32 bit PC rel. to GOT entry >> 1.
70 R_390_GOTOFF16
= 27, // 16 bit offset to GOT.
71 R_390_GOTOFF64
= 28, // 64 bit offset to GOT.
72 R_390_GOTPLT12
= 29, // 12 bit offset to jump slot.
73 R_390_GOTPLT16
= 30, // 16 bit offset to jump slot.
74 R_390_GOTPLT32
= 31, // 32 bit offset to jump slot.
75 R_390_GOTPLT64
= 32, // 64 bit offset to jump slot.
76 R_390_GOTPLTENT
= 33, // 32 bit rel. offset to jump slot.
77 R_390_PLTOFF16
= 34, // 16 bit offset from GOT to PLT.
78 R_390_PLTOFF32
= 35, // 32 bit offset from GOT to PLT.
79 R_390_PLTOFF64
= 36, // 16 bit offset from GOT to PLT.
81 R_390_TLS_LOAD
= 37, // Tag for load insn in TLS code.
82 R_390_TLS_GDCALL
= 38, // Tag for function call in general dynamic TLS code.
83 R_390_TLS_LDCALL
= 39, // Tag for function call in local dynamic TLS code.
84 R_390_TLS_GD32
= 40, // Direct 32 bit for general dynamic thread local data.
85 R_390_TLS_GD64
= 41, // Direct 64 bit for general dynamic thread local data.
86 R_390_TLS_GOTIE12
= 42, // 12 bit GOT offset for static TLS block offset.
87 R_390_TLS_GOTIE32
= 43, // 32 bit GOT offset for static TLS block offset.
88 R_390_TLS_GOTIE64
= 44, // 64 bit GOT offset for static TLS block offset.
89 R_390_TLS_LDM32
= 45, // Direct 32 bit for local dynamic thread local data in LD code.
90 R_390_TLS_LDM64
= 46, // Direct 64 bit for local dynamic thread local data in LD code.
91 R_390_TLS_IE32
= 47, // 32 bit address of GOT entry for negated static TLS block offset.
92 R_390_TLS_IE64
= 48, // 64 bit address of GOT entry for negated static TLS block offset.
93 R_390_TLS_IEENT
= 49, // 32 bit rel. offset to GOT entry for negated static TLS block offset.
94 R_390_TLS_LE32
= 50, // 32 bit negated offset relative to static TLS block.
95 R_390_TLS_LE64
= 51, // 64 bit negated offset relative to static TLS block.
96 R_390_TLS_LDO32
= 52, // 32 bit offset relative to TLS block.
97 R_390_TLS_LDO64
= 53, // 64 bit offset relative to TLS block.
98 R_390_TLS_DTPMOD
= 54, // ID of module containing symbol.
99 R_390_TLS_DTPOFF
= 55, // Offset in TLS block.
100 R_390_TLS_TPOFF
= 56, // Negate offset in static TLS block.
101 // Yet more misc extensions.
102 R_390_20
= 57, // Direct 20 bit.
103 R_390_GOT20
= 58, // 20 bit GOT offset.
104 R_390_GOTPLT20
= 59, // 20 bit offset to jump slot.
105 R_390_TLS_GOTIE20
= 60, // 20 bit GOT offset for static TLS block offset.
106 R_390_IRELATIVE
= 61, // IFUNC relocation.
107 R_390_PC12DBL
= 62, // PC relative 12 bit shifted by 1.
108 R_390_PLT12DBL
= 63, // 12 bit PC rel. PLT shifted by 1.
109 R_390_PC24DBL
= 64, // PC relative 24 bit shifted by 1.
110 R_390_PLT24DBL
= 65, // 24 bit PC rel. PLT shifted by 1.
111 // GNU vtable garbage collection extensions.
112 R_390_GNU_VTINHERIT
= 250,
113 R_390_GNU_VTENTRY
= 251,
116 } // End namespace elfcpp.
118 #endif // !defined(ELFCPP_S390_H)