source: trunk/binutils/gas/config/tc-mips.h@ 2562

Last change on this file since 2562 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 6.6 KB
Line 
1/* tc-mips.h -- header file for tc-mips.c.
2 Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
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
12 the Free Software Foundation; either version 2, or (at your option)
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
22 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 02111-1307, USA. */
24
25#ifndef TC_MIPS
26
27#define TC_MIPS
28
29#ifdef ANSI_PROTOTYPES
30struct frag;
31struct expressionS;
32#endif
33
34/* Default to big endian. */
35#ifndef TARGET_BYTES_BIG_ENDIAN
36#define TARGET_BYTES_BIG_ENDIAN 1
37#endif
38
39#define TARGET_ARCH bfd_arch_mips
40
41#define WORKING_DOT_WORD 1
42#define OLD_FLOAT_READS
43#define REPEAT_CONS_EXPRESSIONS
44#define RELOC_EXPANSION_POSSIBLE
45#define MAX_RELOC_EXPANSION 3
46#define LOCAL_LABELS_FB 1
47
48/* Maximum symbol offset that can be encoded in a BFD_RELOC_GPREL16
49 relocation: */
50#define MAX_GPREL_OFFSET (0x7FF0)
51
52#define md_relax_frag(segment, fragp, stretch) \
53 mips_relax_frag(segment, fragp, stretch)
54extern int mips_relax_frag PARAMS ((asection *, struct frag *, long));
55
56#define md_undefined_symbol(name) (0)
57#define md_operand(x)
58
59extern void mips_handle_align PARAMS ((struct frag *));
60#define HANDLE_ALIGN(fragp) mips_handle_align (fragp)
61
62#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2)
63
64/* We permit PC relative difference expressions when generating
65 embedded PIC code. */
66#define DIFF_EXPR_OK
67
68/* Tell assembler that we have an itbl_mips.h header file to include. */
69#define HAVE_ITBL_CPU
70
71/* The endianness of the target format may change based on command
72 line arguments. */
73#define TARGET_FORMAT mips_target_format()
74extern const char *mips_target_format PARAMS ((void));
75
76/* MIPS PIC level. */
77
78enum mips_pic_level
79{
80 /* Do not generate PIC code. */
81 NO_PIC,
82
83 /* Generate PIC code as in the SVR4 MIPS ABI. */
84 SVR4_PIC,
85
86 /* Generate PIC code without using a global offset table: the data
87 segment has a maximum size of 64K, all data references are off
88 the $gp register, and all text references are PC relative. This
89 is used on some embedded systems. */
90 EMBEDDED_PIC
91};
92
93extern enum mips_pic_level mips_pic;
94
95struct mips_cl_insn
96{
97 unsigned long insn_opcode;
98 const struct mips_opcode *insn_mo;
99 /* The next two fields are used when generating mips16 code. */
100 bfd_boolean use_extend;
101 unsigned short extend;
102};
103
104extern int tc_get_register PARAMS ((int frame));
105
106#define md_after_parse_args() mips_after_parse_args()
107extern void mips_after_parse_args PARAMS ((void));
108
109#define tc_init_after_args() mips_init_after_args()
110extern void mips_init_after_args PARAMS ((void));
111
112#define md_parse_long_option(arg) mips_parse_long_option (arg)
113extern int mips_parse_long_option PARAMS ((const char *));
114
115#define tc_frob_label(sym) mips_define_label (sym)
116extern void mips_define_label PARAMS ((symbolS *));
117
118#define tc_frob_file_before_adjust() mips_frob_file_before_adjust ()
119extern void mips_frob_file_before_adjust PARAMS ((void));
120
121#define tc_frob_file_before_fix() mips_frob_file ()
122extern void mips_frob_file PARAMS ((void));
123
124#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
125#define tc_frob_file_after_relocs mips_frob_file_after_relocs
126extern void mips_frob_file_after_relocs PARAMS ((void));
127#endif
128
129#define tc_fix_adjustable(fixp) mips_fix_adjustable (fixp)
130extern int mips_fix_adjustable PARAMS ((struct fix *));
131
132/* Global syms must not be resolved, to support ELF shared libraries.
133 When generating embedded code, we don't have shared libs. */
134#define EXTERN_FORCE_RELOC \
135 (OUTPUT_FLAVOR == bfd_target_elf_flavour \
136 && mips_pic != EMBEDDED_PIC)
137
138/* When generating embedded PIC code we must keep PC relative
139 relocations. */
140#define TC_FORCE_RELOCATION(FIX) mips_force_relocation (FIX)
141extern int mips_force_relocation PARAMS ((struct fix *));
142
143#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
144 (! SEG_NORMAL (SEG) || mips_force_relocation (FIX))
145
146/* We use this to turn branches to global symbols into branches to
147 local symbols, so that they can be simplified. */
148#define TC_VALIDATE_FIX(fixp, this_segment, skip_label) \
149 do \
150 if (! mips_validate_fix ((fixp), (this_segment))) \
151 goto skip_label; \
152 while (0)
153extern int mips_validate_fix PARAMS ((struct fix *, asection *));
154
155/* Register mask variables. These are set by the MIPS assembly code
156 and used by ECOFF and possibly other object file formats. */
157extern unsigned long mips_gprmask;
158extern unsigned long mips_cprmask[4];
159
160#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
161
162#define elf_tc_final_processing mips_elf_final_processing
163extern void mips_elf_final_processing PARAMS ((void));
164
165#define ELF_TC_SPECIAL_SECTIONS \
166 { ".sdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, \
167 { ".sbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, \
168 { ".lit4", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, \
169 { ".lit8", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, \
170 { ".ucode", SHT_MIPS_UCODE, 0 }, \
171 { ".mdebug", SHT_MIPS_DEBUG, 0 },
172/* Other special sections not generated by the assembler: .reginfo,
173 .liblist, .conflict, .gptab, .got, .dynamic, .rel.dyn. */
174
175#endif
176
177extern void md_mips_end PARAMS ((void));
178#define md_end() md_mips_end()
179
180#define USE_GLOBAL_POINTER_OPT (OUTPUT_FLAVOR == bfd_target_ecoff_flavour \
181 || OUTPUT_FLAVOR == bfd_target_coff_flavour \
182 || OUTPUT_FLAVOR == bfd_target_elf_flavour)
183
184extern void mips_pop_insert PARAMS ((void));
185#define md_pop_insert() mips_pop_insert()
186
187extern void mips_flush_pending_output PARAMS ((void));
188#define md_flush_pending_output mips_flush_pending_output
189
190extern void mips_enable_auto_align PARAMS ((void));
191#define md_elf_section_change_hook() mips_enable_auto_align()
192
193extern enum dwarf2_format mips_dwarf2_format PARAMS ((void));
194#define DWARF2_FORMAT() mips_dwarf2_format ()
195
196#define DWARF2_ADDR_SIZE(bfd) \
197 (DWARF2_FORMAT () == dwarf2_format_32bit ? 4 : 8)
198
199typedef struct {
200 offsetT tc_fr_offset;
201} tc_frag_data_type;
202#define TC_FRAG_TYPE tc_frag_data_type
203
204#endif /* TC_MIPS */
Note: See TracBrowser for help on using the repository browser.