Home | History | Annotate | Download | only in config
      1 /* tc-mips.h -- header file for tc-mips.c.
      2    Copyright (C) 1993-2016 Free Software Foundation, Inc.
      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
     11    the Free Software Foundation; either version 3, or (at your option)
     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
     21    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
     22    02110-1301, USA.  */
     23 
     24 #ifndef TC_MIPS
     25 #define TC_MIPS
     26 
     27 struct frag;
     28 struct expressionS;
     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 
     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 
     44 #define TC_ADDRESS_BYTES mips_address_bytes
     45 extern int mips_address_bytes (void);
     46 
     47 /* Maximum symbol offset that can be encoded in a BFD_RELOC_GPREL16
     48    relocation.  */
     49 #define MAX_GPREL_OFFSET (0x7FF0)
     50 
     51 #define md_relax_frag(segment, fragp, stretch) \
     52   mips_relax_frag(segment, fragp, stretch)
     53 extern int mips_relax_frag (asection *, struct frag *, long);
     54 
     55 #define md_undefined_symbol(name)	(0)
     56 #define md_operand(x)
     57 
     58 extern char mips_nop_opcode (void);
     59 #define NOP_OPCODE (mips_nop_opcode ())
     60 
     61 extern void mips_handle_align (struct frag *);
     62 #define HANDLE_ALIGN(fragp)  mips_handle_align (fragp)
     63 
     64 #define MAX_MEM_FOR_RS_ALIGN_CODE  (3 + 4)
     65 
     66 struct insn_label_list;
     67 struct mips_segment_info {
     68   struct insn_label_list *labels;
     69   unsigned int mips16 : 1;
     70   unsigned int micromips : 1;
     71 };
     72 #define TC_SEGMENT_INFO_TYPE struct mips_segment_info
     73 
     74 /* This field is nonzero if the symbol is the target of a MIPS16 jump.  */
     75 #define TC_SYMFIELD_TYPE int
     76 
     77 /* Tell assembler that we have an itbl_mips.h header file to include.  */
     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()
     83 extern const char *mips_target_format (void);
     84 
     85 /* MIPS PIC level.  */
     86 
     87 enum 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,
     94 
     95   /* VxWorks's PIC model.  */
     96   VXWORKS_PIC
     97 };
     98 
     99 extern enum mips_pic_level mips_pic;
    100 
    101 extern int tc_get_register (int frame);
    102 
    103 #define md_after_parse_args() mips_after_parse_args()
    104 extern void mips_after_parse_args (void);
    105 
    106 #define tc_init_after_args() mips_init_after_args()
    107 extern void mips_init_after_args (void);
    108 
    109 #define md_parse_long_option(arg) mips_parse_long_option (arg)
    110 extern int mips_parse_long_option (const char *);
    111 
    112 #define tc_frob_label(sym) mips_define_label (sym)
    113 extern void mips_define_label (symbolS *);
    114 
    115 #define tc_new_dot_label(sym) mips_add_dot_label (sym)
    116 extern void mips_add_dot_label (symbolS *);
    117 
    118 #define tc_frob_file_before_adjust() mips_frob_file_before_adjust ()
    119 extern void mips_frob_file_before_adjust (void);
    120 
    121 #define tc_frob_file_before_fix() mips_frob_file ()
    122 extern void mips_frob_file (void);
    123 
    124 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
    125 #define tc_frob_file_after_relocs mips_frob_file_after_relocs
    126 extern void mips_frob_file_after_relocs (void);
    127 #endif
    128 
    129 #define tc_fix_adjustable(fixp) mips_fix_adjustable (fixp)
    130 extern int mips_fix_adjustable (struct fix *);
    131 
    132 /* Values passed to md_apply_fix don't include symbol values.  */
    133 #define MD_APPLY_SYM_VALUE(FIX) 0
    134 
    135 /* Global syms must not be resolved, to support ELF shared libraries.  */
    136 #define EXTERN_FORCE_RELOC			\
    137   (OUTPUT_FLAVOR == bfd_target_elf_flavour)
    138 
    139 #define TC_FORCE_RELOCATION(FIX) mips_force_relocation (FIX)
    140 extern int mips_force_relocation (struct fix *);
    141 
    142 #define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
    143   (! SEG_NORMAL (SEG) || mips_force_relocation (FIX))
    144 
    145 /* Register mask variables.  These are set by the MIPS assembly code
    146    and used by ECOFF and possibly other object file formats.  */
    147 extern unsigned long mips_gprmask;
    148 extern unsigned long mips_cprmask[4];
    149 
    150 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
    151 
    152 #define elf_tc_final_processing mips_elf_final_processing
    153 extern void mips_elf_final_processing (void);
    154 
    155 #endif
    156 
    157 extern void md_mips_end (void);
    158 #define md_end()	md_mips_end()
    159 
    160 extern void mips_pop_insert (void);
    161 #define md_pop_insert()		mips_pop_insert()
    162 
    163 extern void mips_emit_delays (void);
    164 #define md_flush_pending_output mips_emit_delays
    165 
    166 extern void mips_enable_auto_align (void);
    167 #define md_elf_section_change_hook()	mips_enable_auto_align()
    168 
    169 #ifdef TE_IRIX
    170 enum dwarf2_format;
    171 extern enum dwarf2_format mips_dwarf2_format (asection *);
    172 # define DWARF2_FORMAT(SEC) mips_dwarf2_format (SEC)
    173 #else
    174 /* Use GAS' defaults.  */
    175 #endif
    176 
    177 extern int mips_dwarf2_addr_size (void);
    178 #define DWARF2_ADDR_SIZE(bfd) mips_dwarf2_addr_size ()
    179 #define DWARF2_FDE_RELOC_SIZE (compact_eh ? 4 : mips_dwarf2_addr_size ())
    180 #define DWARF2_FDE_RELOC_ENCODING(enc) \
    181   (enc | (compact_eh ? DW_EH_PE_pcrel : 0))
    182 
    183 #define TARGET_USE_CFIPOP 1
    184 
    185 #define tc_cfi_frame_initial_instructions mips_cfi_frame_initial_instructions
    186 extern void mips_cfi_frame_initial_instructions (void);
    187 
    188 #define tc_regname_to_dw2regnum tc_mips_regname_to_dw2regnum
    189 extern int tc_mips_regname_to_dw2regnum (char *regname);
    190 
    191 #define DWARF2_DEFAULT_RETURN_COLUMN 31
    192 #define DWARF2_CIE_DATA_ALIGNMENT (-4)
    193 
    194 #if defined(OBJ_ELF)
    195 
    196 #define tc_cfi_reloc_for_encoding mips_cfi_reloc_for_encoding
    197 extern bfd_reloc_code_real_type mips_cfi_reloc_for_encoding (int encoding);
    198 
    199 #define tc_compact_eh_opcode_stop 0x5c
    200 #define tc_compact_eh_opcode_pad 0x5f
    201 
    202 #endif
    203 #define DIFF_EXPR_OK
    204 /* We define DIFF_EXPR_OK because of R_MIPS_PC32, but we have no
    205    64-bit form for n64 CFIs.  */
    206 #define CFI_DIFF_EXPR_OK 0
    207 
    208 #define CONVERT_SYMBOLIC_ATTRIBUTE(name) mips_convert_symbolic_attribute (name)
    209 extern int mips_convert_symbolic_attribute (const char *);
    210 
    211 #endif /* TC_MIPS */
    212