]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - include/elf/s390.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / include / elf / s390.h
CommitLineData
a85d7ed0 1/* 390 ELF support for BFD.
250d07de 2 Copyright (C) 2000-2021 Free Software Foundation, Inc.
a85d7ed0
NC
3 Contributed by Carl B. Pedersen and Martin Schwidefsky.
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
e4e42b45 9 the Free Software Foundation; either version 3 of the License, or
a85d7ed0
NC
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
e172dbf8
NC
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
a85d7ed0
NC
21
22#ifndef _ELF_390_H
23#define _ELF_390_H
24
25/* Processor specific flags for the ELF header e_flags field. */
26
27/* Symbol types. */
28
29#define STACK_REG 15 /* Global Stack reg */
30#define BACKL_REG 14 /* Global Backlink reg */
31#define BASE_REG 13 /* Global Base reg */
32#define GOT_REG 12 /* Holds addr of GOT */
33
34#include "elf/reloc-macros.h"
35
55786da2
AK
36/* Processor specific flags for the ELF header e_flags field. */
37
38#define EF_S390_HIGH_GPRS 0x00000001
39
b4cbbe8f
AK
40/* Request 4k page table size. */
41#define PT_S390_PGSTE (PT_LOPROC + 0)
42
a85d7ed0
NC
43/* Relocation types. */
44
45START_RELOC_NUMBERS (elf_s390_reloc_type)
46 RELOC_NUMBER (R_390_NONE, 0) /* No reloc. */
47 RELOC_NUMBER (R_390_8, 1) /* Direct 8 bit. */
48 RELOC_NUMBER (R_390_12, 2) /* Direct 12 bit. */
49 RELOC_NUMBER (R_390_16, 3) /* Direct 16 bit. */
50 RELOC_NUMBER (R_390_32, 4) /* Direct 32 bit. */
51 RELOC_NUMBER (R_390_PC32, 5) /* PC relative 32 bit. */
52 RELOC_NUMBER (R_390_GOT12, 6) /* 12 bit GOT offset. */
53 RELOC_NUMBER (R_390_GOT32, 7) /* 32 bit GOT offset. */
54 RELOC_NUMBER (R_390_PLT32, 8) /* 32 bit PC relative PLT address. */
55 RELOC_NUMBER (R_390_COPY, 9) /* Copy symbol at runtime. */
56 RELOC_NUMBER (R_390_GLOB_DAT, 10) /* Create GOT entry. */
57 RELOC_NUMBER (R_390_JMP_SLOT, 11) /* Create PLT entry. */
58 RELOC_NUMBER (R_390_RELATIVE, 12) /* Adjust by program base. */
43d92ce0 59 RELOC_NUMBER (R_390_GOTOFF32, 13) /* 32 bit offset to GOT. */
a85d7ed0
NC
60 RELOC_NUMBER (R_390_GOTPC, 14) /* 32 bit PC relative offset to GOT. */
61 RELOC_NUMBER (R_390_GOT16, 15) /* 16 bit GOT offset. */
62 RELOC_NUMBER (R_390_PC16, 16) /* PC relative 16 bit. */
fb798c50
AK
63 RELOC_NUMBER (R_390_PC12DBL, 62) /* PC relative 12 bit shifted by 1. */
64 RELOC_NUMBER (R_390_PLT12DBL, 63) /* 12 bit PC rel. PLT shifted by 1. */
a85d7ed0
NC
65 RELOC_NUMBER (R_390_PC16DBL, 17) /* PC relative 16 bit shifted by 1. */
66 RELOC_NUMBER (R_390_PLT16DBL, 18) /* 16 bit PC rel. PLT shifted by 1. */
fb798c50
AK
67 RELOC_NUMBER (R_390_PC24DBL, 64) /* PC relative 24 bit shifted by 1. */
68 RELOC_NUMBER (R_390_PLT24DBL, 65) /* 24 bit PC rel. PLT shifted by 1. */
a85d7ed0
NC
69 RELOC_NUMBER (R_390_PC32DBL, 19) /* PC relative 32 bit shifted by 1. */
70 RELOC_NUMBER (R_390_PLT32DBL, 20) /* 32 bit PC rel. PLT shifted by 1. */
71 RELOC_NUMBER (R_390_GOTPCDBL, 21) /* 32 bit PC rel. GOT shifted by 1. */
72 RELOC_NUMBER (R_390_64, 22) /* Direct 64 bit. */
73 RELOC_NUMBER (R_390_PC64, 23) /* PC relative 64 bit. */
74 RELOC_NUMBER (R_390_GOT64, 24) /* 64 bit GOT offset. */
75 RELOC_NUMBER (R_390_PLT64, 25) /* 64 bit PC relative PLT address. */
76 RELOC_NUMBER (R_390_GOTENT, 26) /* 32 bit PC rel. to GOT entry >> 1. */
43d92ce0
MS
77 RELOC_NUMBER (R_390_GOTOFF16, 27) /* 16 bit offset to GOT. */
78 RELOC_NUMBER (R_390_GOTOFF64, 28) /* 64 bit offset to GOT. */
79 RELOC_NUMBER (R_390_GOTPLT12, 29) /* 12 bit offset to jump slot. */
80 RELOC_NUMBER (R_390_GOTPLT16, 30) /* 16 bit offset to jump slot. */
81 RELOC_NUMBER (R_390_GOTPLT32, 31) /* 32 bit offset to jump slot. */
82 RELOC_NUMBER (R_390_GOTPLT64, 32) /* 64 bit offset to jump slot. */
83 RELOC_NUMBER (R_390_GOTPLTENT, 33) /* 32 bit rel. offset to jump slot. */
84 RELOC_NUMBER (R_390_PLTOFF16, 34) /* 16 bit offset from GOT to PLT. */
85 RELOC_NUMBER (R_390_PLTOFF32, 35) /* 32 bit offset from GOT to PLT. */
86 RELOC_NUMBER (R_390_PLTOFF64, 36) /* 16 bit offset from GOT to PLT. */
c20c23d5
MS
87 RELOC_NUMBER (R_390_TLS_LOAD, 37) /* Tag for load insn in TLS code. */
88 RELOC_NUMBER (R_390_TLS_GDCALL, 38) /* Tag for function call in general
89 dynamic TLS code. */
90 RELOC_NUMBER (R_390_TLS_LDCALL, 39) /* Tag for function call in local
91 dynamic TLS code. */
92 RELOC_NUMBER (R_390_TLS_GD32, 40) /* Direct 32 bit for general dynamic
93 thread local data. */
94 RELOC_NUMBER (R_390_TLS_GD64, 41) /* Direct 64 bit for general dynamic
95 thread local data. */
96 RELOC_NUMBER (R_390_TLS_GOTIE12, 42)/* 12 bit GOT offset for static TLS
97 block offset. */
98 RELOC_NUMBER (R_390_TLS_GOTIE32, 43)/* 32 bit GOT offset for static TLS
99 block offset. */
100 RELOC_NUMBER (R_390_TLS_GOTIE64, 44)/* 64 bit GOT offset for static TLS
101 block offset. */
102 RELOC_NUMBER (R_390_TLS_LDM32, 45) /* Direct 32 bit for local dynamic
103 thread local data in LD code. */
104 RELOC_NUMBER (R_390_TLS_LDM64, 46) /* Direct 64 bit for local dynamic
105 thread local data in LD code. */
106 RELOC_NUMBER (R_390_TLS_IE32, 47) /* 32 bit address of GOT entry for
107 negated static TLS block offset. */
108 RELOC_NUMBER (R_390_TLS_IE64, 48) /* 64 bit address of GOT entry for
109 negated static TLS block offset. */
110 RELOC_NUMBER (R_390_TLS_IEENT, 49) /* 32 bit rel. offset to GOT entry for
111 negated static TLS block offset. */
112 RELOC_NUMBER (R_390_TLS_LE32, 50) /* 32 bit negated offset relative to
113 static TLS block. */
114 RELOC_NUMBER (R_390_TLS_LE64, 51) /* 64 bit negated offset relative to
115 static TLS block. */
116 RELOC_NUMBER (R_390_TLS_LDO32, 52) /* 32 bit offset relative to TLS
117 block. */
118 RELOC_NUMBER (R_390_TLS_LDO64, 53) /* 64 bit offset relative to TLS
119 block. */
120 RELOC_NUMBER (R_390_TLS_DTPMOD, 54) /* ID of module containing symbol. */
121 RELOC_NUMBER (R_390_TLS_DTPOFF, 55) /* Offset in TLS block. */
122 RELOC_NUMBER (R_390_TLS_TPOFF, 56) /* Negate offset in static TLS
123 block. */
89af415b
MS
124 RELOC_NUMBER (R_390_20, 57) /* Direct 20 bit. */
125 RELOC_NUMBER (R_390_GOT20, 58) /* 20 bit GOT offset. */
126 RELOC_NUMBER (R_390_GOTPLT20, 59) /* 20 bit offset to jump slot. */
127 RELOC_NUMBER (R_390_TLS_GOTIE20, 60)/* 20 bit GOT offset for statis TLS
128 block offset. */
470b557a 129 RELOC_NUMBER (R_390_IRELATIVE, 61) /* IFUNC relocation. */
a85d7ed0
NC
130 /* These are GNU extensions to enable C++ vtable garbage collection. */
131 RELOC_NUMBER (R_390_GNU_VTINHERIT, 250)
132 RELOC_NUMBER (R_390_GNU_VTENTRY, 251)
133END_RELOC_NUMBERS (R_390_max)
134
643f7afb
AK
135/* Object attribute tags. */
136enum
137{
138 /* 0-3 are generic. */
139 /* 4 is reserved for the FP ABI. */
140
141 /* Vector ABI:
142 0 = not affected by the vector ABI, or not tagged.
143 1 = software vector ABI being used
144 2 = hardware vector ABI being used. */
145 Tag_GNU_S390_ABI_Vector = 8,
146};
a85d7ed0 147
643f7afb 148#endif /* _ELF_390_H */