| 1 | // s390.h -- ELF definitions specific to EM_S390 -*- C++ -*- |
| 2 | |
| 3 | // Copyright (C) 2015-2021 Free Software Foundation, Inc. |
| 4 | // Written by Marcin KoĆcielnicki <koriakin@0x04.net>. |
| 5 | |
| 6 | // This file is part of elfcpp. |
| 7 | |
| 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. |
| 12 | |
| 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.) |
| 21 | |
| 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. |
| 26 | |
| 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 |
| 30 | // 02110-1301, USA. |
| 31 | |
| 32 | #ifndef ELFCPP_S390_H |
| 33 | #define ELFCPP_S390_H |
| 34 | |
| 35 | namespace elfcpp |
| 36 | { |
| 37 | |
| 38 | enum |
| 39 | { |
| 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. |
| 60 | // New 64-bit ABI. |
| 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. |
| 69 | // Extensions. |
| 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. |
| 80 | // TLS extensions. |
| 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, |
| 114 | }; |
| 115 | |
| 116 | } // End namespace elfcpp. |
| 117 | |
| 118 | #endif // !defined(ELFCPP_S390_H) |