]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gas/config/tc-mips.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / config / tc-mips.h
CommitLineData
252b5132 1/* tc-mips.h -- header file for tc-mips.c.
250d07de 2 Copyright (C) 1993-2021 Free Software Foundation, Inc.
252b5132
RH
3 Contributed by the OSF and Ralph Campbell.
4 Written by Keith Knowles and Ralph Campbell, working independently.
5 Modified for ECOFF support by Ian Lance Taylor of Cygnus Support.
6
7 This file is part of GAS.
8
9 GAS is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
ec2655a6 11 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
12 any later version.
13
14 GAS is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
21 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
22 02110-1301, USA. */
252b5132
RH
23
24#ifndef TC_MIPS
252b5132
RH
25#define TC_MIPS
26
252b5132
RH
27struct frag;
28struct expressionS;
252b5132
RH
29
30/* Default to big endian. */
31#ifndef TARGET_BYTES_BIG_ENDIAN
32#define TARGET_BYTES_BIG_ENDIAN 1
33#endif
34
35#define TARGET_ARCH bfd_arch_mips
36
252b5132
RH
37#define WORKING_DOT_WORD 1
38#define OLD_FLOAT_READS
39#define REPEAT_CONS_EXPRESSIONS
40#define RELOC_EXPANSION_POSSIBLE
41#define MAX_RELOC_EXPANSION 3
42#define LOCAL_LABELS_FB 1
43
3ae8dd8d
MR
44#define TC_ADDRESS_BYTES mips_address_bytes
45extern int mips_address_bytes (void);
46
cdf6fd85 47/* Maximum symbol offset that can be encoded in a BFD_RELOC_GPREL16
c344a4c8 48 relocation. */
e7d556df 49#define MAX_GPREL_OFFSET (0x7FF0)
252b5132 50
4a6a3df4
AO
51#define md_relax_frag(segment, fragp, stretch) \
52 mips_relax_frag(segment, fragp, stretch)
17a2f251 53extern int mips_relax_frag (asection *, struct frag *, long);
252b5132
RH
54
55#define md_undefined_symbol(name) (0)
56#define md_operand(x)
57
742a56fe
RS
58extern char mips_nop_opcode (void);
59#define NOP_OPCODE (mips_nop_opcode ())
60
17a2f251 61extern void mips_handle_align (struct frag *);
0a9ef439
RH
62#define HANDLE_ALIGN(fragp) mips_handle_align (fragp)
63
c67a084a 64#define MAX_MEM_FOR_RS_ALIGN_CODE (3 + 4)
a19d8eb0 65
a8dbcb85 66struct insn_label_list;
742a56fe
RS
67struct mips_segment_info {
68 struct insn_label_list *labels;
69 unsigned int mips16 : 1;
df58fc94 70 unsigned int micromips : 1;
742a56fe
RS
71};
72#define TC_SEGMENT_INFO_TYPE struct mips_segment_info
a8dbcb85 73
b314ec0e
RS
74/* This field is nonzero if the symbol is the target of a MIPS16 jump. */
75#define TC_SYMFIELD_TYPE int
76
82efde3a 77/* Tell assembler that we have an itbl_mips.h header file to include. */
252b5132
RH
78#define HAVE_ITBL_CPU
79
80/* The endianness of the target format may change based on command
81 line arguments. */
82#define TARGET_FORMAT mips_target_format()
17a2f251 83extern const char *mips_target_format (void);
252b5132 84
a161fe53
AM
85/* MIPS PIC level. */
86
87enum mips_pic_level
88{
89 /* Do not generate PIC code. */
90 NO_PIC,
91
92 /* Generate PIC code as in the SVR4 MIPS ABI. */
93 SVR4_PIC,
0a44bf69
RS
94
95 /* VxWorks's PIC model. */
96 VXWORKS_PIC
a161fe53
AM
97};
98
99extern enum mips_pic_level mips_pic;
100
17a2f251 101extern int tc_get_register (int frame);
252b5132 102
e9670677 103#define md_after_parse_args() mips_after_parse_args()
17a2f251 104extern void mips_after_parse_args (void);
e9670677 105
252b5132 106#define tc_init_after_args() mips_init_after_args()
17a2f251 107extern void mips_init_after_args (void);
252b5132
RH
108
109#define md_parse_long_option(arg) mips_parse_long_option (arg)
17a2f251 110extern int mips_parse_long_option (const char *);
252b5132
RH
111
112#define tc_frob_label(sym) mips_define_label (sym)
17a2f251 113extern void mips_define_label (symbolS *);
252b5132 114
e1b47bd5
RS
115#define tc_new_dot_label(sym) mips_add_dot_label (sym)
116extern void mips_add_dot_label (symbolS *);
a1facbec 117
252b5132 118#define tc_frob_file_before_adjust() mips_frob_file_before_adjust ()
17a2f251 119extern void mips_frob_file_before_adjust (void);
252b5132 120
a161fe53 121#define tc_frob_file_before_fix() mips_frob_file ()
17a2f251 122extern void mips_frob_file (void);
252b5132
RH
123
124#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
125#define tc_frob_file_after_relocs mips_frob_file_after_relocs
17a2f251 126extern void mips_frob_file_after_relocs (void);
252b5132
RH
127#endif
128
d69cd47e
AM
129#ifdef TE_IRIX
130#define tc_frob_symbol(sym, punt) mips_frob_symbol (sym)
131extern void mips_frob_symbol (symbolS *);
132#endif
133
252b5132 134#define tc_fix_adjustable(fixp) mips_fix_adjustable (fixp)
17a2f251 135extern int mips_fix_adjustable (struct fix *);
252b5132 136
55cf6793 137/* Values passed to md_apply_fix don't include symbol values. */
a7ebbfdf
TS
138#define MD_APPLY_SYM_VALUE(FIX) 0
139
3e722fb5 140/* Global syms must not be resolved, to support ELF shared libraries. */
a161fe53 141#define EXTERN_FORCE_RELOC \
3e722fb5 142 (OUTPUT_FLAVOR == bfd_target_elf_flavour)
a161fe53 143
97724570 144#define TC_FORCE_RELOCATION(FIX) mips_force_relocation (FIX)
17a2f251 145extern int mips_force_relocation (struct fix *);
252b5132 146
a38b42ab 147#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
91cb9803
AM
148 (GENERIC_FORCE_RELOCATION_SUB_SAME (FIX, SEG) \
149 || mips_force_relocation (FIX))
a38b42ab 150
b416ba9b
MR
151#define TC_FORCE_RELOCATION_ABS(FIX) mips_force_relocation_abs (FIX)
152extern bfd_boolean mips_force_relocation_abs (struct fix *);
153
252b5132
RH
154/* Register mask variables. These are set by the MIPS assembly code
155 and used by ECOFF and possibly other object file formats. */
156extern unsigned long mips_gprmask;
157extern unsigned long mips_cprmask[4];
158
159#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
160
161#define elf_tc_final_processing mips_elf_final_processing
17a2f251 162extern void mips_elf_final_processing (void);
252b5132 163
252b5132
RH
164#endif
165
17a2f251 166extern void md_mips_end (void);
252b5132
RH
167#define md_end() md_mips_end()
168
17a2f251 169extern void mips_pop_insert (void);
252b5132
RH
170#define md_pop_insert() mips_pop_insert()
171
7d10b47d
RS
172extern void mips_emit_delays (void);
173#define md_flush_pending_output mips_emit_delays
252b5132 174
17a2f251 175extern void mips_enable_auto_align (void);
252b5132
RH
176#define md_elf_section_change_hook() mips_enable_auto_align()
177
1575952e 178#ifdef TE_IRIX
8d79fd44 179enum dwarf2_format;
413a266c 180extern enum dwarf2_format mips_dwarf2_format (asection *);
1575952e
TS
181# define DWARF2_FORMAT(SEC) mips_dwarf2_format (SEC)
182#else
183/* Use GAS' defaults. */
184#endif
14e777e0 185
558fe4a7 186extern int mips_dwarf2_addr_size (void);
73369e65 187#define DWARF2_ADDR_SIZE(bfd) mips_dwarf2_addr_size ()
2f0c68f2
CM
188#define DWARF2_FDE_RELOC_SIZE (compact_eh ? 4 : mips_dwarf2_addr_size ())
189#define DWARF2_FDE_RELOC_ENCODING(enc) \
190 (enc | (compact_eh ? DW_EH_PE_pcrel : 0))
9605f328 191
5862107c
EC
192#define TARGET_USE_CFIPOP 1
193
194#define tc_cfi_frame_initial_instructions mips_cfi_frame_initial_instructions
195extern void mips_cfi_frame_initial_instructions (void);
196
707bfff6
TS
197#define tc_regname_to_dw2regnum tc_mips_regname_to_dw2regnum
198extern int tc_mips_regname_to_dw2regnum (char *regname);
199
5862107c 200#define DWARF2_DEFAULT_RETURN_COLUMN 31
8d79fd44 201#define DWARF2_CIE_DATA_ALIGNMENT (-4)
5862107c 202
2f0c68f2
CM
203#if defined(OBJ_ELF)
204
205#define tc_cfi_reloc_for_encoding mips_cfi_reloc_for_encoding
206extern bfd_reloc_code_real_type mips_cfi_reloc_for_encoding (int encoding);
207
208#define tc_compact_eh_opcode_stop 0x5c
209#define tc_compact_eh_opcode_pad 0x5f
210
211#endif
d56a8dda
RS
212#define DIFF_EXPR_OK
213/* We define DIFF_EXPR_OK because of R_MIPS_PC32, but we have no
214 64-bit form for n64 CFIs. */
215#define CFI_DIFF_EXPR_OK 0
216
263b2574 217#define CONVERT_SYMBOLIC_ATTRIBUTE(name) mips_convert_symbolic_attribute (name)
218extern int mips_convert_symbolic_attribute (const char *);
219
252b5132 220#endif /* TC_MIPS */