Coverage Report

Created: 2025-06-24 06:45

/src/binutils-gdb/include/elf/mmix.h
Line
Count
Source (jump to first uncovered line)
1
/* MMIX support for BFD.
2
   Copyright (C) 2001-2025 Free Software Foundation, Inc.
3
4
   This file is part of BFD, the Binary File Descriptor library.
5
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3 of the License, or
9
   (at your option) any later version.
10
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
   MA 02110-1301, USA.  */
20
21
/* This file holds definitions specific to the MMIX ELF ABI.  */
22
23
#ifndef ELF_MMIX_H
24
#define ELF_MMIX_H
25
26
#include "elf/reloc-macros.h"
27
28
/* Relocations.  See the reloc table in bfd/elf64-mmix.c for details.  */
29
942
START_RELOC_NUMBERS (elf_mmix_reloc_type)
30
942
  RELOC_NUMBER (R_MMIX_NONE, 0)
31
32
  /* Standard absolute relocations.  */
33
9
  RELOC_NUMBER (R_MMIX_8, 1)
34
11
  RELOC_NUMBER (R_MMIX_16, 2)
35
11
  RELOC_NUMBER (R_MMIX_24, 3)
36
9
  RELOC_NUMBER (R_MMIX_32, 4)
37
9
  RELOC_NUMBER (R_MMIX_64, 5)
38
39
  /* Standard relative relocations.  */
40
7
  RELOC_NUMBER (R_MMIX_PC_8, 6)
41
9
  RELOC_NUMBER (R_MMIX_PC_16, 7)
42
27
  RELOC_NUMBER (R_MMIX_PC_24, 8)
43
61
  RELOC_NUMBER (R_MMIX_PC_32, 9)
44
4
  RELOC_NUMBER (R_MMIX_PC_64, 10)
45
46
  /* GNU extensions for C++ vtables.  */
47
5
  RELOC_NUMBER (R_MMIX_GNU_VTINHERIT, 11)
48
8
  RELOC_NUMBER (R_MMIX_GNU_VTENTRY, 12)
49
50
  /* A GETA instruction.  */
51
8
  RELOC_NUMBER (R_MMIX_GETA, 13)
52
3
  RELOC_NUMBER (R_MMIX_GETA_1, 14)
53
2
  RELOC_NUMBER (R_MMIX_GETA_2, 15)
54
7
  RELOC_NUMBER (R_MMIX_GETA_3, 16)
55
56
  /* A conditional branch instruction.  */
57
10
  RELOC_NUMBER (R_MMIX_CBRANCH, 17)
58
6
  RELOC_NUMBER (R_MMIX_CBRANCH_J, 18)
59
9
  RELOC_NUMBER (R_MMIX_CBRANCH_1, 19)
60
35
  RELOC_NUMBER (R_MMIX_CBRANCH_2, 20)
61
6
  RELOC_NUMBER (R_MMIX_CBRANCH_3, 21)
62
63
  /* A PUSHJ instruction.  */
64
4
  RELOC_NUMBER (R_MMIX_PUSHJ, 22)
65
3
  RELOC_NUMBER (R_MMIX_PUSHJ_1, 23)
66
18
  RELOC_NUMBER (R_MMIX_PUSHJ_2, 24)
67
0
  RELOC_NUMBER (R_MMIX_PUSHJ_3, 25)
68
69
  /* A JMP instruction.  */
70
5
  RELOC_NUMBER (R_MMIX_JMP, 26)
71
9
  RELOC_NUMBER (R_MMIX_JMP_1, 27)
72
11
  RELOC_NUMBER (R_MMIX_JMP_2, 28)
73
4
  RELOC_NUMBER (R_MMIX_JMP_3, 29)
74
75
  /* A relative address such as in a GETA or a branch.  */
76
3
  RELOC_NUMBER (R_MMIX_ADDR19, 30)
77
78
  /* A relative address such as in a JMP (only).  */
79
1
  RELOC_NUMBER (R_MMIX_ADDR27, 31)
80
81
  /* A general register or a number 0..255.  */
82
22
  RELOC_NUMBER (R_MMIX_REG_OR_BYTE, 32)
83
84
  /* A general register. */
85
13
  RELOC_NUMBER (R_MMIX_REG, 33)
86
87
  /* A global register and an offset, the global register (allocated at
88
     link time) contents plus the offset made equivalent to the relocation
89
     expression at link time.  The relocation must point at the Y field of
90
     an instruction.  */
