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