]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gas/config/tc-alpha.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / config / tc-alpha.h
CommitLineData
252b5132 1/* This file is tc-alpha.h
250d07de 2 Copyright (C) 1994-2021 Free Software Foundation, Inc.
252b5132
RH
3 Written by Ken Raeburn <raeburn@cygnus.com>.
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
ec2655a6 9 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
10 any later version.
11
12 GAS 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 GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
252b5132
RH
21
22#define TC_ALPHA
23
24#define TARGET_BYTES_BIG_ENDIAN 0
25
26#define WORKING_DOT_WORD
27
28#define TARGET_ARCH bfd_arch_alpha
29
4ada7262
DB
30#ifdef TE_FreeBSD
31#define ELF_TARGET_FORMAT "elf64-alpha-freebsd"
32#endif
33#ifndef ELF_TARGET_FORMAT
34#define ELF_TARGET_FORMAT "elf64-alpha"
35#endif
36
252b5132
RH
37#define TARGET_FORMAT (OUTPUT_FLAVOR == bfd_target_ecoff_flavour \
38 ? "ecoff-littlealpha" \
39 : OUTPUT_FLAVOR == bfd_target_elf_flavour \
4ada7262 40 ? ELF_TARGET_FORMAT \
252b5132
RH
41 : OUTPUT_FLAVOR == bfd_target_evax_flavour \
42 ? "vms-alpha" \
43 : "unknown-format")
44
45#define NEED_LITERAL_POOL
252b5132
RH
46#define REPEAT_CONS_EXPRESSIONS
47
a161fe53
AM
48struct fix;
49struct alpha_reloc_tag;
50
ea1562b3
NC
51extern int alpha_force_relocation (struct fix *);
52extern int alpha_fix_adjustable (struct fix *);
252b5132
RH
53
54extern unsigned long alpha_gprmask, alpha_fprmask;
55extern valueT alpha_gp_value;
56
a161fe53
AM
57#define TC_FORCE_RELOCATION(FIX) alpha_force_relocation (FIX)
58#define tc_fix_adjustable(FIX) alpha_fix_adjustable (FIX)
252b5132
RH
59#define RELOC_REQUIRES_SYMBOL
60
55cf6793 61/* Values passed to md_apply_fix don't include the symbol value. */
a161fe53 62#define MD_APPLY_SYM_VALUE(FIX) 0
252b5132
RH
63
64#define md_convert_frag(b,s,f) as_fatal ("alpha convert_frag\n")
65#define md_estimate_size_before_relax(f,s) \
07726851 66 (as_fatal ("estimate_size_before_relax called"),1)
252b5132
RH
67#define md_operand(x)
68
69#ifdef OBJ_EVAX
198f1251 70#define TC_VALIDATE_FIX_SUB(FIX, SEG) 1
252b5132 71
198f1251 72#define tc_canonicalize_symbol_name evax_shorten_name
252b5132 73
62ebcb5c
AM
74#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP,RELOC) \
75 (void) RELOC, \
252b5132
RH
76 fix_new_exp (FRAG, OFF, (int)LEN, EXP, 0, \
77 LEN == 2 ? BFD_RELOC_16 \
78 : LEN == 4 ? BFD_RELOC_32 \
79 : LEN == 8 ? BFD_RELOC_64 \
80 : BFD_RELOC_ALPHA_LINKAGE);
81#endif
82
198f1251
TG
83#ifdef OBJ_EVAX
84#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 3
85#else
e13bab5a
AM
86#define TC_IMPLICIT_LCOMM_ALIGNMENT(size, align) \
87 do \
88 { \
89 align = 0; \
90 if (size > 1) \
91 { \
92 addressT temp = 1; \
93 while ((size & temp) == 0) \
94 ++align, temp <<= 1; \
95 } \
96 } \
97 while (0)
98#endif
99
252b5132
RH
100#define md_number_to_chars number_to_chars_littleendian
101
ea1562b3
NC
102extern int tc_get_register (int);
103extern void alpha_frob_ecoff_data (void);
252b5132
RH
104
105#define tc_frob_label(sym) alpha_define_label (sym)
ea1562b3 106extern void alpha_define_label (symbolS *);
252b5132
RH
107
108#define md_cons_align(nbytes) alpha_cons_align (nbytes)
ea1562b3 109extern void alpha_cons_align (int);
252b5132 110
0a9ef439 111#define HANDLE_ALIGN(fragp) alpha_handle_align (fragp)
ea1562b3 112extern void alpha_handle_align (struct frag *);
0a9ef439
RH
113
114#define MAX_MEM_FOR_RS_ALIGN_CODE (3 + 4 + 8)
115
252b5132
RH
116#ifdef OBJ_ECOFF
117#define tc_frob_file_before_adjust() alpha_frob_file_before_adjust ()
ea1562b3 118extern void alpha_frob_file_before_adjust (void);
252b5132
RH
119#endif
120
ea1562b3 121#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs. */
252b5132
RH
122
123#ifdef OBJ_ELF
d61a78a7 124#define md_elf_section_letter alpha_elf_section_letter
6d4af3c2 125extern bfd_vma alpha_elf_section_letter (int, const char **);
d61a78a7 126#define md_elf_section_flags alpha_elf_section_flags
01e1a5bc 127extern flagword alpha_elf_section_flags (flagword, bfd_vma, int);
252b5132 128#endif
43b4c25e 129
2d2255b5 130/* Whether to add support for explicit !relocation_op!sequence_number. At the
43b4c25e
MM
131 moment, only do this for ELF, though ECOFF could use it as well. */
132
133#ifdef OBJ_ELF
134#define RELOC_OP_P
135#endif
136
198f1251 137#ifndef OBJ_EVAX
19f78583
RH
138/* Before the relocations are written, reorder them, so that user
139 supplied !lituse relocations follow the appropriate !literal
140 relocations. Also convert the gas-internal relocations to the
141 appropriate linker relocations. */
a161fe53 142#define tc_frob_file_before_fix() alpha_before_fix ()
ea1562b3 143extern void alpha_before_fix (void);
198f1251 144#endif
43b4c25e 145
f37f01cf
RH
146#ifdef OBJ_ELF
147#define md_end alpha_elf_md_end
ea1562b3 148extern void alpha_elf_md_end (void);
f37f01cf
RH
149#endif
150
43b4c25e
MM
151/* New fields for supporting explicit relocations (such as !literal to mark
152 where a pointer is loaded from the global table, and !lituse_base to track
153 all of the normal uses of that pointer). */
154
155#define TC_FIX_TYPE struct alpha_fix_tag
156
157struct alpha_fix_tag
158{
ea1562b3
NC
159 struct fix *next_reloc; /* Next !lituse or !gpdisp. */
160 struct alpha_reloc_tag *info; /* Other members with same sequence. */
43b4c25e
MM
161};
162
163/* Initialize the TC_FIX_TYPE field. */
a161fe53 164#define TC_INIT_FIX_DATA(FIX) \
43b4c25e 165do { \
ea1562b3
NC
166 FIX->tc_fix_data.next_reloc = NULL; \
167 FIX->tc_fix_data.info = NULL; \
43b4c25e
MM
168} while (0)
169
170/* Work with DEBUG5 to print fields in tc_fix_type. */
a161fe53 171#define TC_FIX_DATA_PRINT(STREAM, FIX) \
43b4c25e 172do { \
a161fe53
AM
173 if (FIX->tc_fix_data.info) \
174 fprintf (STREAM, "\tinfo = 0x%lx, next_reloc = 0x%lx\n", \
175 (long) FIX->tc_fix_data.info, \
176 (long) FIX->tc_fix_data.next_reloc); \
43b4c25e 177} while (0)
4dc7ead9 178
f4b97536
RH
179#define TARGET_USE_CFIPOP 1
180
181#define tc_cfi_frame_initial_instructions alpha_cfi_frame_initial_instructions
ea1562b3 182extern void alpha_cfi_frame_initial_instructions (void);
f4b97536 183
f37f01cf
RH
184#define DWARF2_LINE_MIN_INSN_LENGTH 4
185#define DWARF2_DEFAULT_RETURN_COLUMN 26
8d79fd44 186#define DWARF2_CIE_DATA_ALIGNMENT (-8)