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