91
3
  RELOC_NUMBER (R_MMIX_BASE_PLUS_OFFSET, 34)
92
93
  /* A LOCAL assertion.  */
94
4
  RELOC_NUMBER (R_MMIX_LOCAL, 35)
95
96
  /* A PUSHJ instruction, generating a stub if it does not reach.  */
97
13
  RELOC_NUMBER (R_MMIX_PUSHJ_STUBBABLE, 36)
98
400
END_RELOC_NUMBERS (R_MMIX_max)
99
100
101
/* Section Attributes.  */
102
/* A section containing necessary information for relaxation.  */
103
#define SHF_MMIX_CANRELAX 0x80000000
104
105
/* Symbol attributes.  */
106
/* A symbol with this section-index is a register.  */
107
0
#define SHN_REGISTER  SHN_LOPROC
108
109
/* This section holds contents for each initialized register, at VMA
110
   regno*8.  A symbol relative to this section will be transformed to an
111
   absolute symbol with the value corresponding to the register number at
112
   final link time.  A symbol with a value outside the inclusive range
113
   32*8 .. 254*8 is an error.  It is highly recommended to only use an
114
   upper bound of 253*8 or lower as specified in the (currently
115
   unspecified) ABI.  */
116
523
#define MMIX_REG_CONTENTS_SECTION_NAME ".MMIX.reg_contents"
117
118
/* At link time, a section by this name is created, expected to be
119
   included in MMIX_REG_CONTENTS_SECTION_NAME in the output.  */
120
#define MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME \
121
0
 ".MMIX.reg_contents.linker_allocated"
122
123
/* This is a faked section holding symbols with SHN_REGISTER.  Don't
124
   confuse it with MMIX_REG_CONTENTS_SECTION_NAME; this one has no
125
   contents, just values.  It is an error for a value in this section to
126
   be outside the range 32..255 and it must never become an actual section
127
   in an object file.  */
128
919
#define MMIX_REG_SECTION_NAME "*REG*"
129
130
/* Appended with a number N=0..65535, this is a representation of the
131
   mmixal "BSPEC N" ... "ESPEC" directive pair; the contents go into an
132
   ELF section by name ".MMIX.spec_data.N".  */
133
94.4k
#define MMIX_OTHER_SPEC_SECTION_PREFIX ".MMIX.spec_data."
134
135
/* A section SECNAME is noted to start at "__.MMIX.start.SECNAME" by the
136
   presence of this symbol.  Currently only implemented for ".text"
137
   through the symbol "__.MMIX.start..text".  */
138
0
#define MMIX_LOC_SECTION_START_SYMBOL_PREFIX "__.MMIX.start."
139
140
/* This symbol is always a function.  */
141
38.0k
#define MMIX_START_SYMBOL_NAME "Main"
142
143
144
/* We smuggle in a few MMO specifics here.  We don't make a specific MMO
145
   file, since we can't reasonably support MMO without ELF; we have to
146
   include this file anyway.  */
147
148
21.6k
#define MMO_TEXT_SECTION_NAME ".text"
149
11.3k
#define MMO_DATA_SECTION_NAME ".data"
150
151
/* A definition for the flags we put in spec data in files.  A copy of our
152
   own of some flags to keep immune to BFD flag changes.  See section.c of
153
   2001-07-18 for flag documentation.  */
154
13.7k
#define MMO_SEC_ALLOC      0x001
155
13.7k
#define MMO_SEC_LOAD       0x002
156
13.7k
#define MMO_SEC_RELOC      0x004
157
13.7k
#define MMO_SEC_READONLY   0x010
158
13.7k
#define MMO_SEC_CODE       0x020
159
13.7k
#define MMO_SEC_DATA       0x040
160
13.7k
#define MMO_SEC_NEVER_LOAD 0x400
161
13.7k
#define MMO_SEC_IS_COMMON 0x8000
162
13.7k
#define MMO_SEC_DEBUGGING 0x10000
163
164
#ifdef BFD_ARCH_SIZE
165
extern bool _bfd_mmix_before_linker_allocation
166
  (bfd *, struct bfd_link_info *);
167
extern bool _bfd_mmix_after_linker_allocation
168
  (bfd *, struct bfd_link_info *);
169
extern bool _bfd_mmix_check_all_relocs
170
  (bfd *, struct bfd_link_info *);
171
#endif
172
173
#endif /* ELF_MMIX_H */